diff options
Diffstat (limited to 'toolchain/uclibc/patches')
-rw-r--r-- | toolchain/uclibc/patches/0.9.34-git/0004-sparc-remove-sparc64-sparcv9-code.patch | 8657 |
1 files changed, 8657 insertions, 0 deletions
diff --git a/toolchain/uclibc/patches/0.9.34-git/0004-sparc-remove-sparc64-sparcv9-code.patch b/toolchain/uclibc/patches/0.9.34-git/0004-sparc-remove-sparc64-sparcv9-code.patch new file mode 100644 index 000000000..6ba7a9da3 --- /dev/null +++ b/toolchain/uclibc/patches/0.9.34-git/0004-sparc-remove-sparc64-sparcv9-code.patch @@ -0,0 +1,8657 @@ +From b0baf143cc3f8f081254e6073b47eeb837ca4470 Mon Sep 17 00:00:00 2001 +From: Waldemar Brodkorb <wbx@openadk.org> +Date: Sun, 31 Aug 2014 10:48:39 +0200 +Subject: [PATCH 4/4] sparc: remove sparc64/sparcv9 code + +The sparc64/sparcv9 code is incomplete. Furthermore there is +no real embedded hardware for sparc64 available, so better remove +it until someone comes up with a complete port. + +Signed-off-by: Waldemar Brodkorb <wbx@openadk.org> +--- + extra/Configs/Config.sparc | 6 - + libc/string/sparc/sparc64/memchr.S | 258 ------ + libc/string/sparc/sparc64/memcpy.S | 922 --------------------- + libc/string/sparc/sparc64/memset.S | 316 ------- + libc/string/sparc/sparc64/sparcv9b/memcpy.S | 611 -------------- + libc/string/sparc/sparc64/stpcpy.S | 270 ------ + libc/string/sparc/sparc64/strcat.S | 338 -------- + libc/string/sparc/sparc64/strchr.S | 485 ----------- + libc/string/sparc/sparc64/strcmp.S | 278 ------- + libc/string/sparc/sparc64/strcpy.S | 244 ------ + libc/string/sparc/sparc64/strlen.S | 172 ---- + libc/sysdeps/linux/sparc/bits/setjmp.h | 31 - + libc/sysdeps/linux/sparc/bits/sigcontext.h | 35 - + libc/sysdeps/linux/sparc/crt1.S | 11 - + libc/sysdeps/linux/sparc/jmpbuf-unwind.h | 18 - + libc/sysdeps/linux/sparc/qp_ops.c | 8 - + libc/sysdeps/linux/sparc/sparcv9/clone.S | 101 --- + libc/sysdeps/linux/sparc/sparcv9/rem.S | 20 - + libc/sysdeps/linux/sparc/sparcv9/sdiv.S | 18 - + libc/sysdeps/linux/sparc/sparcv9/udiv.S | 15 - + libc/sysdeps/linux/sparc/sparcv9/umul.S | 15 - + libc/sysdeps/linux/sparc/sparcv9/urem.S | 17 - + libc/sysdeps/linux/sparc/sys/procfs.h | 88 -- + .../linuxthreads.old/sysdeps/sparc/pt-machine.h | 86 +- + .../sysdeps/sparc/sparc32/pt-machine.h | 82 -- + .../sysdeps/sparc/sparc64/pt-machine.h | 104 --- + libpthread/linuxthreads/sysdeps/sparc/pspinlock.c | 95 ++- + libpthread/linuxthreads/sysdeps/sparc/pt-machine.h | 86 +- + .../linuxthreads/sysdeps/sparc/sparc32/pspinlock.c | 87 -- + .../sysdeps/sparc/sparc32/pt-machine.h | 82 -- + .../sysdeps/sparc/sparc32/sparcv9/pspinlock.c | 93 --- + .../linuxthreads/sysdeps/sparc/sparc64/pspinlock.c | 92 -- + .../sysdeps/sparc/sparc64/pt-machine.h | 104 --- + .../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h | 100 --- + .../sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S | 64 -- + .../unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c | 1 - + .../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h | 99 --- + .../sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S | 63 -- + .../sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h | 102 ++- + .../sysdeps/unix/sysv/linux/sparc/vfork.S | 64 ++ + libpthread/nptl/sysdeps/jmpbuf-unwind.h | 27 + + libpthread/nptl/sysdeps/pthread_spin_lock.c | 39 + + libpthread/nptl/sysdeps/pthread_spin_trylock.c | 28 + + libpthread/nptl/sysdeps/pthreaddef.h | 39 + + libpthread/nptl/sysdeps/sparc/jmpbuf-unwind.h | 32 +- + libpthread/nptl/sysdeps/sparc/pthread_spin_lock.c | 44 +- + .../nptl/sysdeps/sparc/pthread_spin_trylock.c | 33 +- + libpthread/nptl/sysdeps/sparc/pthreaddef.h | 44 +- + .../nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h | 27 - + .../nptl/sysdeps/sparc/sparc32/pthread_spin_lock.c | 39 - + .../sysdeps/sparc/sparc32/pthread_spin_trylock.c | 28 - + libpthread/nptl/sysdeps/sparc/sparc32/pthreaddef.h | 39 - + .../sparc/sparc32/sparcv9/pthread_spin_lock.c | 38 - + .../sparc/sparc32/sparcv9/pthread_spin_trylock.c | 1 - + .../sparc/sparc32/sparcv9/pthread_spin_unlock.c | 1 - + .../nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h | 27 - + .../nptl/sysdeps/sparc/sparc64/pthread_spin_lock.c | 38 - + .../sysdeps/sparc/sparc64/pthread_spin_trylock.c | 33 - + .../sysdeps/sparc/sparc64/pthread_spin_unlock.c | 29 - + libpthread/nptl/sysdeps/sparc/sparc64/pthreaddef.h | 39 - + .../nptl/sysdeps/unix/sysv/linux/sparc/clone.S | 7 +- + .../nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S | 49 +- + .../unix/sysv/linux/sparc/pthread_barrier_wait.c | 94 ++- + .../nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c | 52 ++ + .../sysdeps/unix/sysv/linux/sparc/sem_timedwait.c | 147 ++++ + .../sysdeps/unix/sysv/linux/sparc/sem_trywait.c | 51 ++ + .../nptl/sysdeps/unix/sysv/linux/sparc/sem_wait.c | 124 +++ + .../sysdeps/unix/sysv/linux/sparc/sparc32/clone.S | 2 - + .../unix/sysv/linux/sparc/sparc32/pt-vfork.S | 44 - + .../linux/sparc/sparc32/pthread_barrier_wait.c | 93 --- + .../unix/sysv/linux/sparc/sparc32/sem_post.c | 52 -- + .../unix/sysv/linux/sparc/sparc32/sem_timedwait.c | 147 ---- + .../unix/sysv/linux/sparc/sparc32/sem_trywait.c | 51 -- + .../unix/sysv/linux/sparc/sparc32/sem_wait.c | 124 --- + .../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h | 111 --- + .../sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S | 48 -- + .../sysdeps/unix/sysv/linux/sparc/sparc64/clone.S | 2 - + .../unix/sysv/linux/sparc/sparc64/pt-vfork.S | 44 - + .../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h | 109 --- + .../unix/sysv/linux/sparc/sparc64/timer_create.c | 1 - + .../unix/sysv/linux/sparc/sparc64/timer_delete.c | 1 - + .../unix/sysv/linux/sparc/sparc64/timer_getoverr.c | 1 - + .../unix/sysv/linux/sparc/sparc64/timer_gettime.c | 1 - + .../unix/sysv/linux/sparc/sparc64/timer_settime.c | 1 - + .../sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S | 48 -- + .../sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h | 114 ++- + .../nptl/sysdeps/unix/sysv/linux/sparc/vfork.S | 53 +- + 87 files changed, 1341 insertions(+), 6536 deletions(-) + delete mode 100644 libc/string/sparc/sparc64/memchr.S + delete mode 100644 libc/string/sparc/sparc64/memcpy.S + delete mode 100644 libc/string/sparc/sparc64/memset.S + delete mode 100644 libc/string/sparc/sparc64/sparcv9b/memcpy.S + delete mode 100644 libc/string/sparc/sparc64/stpcpy.S + delete mode 100644 libc/string/sparc/sparc64/strcat.S + delete mode 100644 libc/string/sparc/sparc64/strchr.S + delete mode 100644 libc/string/sparc/sparc64/strcmp.S + delete mode 100644 libc/string/sparc/sparc64/strcpy.S + delete mode 100644 libc/string/sparc/sparc64/strlen.S + delete mode 100644 libc/sysdeps/linux/sparc/sparcv9/clone.S + delete mode 100644 libc/sysdeps/linux/sparc/sparcv9/rem.S + delete mode 100644 libc/sysdeps/linux/sparc/sparcv9/sdiv.S + delete mode 100644 libc/sysdeps/linux/sparc/sparcv9/udiv.S + delete mode 100644 libc/sysdeps/linux/sparc/sparcv9/umul.S + delete mode 100644 libc/sysdeps/linux/sparc/sparcv9/urem.S + delete mode 100644 libpthread/linuxthreads.old/sysdeps/sparc/sparc32/pt-machine.h + delete mode 100644 libpthread/linuxthreads.old/sysdeps/sparc/sparc64/pt-machine.h + delete mode 100644 libpthread/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c + delete mode 100644 libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h + delete mode 100644 libpthread/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c + delete mode 100644 libpthread/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c + delete mode 100644 libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h + delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h + delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S + delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c + delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h + delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S + create mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/vfork.S + create mode 100644 libpthread/nptl/sysdeps/jmpbuf-unwind.h + create mode 100644 libpthread/nptl/sysdeps/pthread_spin_lock.c + create mode 100644 libpthread/nptl/sysdeps/pthread_spin_trylock.c + create mode 100644 libpthread/nptl/sysdeps/pthreaddef.h + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.c + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_trylock.c + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc32/pthreaddef.h + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.c + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_trylock.c + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_unlock.c + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.c + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_trylock.c + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_unlock.c + delete mode 100644 libpthread/nptl/sysdeps/sparc/sparc64/pthreaddef.h + create mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c + create mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c + create mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_trywait.c + create mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_wait.c + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c + delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S + +diff --git a/extra/Configs/Config.sparc b/extra/Configs/Config.sparc +index c6180c8..47c8ac2 100644 +--- a/extra/Configs/Config.sparc ++++ b/extra/Configs/Config.sparc +@@ -26,10 +26,4 @@ config CONFIG_SPARC_V7 + config CONFIG_SPARC_V8 + bool "SPARC v8" + +-config CONFIG_SPARC_V9 +- bool "SPARC v9" +- +-config CONFIG_SPARC_V9B +- bool "SPARC v9b" +- + endchoice +diff --git a/libc/string/sparc/sparc64/memchr.S b/libc/string/sparc/sparc64/memchr.S +deleted file mode 100644 +index 6467f7f..0000000 +--- a/libc/string/sparc/sparc64/memchr.S ++++ /dev/null +@@ -1,258 +0,0 @@ +-/* memchr (str, ch, n) -- Return pointer to first occurrence of CH in STR less +- than N. +- For SPARC v9. +- Copyright (C) 1998, 1999, 2000, 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jan Vondrak <jvon4518@ss1000.ms.mff.cuni.cz> and +- Jakub Jelinek <jj@ultra.linux.cz>. +- This version is developed using the same algorithm as the fast C +- version which carries the following introduction: +- Based on strlen implementation by Torbjorn Granlund (tege@sics.se), +- with help from Dan Sahlin (dan@sics.se) and +- commentary by Jim Blandy (jimb@ai.mit.edu); +- adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), +- and implemented by Roland McGrath (roland@ai.mit.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 <asm/asi.h> +-#ifndef XCC +-#define XCC xcc +-#define USE_BPR +- .register %g2, #scratch +- .register %g3, #scratch +-#endif +- +- /* Normally, this uses +- ((xword - 0x0101010101010101) & 0x8080808080808080) test +- to find out if any byte in xword could be zero. This is fast, but +- also gives false alarm for any byte in range 0x81-0xff. It does +- not matter for correctness, as if this test tells us there could +- be some zero byte, we check it byte by byte, but if bytes with +- high bits set are common in the strings, then this will give poor +- performance. You can #define EIGHTBIT_NOT_RARE and the algorithm +- will use one tick slower, but more precise test +- ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), +- which does not give any false alarms (but if some bits are set, +- one cannot assume from it which bytes are zero and which are not). +- It is yet to be measured, what is the correct default for glibc +- in these days for an average user. +- */ +- +- .text +- .align 32 +-ENTRY(memchr) +- and %o1, 0xff, %o1 /* IEU0 Group */ +-#ifdef USE_BPR +- brz,pn %o2, 12f /* CTI+IEU1 */ +-#else +- tst %o2 /* IEU1 */ +- be,pn %XCC, 12f /* CTI */ +-#endif +- sll %o1, 8, %g3 /* IEU0 Group */ +- add %o0, %o2, %o2 /* IEU1 */ +- +- sethi %hi(0x01010101), %g1 /* IEU0 Group */ +- or %g3, %o1, %g3 /* IEU1 */ +- ldub [%o0], %o3 /* Load */ +- sllx %g3, 16, %g5 /* IEU0 Group */ +- +- or %g1, %lo(0x01010101), %g1 /* IEU1 */ +- sllx %g1, 32, %g2 /* IEU0 Group */ +- or %g3, %g5, %g3 /* IEU1 */ +- sllx %g3, 32, %g5 /* IEU0 Group */ +- +- cmp %o3, %o1 /* IEU1 */ +- be,pn %xcc, 13f /* CTI */ +- or %g1, %g2, %g1 /* IEU0 Group */ +- andcc %o0, 7, %g0 /* IEU1 */ +- +- bne,a,pn %icc, 21f /* CTI */ +- add %o0, 1, %o0 /* IEU0 Group */ +- ldx [%o0], %o3 /* Load Group */ +- sllx %g1, 7, %g2 /* IEU0 */ +- +- or %g3, %g5, %g3 /* IEU1 */ +-1: add %o0, 8, %o0 /* IEU0 Group */ +- xor %o3, %g3, %o4 /* IEU1 */ +- /* %g1 = 0101010101010101 * +- * %g2 = 8080088080808080 * +- * %g3 = c c c c c c c c * +- * %o3 = value * +- * %o4 = value XOR c */ +-2: cmp %o0, %o2 /* IEU1 Group */ +- +- bg,pn %XCC, 11f /* CTI */ +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- sub %o4, %g1, %o5 /* IEU0 Group */ +- add %o0, 8, %o0 /* IEU1 */ +-#ifdef EIGHTBIT_NOT_RARE +- andn %o5, %o4, %o5 /* IEU0 Group */ +-#endif +- +- andcc %o5, %g2, %g0 /* IEU1 Group */ +- be,a,pt %xcc, 2b /* CTI */ +- xor %o3, %g3, %o4 /* IEU0 */ +- srlx %o4, 56, %g5 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 3f /* CTI */ +- srlx %o4, 48, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 4f /* CTI */ +- srlx %o4, 40, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5f /* CTI */ +- +- srlx %o4, 32, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 6f /* CTI */ +- srlx %o4, 24, %g5 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 7f /* CTI */ +- srlx %o4, 16, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 8f /* CTI */ +- srlx %o4, 8, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 9f /* CTI */ +- +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- bne,pt %icc, 2b /* CTI */ +- xor %o3, %g3, %o4 /* IEU0 */ +- retl /* CTI+IEU1 Group */ +- +- add %o0, -9, %o0 /* IEU0 */ +- +- .align 16 +-3: retl /* CTI+IEU1 Group */ +- add %o0, -16, %o0 /* IEU0 */ +-4: retl /* CTI+IEU1 Group */ +- add %o0, -15, %o0 /* IEU0 */ +- +-5: retl /* CTI+IEU1 Group */ +- add %o0, -14, %o0 /* IEU0 */ +-6: retl /* CTI+IEU1 Group */ +- add %o0, -13, %o0 /* IEU0 */ +- +-7: retl /* CTI+IEU1 Group */ +- add %o0, -12, %o0 /* IEU0 */ +-8: retl /* CTI+IEU1 Group */ +- add %o0, -11, %o0 /* IEU0 */ +- +-9: retl /* CTI+IEU1 Group */ +- add %o0, -10, %o0 /* IEU0 */ +-11: sub %o4, %g1, %o5 /* IEU0 Group */ +- sub %o0, 8, %o0 /* IEU1 */ +- +- andcc %o5, %g2, %g0 /* IEU1 Group */ +- be,pt %xcc, 12f /* CTI */ +- sub %o2, %o0, %o2 /* IEU0 */ +- tst %o2 /* IEU1 Group */ +- +- be,pn %XCC, 12f /* CTI */ +- srlx %o4, 56, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 13f /* CTI */ +- +- cmp %o2, 1 /* IEU0 */ +- be,pn %XCC, 12f /* CTI Group */ +- srlx %o4, 48, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 14f /* CTI */ +- cmp %o2, 2 /* IEU1 Group */ +- be,pn %XCC, 12f /* CTI */ +- srlx %o4, 40, %g5 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 15f /* CTI */ +- cmp %o2, 3 /* IEU1 Group */ +- be,pn %XCC, 12f /* CTI */ +- +- srlx %o4, 32, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 16f /* CTI */ +- cmp %o2, 4 /* IEU1 Group */ +- +- be,pn %XCC, 12f /* CTI */ +- srlx %o4, 24, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 17f /* CTI */ +- +- cmp %o2, 5 /* IEU1 Group */ +- be,pn %XCC, 12f /* CTI */ +- srlx %o4, 16, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 18f /* CTI */ +- cmp %o2, 6 /* IEU1 Group */ +- be,pn %XCC, 12f /* CTI */ +- srlx %o4, 8, %g5 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 19f /* CTI */ +- nop /* IEU0 */ +-12: retl /* CTI+IEU1 Group */ +- +- clr %o0 /* IEU0 */ +- nop /* Stub */ +-13: retl /* CTI+IEU1 Group */ +- nop /* IEU0 */ +- +-14: retl /* CTI+IEU1 Group */ +- add %o0, 1, %o0 /* IEU0 */ +-15: retl /* CTI+IEU1 Group */ +- add %o0, 2, %o0 /* IEU0 */ +- +-16: retl /* CTI+IEU1 Group */ +- add %o0, 3, %o0 /* IEU0 */ +-17: retl /* CTI+IEU1 Group */ +- add %o0, 4, %o0 /* IEU0 */ +- +-18: retl /* CTI+IEU1 Group */ +- add %o0, 5, %o0 /* IEU0 */ +-19: retl /* CTI+IEU1 Group */ +- add %o0, 6, %o0 /* IEU0 */ +- +-21: cmp %o0, %o2 /* IEU1 */ +- be,pn %XCC, 12b /* CTI */ +- sllx %g1, 7, %g2 /* IEU0 Group */ +- ldub [%o0], %o3 /* Load */ +- +- or %g3, %g5, %g3 /* IEU1 */ +-22: andcc %o0, 7, %g0 /* IEU1 Group */ +- be,a,pn %icc, 1b /* CTI */ +- ldx [%o0], %o3 /* Load */ +- +- cmp %o3, %o1 /* IEU1 Group */ +- be,pn %xcc, 23f /* CTI */ +- add %o0, 1, %o0 /* IEU0 */ +- cmp %o0, %o2 /* IEU1 Group */ +- +- bne,a,pt %XCC, 22b /* CTI */ +- ldub [%o0], %o3 /* Load */ +- retl /* CTI+IEU1 Group */ +- clr %o0 /* IEU0 */ +- +-23: retl /* CTI+IEU1 Group */ +- add %o0, -1, %o0 /* IEU0 */ +-END(memchr) +- +-libc_hidden_def(memchr) +-weak_alias(memchr,__ubp_memchr) +diff --git a/libc/string/sparc/sparc64/memcpy.S b/libc/string/sparc/sparc64/memcpy.S +deleted file mode 100644 +index df3e2d3..0000000 +--- a/libc/string/sparc/sparc64/memcpy.S ++++ /dev/null +@@ -1,922 +0,0 @@ +-/* Copy SIZE bytes from SRC to DEST. +- For UltraSPARC. +- Copyright (C) 1996, 97, 98, 99, 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by David S. Miller (davem@caip.rutgers.edu) and +- Jakub Jelinek (jakub@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/>. */ +- +-#include <features.h> +-#include <asm/asi.h> +-#ifndef XCC +-#define USE_BPR +- .register %g2, #scratch +- .register %g3, #scratch +- .register %g6, #scratch +-#define XCC xcc +-#endif +-#define FPRS_FEF 4 +- +-#define FREG_FROB(f1, f2, f3, f4, f5, f6, f7, f8, f9) \ +- faligndata %f1, %f2, %f48; \ +- faligndata %f2, %f3, %f50; \ +- faligndata %f3, %f4, %f52; \ +- faligndata %f4, %f5, %f54; \ +- faligndata %f5, %f6, %f56; \ +- faligndata %f6, %f7, %f58; \ +- faligndata %f7, %f8, %f60; \ +- faligndata %f8, %f9, %f62; +- +-#define MAIN_LOOP_CHUNK(src, dest, fdest, fsrc, len, jmptgt) \ +- ldda [%src] %asi, %fdest; \ +- add %src, 0x40, %src; \ +- add %dest, 0x40, %dest; \ +- subcc %len, 0x40, %len; \ +- be,pn %xcc, jmptgt; \ +- stda %fsrc, [%dest - 0x40] %asi; +- +-#define LOOP_CHUNK1(src, dest, len, branch_dest) \ +- MAIN_LOOP_CHUNK(src, dest, f0, f48, len, branch_dest) +-#define LOOP_CHUNK2(src, dest, len, branch_dest) \ +- MAIN_LOOP_CHUNK(src, dest, f16, f48, len, branch_dest) +-#define LOOP_CHUNK3(src, dest, len, branch_dest) \ +- MAIN_LOOP_CHUNK(src, dest, f32, f48, len, branch_dest) +- +-#define STORE_SYNC(dest, fsrc) \ +- stda %fsrc, [%dest] %asi; \ +- add %dest, 0x40, %dest; +- +-#define STORE_JUMP(dest, fsrc, target) \ +- stda %fsrc, [%dest] %asi; \ +- add %dest, 0x40, %dest; \ +- ba,pt %xcc, target; +- +-#define VISLOOP_PAD nop; nop; nop; nop; \ +- nop; nop; nop; nop; \ +- nop; nop; nop; nop; \ +- nop; nop; nop; +- +-#define FINISH_VISCHUNK(dest, f0, f1, left) \ +- subcc %left, 8, %left; \ +- bl,pn %xcc, 205f; \ +- faligndata %f0, %f1, %f48; \ +- std %f48, [%dest]; \ +- add %dest, 8, %dest; +- +-#define UNEVEN_VISCHUNK(dest, f0, f1, left) \ +- subcc %left, 8, %left; \ +- bl,pn %xcc, 205f; \ +- fsrc1 %f0, %f1; \ +- ba,a,pt %xcc, 204f; +- +- /* Macros for non-VIS memcpy code. */ +-#define MOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3) \ +- ldx [%src + offset + 0x00], %t0; \ +- ldx [%src + offset + 0x08], %t1; \ +- ldx [%src + offset + 0x10], %t2; \ +- ldx [%src + offset + 0x18], %t3; \ +- stw %t0, [%dst + offset + 0x04]; \ +- srlx %t0, 32, %t0; \ +- stw %t0, [%dst + offset + 0x00]; \ +- stw %t1, [%dst + offset + 0x0c]; \ +- srlx %t1, 32, %t1; \ +- stw %t1, [%dst + offset + 0x08]; \ +- stw %t2, [%dst + offset + 0x14]; \ +- srlx %t2, 32, %t2; \ +- stw %t2, [%dst + offset + 0x10]; \ +- stw %t3, [%dst + offset + 0x1c]; \ +- srlx %t3, 32, %t3; \ +- stw %t3, [%dst + offset + 0x18]; +- +-#define MOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3) \ +- ldx [%src + offset + 0x00], %t0; \ +- ldx [%src + offset + 0x08], %t1; \ +- ldx [%src + offset + 0x10], %t2; \ +- ldx [%src + offset + 0x18], %t3; \ +- stx %t0, [%dst + offset + 0x00]; \ +- stx %t1, [%dst + offset + 0x08]; \ +- stx %t2, [%dst + offset + 0x10]; \ +- stx %t3, [%dst + offset + 0x18]; \ +- ldx [%src + offset + 0x20], %t0; \ +- ldx [%src + offset + 0x28], %t1; \ +- ldx [%src + offset + 0x30], %t2; \ +- ldx [%src + offset + 0x38], %t3; \ +- stx %t0, [%dst + offset + 0x20]; \ +- stx %t1, [%dst + offset + 0x28]; \ +- stx %t2, [%dst + offset + 0x30]; \ +- stx %t3, [%dst + offset + 0x38]; +- +-#define MOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3) \ +- ldx [%src - offset - 0x10], %t0; \ +- ldx [%src - offset - 0x08], %t1; \ +- stw %t0, [%dst - offset - 0x0c]; \ +- srlx %t0, 32, %t2; \ +- stw %t2, [%dst - offset - 0x10]; \ +- stw %t1, [%dst - offset - 0x04]; \ +- srlx %t1, 32, %t3; \ +- stw %t3, [%dst - offset - 0x08]; +- +-#define MOVE_LASTALIGNCHUNK(src, dst, offset, t0, t1) \ +- ldx [%src - offset - 0x10], %t0; \ +- ldx [%src - offset - 0x08], %t1; \ +- stx %t0, [%dst - offset - 0x10]; \ +- stx %t1, [%dst - offset - 0x08]; +- +- /* Macros for non-VIS memmove code. */ +-#define RMOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3) \ +- ldx [%src - offset - 0x20], %t0; \ +- ldx [%src - offset - 0x18], %t1; \ +- ldx [%src - offset - 0x10], %t2; \ +- ldx [%src - offset - 0x08], %t3; \ +- stw %t0, [%dst - offset - 0x1c]; \ +- srlx %t0, 32, %t0; \ +- stw %t0, [%dst - offset - 0x20]; \ +- stw %t1, [%dst - offset - 0x14]; \ +- srlx %t1, 32, %t1; \ +- stw %t1, [%dst - offset - 0x18]; \ +- stw %t2, [%dst - offset - 0x0c]; \ +- srlx %t2, 32, %t2; \ +- stw %t2, [%dst - offset - 0x10]; \ +- stw %t3, [%dst - offset - 0x04]; \ +- srlx %t3, 32, %t3; \ +- stw %t3, [%dst - offset - 0x08]; +- +-#define RMOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3) \ +- ldx [%src - offset - 0x20], %t0; \ +- ldx [%src - offset - 0x18], %t1; \ +- ldx [%src - offset - 0x10], %t2; \ +- ldx [%src - offset - 0x08], %t3; \ +- stx %t0, [%dst - offset - 0x20]; \ +- stx %t1, [%dst - offset - 0x18]; \ +- stx %t2, [%dst - offset - 0x10]; \ +- stx %t3, [%dst - offset - 0x08]; \ +- ldx [%src - offset - 0x40], %t0; \ +- ldx [%src - offset - 0x38], %t1; \ +- ldx [%src - offset - 0x30], %t2; \ +- ldx [%src - offset - 0x28], %t3; \ +- stx %t0, [%dst - offset - 0x40]; \ +- stx %t1, [%dst - offset - 0x38]; \ +- stx %t2, [%dst - offset - 0x30]; \ +- stx %t3, [%dst - offset - 0x28]; +- +-#define RMOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3) \ +- ldx [%src + offset + 0x00], %t0; \ +- ldx [%src + offset + 0x08], %t1; \ +- stw %t0, [%dst + offset + 0x04]; \ +- srlx %t0, 32, %t2; \ +- stw %t2, [%dst + offset + 0x00]; \ +- stw %t1, [%dst + offset + 0x0c]; \ +- srlx %t1, 32, %t3; \ +- stw %t3, [%dst + offset + 0x08]; +- +-#define RMOVE_LASTALIGNCHUNK(src, dst, offset, t0, t1) \ +- ldx [%src + offset + 0x00], %t0; \ +- ldx [%src + offset + 0x08], %t1; \ +- stx %t0, [%dst + offset + 0x00]; \ +- stx %t1, [%dst + offset + 0x08]; +- +- .text +- .align 32 +- +-#ifdef __UCLIBC_SUSV3_LEGACY__ +-ENTRY(bcopy) +- sub %o1, %o0, %o4 /* IEU0 Group */ +- mov %o0, %g3 /* IEU1 */ +- cmp %o4, %o2 /* IEU1 Group */ +- mov %o1, %o0 /* IEU0 */ +- bgeu,pt %XCC, 210f /* CTI */ +- mov %g3, %o1 /* IEU0 Group */ +-#ifndef USE_BPR +- srl %o2, 0, %o2 /* IEU1 */ +-#endif +- brnz,pn %o2, 220f /* CTI Group */ +- add %o0, %o2, %o0 /* IEU0 */ +- retl +- nop +-END(bcopy) +-#endif +- +- .align 32 +-200: be,pt %xcc, 201f /* CTI */ +- andcc %o0, 0x38, %g5 /* IEU1 Group */ +- mov 8, %g1 /* IEU0 */ +- sub %g1, %g2, %g2 /* IEU0 Group */ +- andcc %o0, 1, %g0 /* IEU1 */ +- be,pt %icc, 2f /* CTI */ +- sub %o2, %g2, %o2 /* IEU0 Group */ +-1: ldub [%o1], %o5 /* Load Group */ +- add %o1, 1, %o1 /* IEU0 */ +- add %o0, 1, %o0 /* IEU1 */ +- subcc %g2, 1, %g2 /* IEU1 Group */ +- be,pn %xcc, 3f /* CTI */ +- stb %o5, [%o0 - 1] /* Store */ +-2: ldub [%o1], %o5 /* Load Group */ +- add %o0, 2, %o0 /* IEU0 */ +- ldub [%o1 + 1], %g3 /* Load Group */ +- subcc %g2, 2, %g2 /* IEU1 Group */ +- stb %o5, [%o0 - 2] /* Store */ +- add %o1, 2, %o1 /* IEU0 */ +- bne,pt %xcc, 2b /* CTI Group */ +- stb %g3, [%o0 - 1] /* Store */ +-3: andcc %o0, 0x38, %g5 /* IEU1 Group */ +-201: be,pt %icc, 202f /* CTI */ +- mov 64, %g1 /* IEU0 */ +- fmovd %f0, %f2 /* FPU */ +- sub %g1, %g5, %g5 /* IEU0 Group */ +- alignaddr %o1, %g0, %g1 /* GRU Group */ +- ldd [%g1], %f4 /* Load Group */ +- sub %o2, %g5, %o2 /* IEU0 */ +-1: ldd [%g1 + 0x8], %f6 /* Load Group */ +- add %g1, 0x8, %g1 /* IEU0 Group */ +- subcc %g5, 8, %g5 /* IEU1 */ +- faligndata %f4, %f6, %f0 /* GRU Group */ +- std %f0, [%o0] /* Store */ +- add %o1, 8, %o1 /* IEU0 Group */ +- be,pn %xcc, 202f /* CTI */ +- add %o0, 8, %o0 /* IEU1 */ +- ldd [%g1 + 0x8], %f4 /* Load Group */ +- add %g1, 8, %g1 /* IEU0 */ +- subcc %g5, 8, %g5 /* IEU1 */ +- faligndata %f6, %f4, %f0 /* GRU Group */ +- std %f0, [%o0] /* Store */ +- add %o1, 8, %o1 /* IEU0 */ +- bne,pt %xcc, 1b /* CTI Group */ +- add %o0, 8, %o0 /* IEU0 */ +-202: membar #LoadStore | #StoreStore | #StoreLoad /* LSU Group */ +- wr %g0, ASI_BLK_P, %asi /* LSU Group */ +- subcc %o2, 0x40, %g6 /* IEU1 Group */ +- mov %o1, %g1 /* IEU0 */ +- andncc %g6, (0x40 - 1), %g6 /* IEU1 Group */ +- srl %g1, 3, %g2 /* IEU0 */ +- sub %o2, %g6, %g3 /* IEU0 Group */ +- andn %o1, (0x40 - 1), %o1 /* IEU1 */ +- and %g2, 7, %g2 /* IEU0 Group */ +- andncc %g3, 0x7, %g3 /* IEU1 */ +- fmovd %f0, %f2 /* FPU */ +- sub %g3, 0x10, %g3 /* IEU0 Group */ +- sub %o2, %g6, %o2 /* IEU1 */ +- alignaddr %g1, %g0, %g0 /* GRU Group */ +- add %g1, %g6, %g1 /* IEU0 Group */ +- subcc %o2, %g3, %o2 /* IEU1 */ +- ldda [%o1 + 0x00] %asi, %f0 /* LSU Group */ +- add %g1, %g3, %g1 /* IEU0 */ +- ldda [%o1 + 0x40] %asi, %f16 /* LSU Group */ +- sub %g6, 0x80, %g6 /* IEU0 */ +- ldda [%o1 + 0x80] %asi, %f32 /* LSU Group */ +- /* Clk1 Group 8-( */ +- /* Clk2 Group 8-( */ +- /* Clk3 Group 8-( */ +- /* Clk4 Group 8-( */ +-203: rd %pc, %g5 /* PDU Group 8-( */ +- addcc %g5, %lo(300f - 203b), %g5 /* IEU1 Group */ +- sll %g2, 9, %g2 /* IEU0 */ +- jmpl %g5 + %g2, %g0 /* CTI Group brk forced*/ +- addcc %o1, 0xc0, %o1 /* IEU1 Group */ +- +- .align 512 /* OK, here comes the fun part... */ +-300: FREG_FROB(f0, f2, f4, f6, f8, f10,f12,f14,f16) LOOP_CHUNK1(o1, o0, g6, 301f) +- FREG_FROB(f16,f18,f20,f22,f24,f26,f28,f30,f32) LOOP_CHUNK2(o1, o0, g6, 302f) +- FREG_FROB(f32,f34,f36,f38,f40,f42,f44,f46,f0) LOOP_CHUNK3(o1, o0, g6, 303f) +- b,pt %xcc, 300b+4; faligndata %f0, %f2, %f48 +-301: FREG_FROB(f16,f18,f20,f22,f24,f26,f28,f30,f32) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f32,f34,f36,f38,f40,f42,f44,f46,f0) STORE_JUMP(o0, f48, 400f) membar #Sync +-302: FREG_FROB(f32,f34,f36,f38,f40,f42,f44,f46,f0) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f0, f2, f4, f6, f8, f10,f12,f14,f16) STORE_JUMP(o0, f48, 416f) membar #Sync +-303: FREG_FROB(f0, f2, f4, f6, f8, f10,f12,f14,f16) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f16,f18,f20,f22,f24,f26,f28,f30,f32) STORE_JUMP(o0, f48, 432f) membar #Sync +- VISLOOP_PAD +-310: FREG_FROB(f2, f4, f6, f8, f10,f12,f14,f16,f18) LOOP_CHUNK1(o1, o0, g6, 311f) +- FREG_FROB(f18,f20,f22,f24,f26,f28,f30,f32,f34) LOOP_CHUNK2(o1, o0, g6, 312f) +- FREG_FROB(f34,f36,f38,f40,f42,f44,f46,f0, f2) LOOP_CHUNK3(o1, o0, g6, 313f) +- b,pt %xcc, 310b+4; faligndata %f2, %f4, %f48 +-311: FREG_FROB(f18,f20,f22,f24,f26,f28,f30,f32,f34) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f34,f36,f38,f40,f42,f44,f46,f0, f2) STORE_JUMP(o0, f48, 402f) membar #Sync +-312: FREG_FROB(f34,f36,f38,f40,f42,f44,f46,f0, f2) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f2, f4, f6, f8, f10,f12,f14,f16,f18) STORE_JUMP(o0, f48, 418f) membar #Sync +-313: FREG_FROB(f2, f4, f6, f8, f10,f12,f14,f16,f18) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f18,f20,f22,f24,f26,f28,f30,f32,f34) STORE_JUMP(o0, f48, 434f) membar #Sync +- VISLOOP_PAD +-320: FREG_FROB(f4, f6, f8, f10,f12,f14,f16,f18,f20) LOOP_CHUNK1(o1, o0, g6, 321f) +- FREG_FROB(f20,f22,f24,f26,f28,f30,f32,f34,f36) LOOP_CHUNK2(o1, o0, g6, 322f) +- FREG_FROB(f36,f38,f40,f42,f44,f46,f0, f2, f4) LOOP_CHUNK3(o1, o0, g6, 323f) +- b,pt %xcc, 320b+4; faligndata %f4, %f6, %f48 +-321: FREG_FROB(f20,f22,f24,f26,f28,f30,f32,f34,f36) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f36,f38,f40,f42,f44,f46,f0, f2, f4) STORE_JUMP(o0, f48, 404f) membar #Sync +-322: FREG_FROB(f36,f38,f40,f42,f44,f46,f0, f2, f4) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f4, f6, f8, f10,f12,f14,f16,f18,f20) STORE_JUMP(o0, f48, 420f) membar #Sync +-323: FREG_FROB(f4, f6, f8, f10,f12,f14,f16,f18,f20) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f20,f22,f24,f26,f28,f30,f32,f34,f36) STORE_JUMP(o0, f48, 436f) membar #Sync +- VISLOOP_PAD +-330: FREG_FROB(f6, f8, f10,f12,f14,f16,f18,f20,f22) LOOP_CHUNK1(o1, o0, g6, 331f) +- FREG_FROB(f22,f24,f26,f28,f30,f32,f34,f36,f38) LOOP_CHUNK2(o1, o0, g6, 332f) +- FREG_FROB(f38,f40,f42,f44,f46,f0, f2, f4, f6) LOOP_CHUNK3(o1, o0, g6, 333f) +- b,pt %xcc, 330b+4; faligndata %f6, %f8, %f48 +-331: FREG_FROB(f22,f24,f26,f28,f30,f32,f34,f36,f38) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f38,f40,f42,f44,f46,f0, f2, f4, f6) STORE_JUMP(o0, f48, 406f) membar #Sync +-332: FREG_FROB(f38,f40,f42,f44,f46,f0, f2, f4, f6) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f6, f8, f10,f12,f14,f16,f18,f20,f22) STORE_JUMP(o0, f48, 422f) membar #Sync +-333: FREG_FROB(f6, f8, f10,f12,f14,f16,f18,f20,f22) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f22,f24,f26,f28,f30,f32,f34,f36,f38) STORE_JUMP(o0, f48, 438f) membar #Sync +- VISLOOP_PAD +-340: FREG_FROB(f8, f10,f12,f14,f16,f18,f20,f22,f24) LOOP_CHUNK1(o1, o0, g6, 341f) +- FREG_FROB(f24,f26,f28,f30,f32,f34,f36,f38,f40) LOOP_CHUNK2(o1, o0, g6, 342f) +- FREG_FROB(f40,f42,f44,f46,f0, f2, f4, f6, f8) LOOP_CHUNK3(o1, o0, g6, 343f) +- b,pt %xcc, 340b+4; faligndata %f8, %f10, %f48 +-341: FREG_FROB(f24,f26,f28,f30,f32,f34,f36,f38,f40) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f40,f42,f44,f46,f0, f2, f4, f6, f8) STORE_JUMP(o0, f48, 408f) membar #Sync +-342: FREG_FROB(f40,f42,f44,f46,f0, f2, f4, f6, f8) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f8, f10,f12,f14,f16,f18,f20,f22,f24) STORE_JUMP(o0, f48, 424f) membar #Sync +-343: FREG_FROB(f8, f10,f12,f14,f16,f18,f20,f22,f24) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f24,f26,f28,f30,f32,f34,f36,f38,f40) STORE_JUMP(o0, f48, 440f) membar #Sync +- VISLOOP_PAD +-350: FREG_FROB(f10,f12,f14,f16,f18,f20,f22,f24,f26) LOOP_CHUNK1(o1, o0, g6, 351f) +- FREG_FROB(f26,f28,f30,f32,f34,f36,f38,f40,f42) LOOP_CHUNK2(o1, o0, g6, 352f) +- FREG_FROB(f42,f44,f46,f0, f2, f4, f6, f8, f10) LOOP_CHUNK3(o1, o0, g6, 353f) +- b,pt %xcc, 350b+4; faligndata %f10, %f12, %f48 +-351: FREG_FROB(f26,f28,f30,f32,f34,f36,f38,f40,f42) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f42,f44,f46,f0, f2, f4, f6, f8, f10) STORE_JUMP(o0, f48, 410f) membar #Sync +-352: FREG_FROB(f42,f44,f46,f0, f2, f4, f6, f8, f10) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f10,f12,f14,f16,f18,f20,f22,f24,f26) STORE_JUMP(o0, f48, 426f) membar #Sync +-353: FREG_FROB(f10,f12,f14,f16,f18,f20,f22,f24,f26) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f26,f28,f30,f32,f34,f36,f38,f40,f42) STORE_JUMP(o0, f48, 442f) membar #Sync +- VISLOOP_PAD +-360: FREG_FROB(f12,f14,f16,f18,f20,f22,f24,f26,f28) LOOP_CHUNK1(o1, o0, g6, 361f) +- FREG_FROB(f28,f30,f32,f34,f36,f38,f40,f42,f44) LOOP_CHUNK2(o1, o0, g6, 362f) +- FREG_FROB(f44,f46,f0, f2, f4, f6, f8, f10,f12) LOOP_CHUNK3(o1, o0, g6, 363f) +- b,pt %xcc, 360b+4; faligndata %f12, %f14, %f48 +-361: FREG_FROB(f28,f30,f32,f34,f36,f38,f40,f42,f44) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f44,f46,f0, f2, f4, f6, f8, f10,f12) STORE_JUMP(o0, f48, 412f) membar #Sync +-362: FREG_FROB(f44,f46,f0, f2, f4, f6, f8, f10,f12) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f12,f14,f16,f18,f20,f22,f24,f26,f28) STORE_JUMP(o0, f48, 428f) membar #Sync +-363: FREG_FROB(f12,f14,f16,f18,f20,f22,f24,f26,f28) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f28,f30,f32,f34,f36,f38,f40,f42,f44) STORE_JUMP(o0, f48, 444f) membar #Sync +- VISLOOP_PAD +-370: FREG_FROB(f14,f16,f18,f20,f22,f24,f26,f28,f30) LOOP_CHUNK1(o1, o0, g6, 371f) +- FREG_FROB(f30,f32,f34,f36,f38,f40,f42,f44,f46) LOOP_CHUNK2(o1, o0, g6, 372f) +- FREG_FROB(f46,f0, f2, f4, f6, f8, f10,f12,f14) LOOP_CHUNK3(o1, o0, g6, 373f) +- b,pt %xcc, 370b+4; faligndata %f14, %f16, %f48 +-371: FREG_FROB(f30,f32,f34,f36,f38,f40,f42,f44,f46) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f46,f0, f2, f4, f6, f8, f10,f12,f14) STORE_JUMP(o0, f48, 414f) membar #Sync +-372: FREG_FROB(f46,f0, f2, f4, f6, f8, f10,f12,f14) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f14,f16,f18,f20,f22,f24,f26,f28,f30) STORE_JUMP(o0, f48, 430f) membar #Sync +-373: FREG_FROB(f14,f16,f18,f20,f22,f24,f26,f28,f30) STORE_SYNC(o0, f48) membar #Sync +- FREG_FROB(f30,f32,f34,f36,f38,f40,f42,f44,f46) STORE_JUMP(o0, f48, 446f) membar #Sync +- VISLOOP_PAD +-400: FINISH_VISCHUNK(o0, f0, f2, g3) +-402: FINISH_VISCHUNK(o0, f2, f4, g3) +-404: FINISH_VISCHUNK(o0, f4, f6, g3) +-406: FINISH_VISCHUNK(o0, f6, f8, g3) +-408: FINISH_VISCHUNK(o0, f8, f10, g3) +-410: FINISH_VISCHUNK(o0, f10, f12, g3) +-412: FINISH_VISCHUNK(o0, f12, f14, g3) +-414: UNEVEN_VISCHUNK(o0, f14, f0, g3) +-416: FINISH_VISCHUNK(o0, f16, f18, g3) +-418: FINISH_VISCHUNK(o0, f18, f20, g3) +-420: FINISH_VISCHUNK(o0, f20, f22, g3) +-422: FINISH_VISCHUNK(o0, f22, f24, g3) +-424: FINISH_VISCHUNK(o0, f24, f26, g3) +-426: FINISH_VISCHUNK(o0, f26, f28, g3) +-428: FINISH_VISCHUNK(o0, f28, f30, g3) +-430: UNEVEN_VISCHUNK(o0, f30, f0, g3) +-432: FINISH_VISCHUNK(o0, f32, f34, g3) +-434: FINISH_VISCHUNK(o0, f34, f36, g3) +-436: FINISH_VISCHUNK(o0, f36, f38, g3) +-438: FINISH_VISCHUNK(o0, f38, f40, g3) +-440: FINISH_VISCHUNK(o0, f40, f42, g3) +-442: FINISH_VISCHUNK(o0, f42, f44, g3) +-444: FINISH_VISCHUNK(o0, f44, f46, g3) +-446: UNEVEN_VISCHUNK(o0, f46, f0, g3) +-204: ldd [%o1], %f2 /* Load Group */ +- add %o1, 8, %o1 /* IEU0 */ +- subcc %g3, 8, %g3 /* IEU1 */ +- faligndata %f0, %f2, %f8 /* GRU Group */ +- std %f8, [%o0] /* Store */ +- bl,pn %xcc, 205f /* CTI */ +- add %o0, 8, %o0 /* IEU0 Group */ +- ldd [%o1], %f0 /* Load Group */ +- add %o1, 8, %o1 /* IEU0 */ +- subcc %g3, 8, %g3 /* IEU1 */ +- faligndata %f2, %f0, %f8 /* GRU Group */ +- std %f8, [%o0] /* Store */ +- bge,pt %xcc, 204b /* CTI */ +- add %o0, 8, %o0 /* IEU0 Group */ +-205: brz,pt %o2, 207f /* CTI Group */ +- mov %g1, %o1 /* IEU0 */ +-206: ldub [%o1], %g5 /* LOAD */ +- add %o1, 1, %o1 /* IEU0 */ +- add %o0, 1, %o0 /* IEU1 */ +- subcc %o2, 1, %o2 /* IEU1 */ +- bne,pt %xcc, 206b /* CTI */ +- stb %g5, [%o0 - 1] /* Store Group */ +-207: membar #StoreLoad | #StoreStore /* LSU Group */ +- wr %g0, FPRS_FEF, %fprs +- retl +- mov %g4, %o0 +- +-208: andcc %o2, 1, %g0 /* IEU1 Group */ +- be,pt %icc, 2f+4 /* CTI */ +-1: ldub [%o1], %g5 /* LOAD Group */ +- add %o1, 1, %o1 /* IEU0 */ +- add %o0, 1, %o0 /* IEU1 */ +- subcc %o2, 1, %o2 /* IEU1 Group */ +- be,pn %xcc, 209f /* CTI */ +- stb %g5, [%o0 - 1] /* Store */ +-2: ldub [%o1], %g5 /* LOAD Group */ +- add %o0, 2, %o0 /* IEU0 */ +- ldub [%o1 + 1], %o5 /* LOAD Group */ +- add %o1, 2, %o1 /* IEU0 */ +- subcc %o2, 2, %o2 /* IEU1 Group */ +- stb %g5, [%o0 - 2] /* Store */ +- bne,pt %xcc, 2b /* CTI */ +- stb %o5, [%o0 - 1] /* Store */ +-209: retl +- mov %g4, %o0 +- +-#ifdef USE_BPR +- +- /* void *__align_cpy_4(void *dest, void *src, size_t n) +- * SPARC v9 SYSV ABI +- * Like memcpy, but results are undefined if (!n || ((dest | src | n) & 3)) +- */ +- +- .align 32 +-ENTRY(__align_cpy_4) +- mov %o0, %g4 /* IEU0 Group */ +- cmp %o2, 15 /* IEU1 */ +- bleu,pn %xcc, 208b /* CTI */ +- cmp %o2, (64 * 6) /* IEU1 Group */ +- bgeu,pn %xcc, 200b /* CTI */ +- andcc %o0, 7, %g2 /* IEU1 Group */ +- ba,pt %xcc, 216f /* CTI */ +- andcc %o1, 4, %g0 /* IEU1 Group */ +-END(__align_cpy_4) +- +- /* void *__align_cpy_8(void *dest, void *src, size_t n) +- * SPARC v9 SYSV ABI +- * Like memcpy, but results are undefined if (!n || ((dest | src | n) & 7)) +- */ +- +- .align 32 +-ENTRY(__align_cpy_8) +- mov %o0, %g4 /* IEU0 Group */ +- cmp %o2, 15 /* IEU1 */ +- bleu,pn %xcc, 208b /* CTI */ +- cmp %o2, (64 * 6) /* IEU1 Group */ +- bgeu,pn %xcc, 201b /* CTI */ +- andcc %o0, 0x38, %g5 /* IEU1 Group */ +- andcc %o2, -128, %g6 /* IEU1 Group */ +- bne,a,pt %xcc, 82f + 4 /* CTI */ +- ldx [%o1], %g1 /* Load */ +- ba,pt %xcc, 41f /* CTI Group */ +- andcc %o2, 0x70, %g6 /* IEU1 */ +-END(__align_cpy_8) +- +- /* void *__align_cpy_16(void *dest, void *src, size_t n) +- * SPARC v9 SYSV ABI +- * Like memcpy, but results are undefined if (!n || ((dest | src | n) & 15)) +- */ +- +- .align 32 +-ENTRY(__align_cpy_16) +- mov %o0, %g4 /* IEU0 Group */ +- cmp %o2, (64 * 6) /* IEU1 */ +- bgeu,pn %xcc, 201b /* CTI */ +- andcc %o0, 0x38, %g5 /* IEU1 Group */ +- andcc %o2, -128, %g6 /* IEU1 Group */ +- bne,a,pt %xcc, 82f + 4 /* CTI */ +- ldx [%o1], %g1 /* Load */ +- ba,pt %xcc, 41f /* CTI Group */ +- andcc %o2, 0x70, %g6 /* IEU1 */ +-END(__align_cpy_16) +- +-#endif +- +- .align 32 +-ENTRY(memcpy) +-210: +-#ifndef USE_BPR +- srl %o2, 0, %o2 /* IEU1 Group */ +-#endif +- brz,pn %o2, 209b /* CTI Group */ +- mov %o0, %g4 /* IEU0 */ +-218: cmp %o2, 15 /* IEU1 Group */ +- bleu,pn %xcc, 208b /* CTI */ +- cmp %o2, (64 * 6) /* IEU1 Group */ +- bgeu,pn %xcc, 200b /* CTI */ +- andcc %o0, 7, %g2 /* IEU1 Group */ +- sub %o0, %o1, %g5 /* IEU0 */ +- andcc %g5, 3, %o5 /* IEU1 Group */ +- bne,pn %xcc, 212f /* CTI */ +- andcc %o1, 3, %g0 /* IEU1 Group */ +- be,a,pt %xcc, 216f /* CTI */ +- andcc %o1, 4, %g0 /* IEU1 Group */ +- andcc %o1, 1, %g0 /* IEU1 Group */ +- be,pn %xcc, 4f /* CTI */ +- andcc %o1, 2, %g0 /* IEU1 Group */ +- ldub [%o1], %g2 /* Load Group */ +- add %o1, 1, %o1 /* IEU0 */ +- add %o0, 1, %o0 /* IEU1 */ +- sub %o2, 1, %o2 /* IEU0 Group */ +- bne,pn %xcc, 5f /* CTI Group */ +- stb %g2, [%o0 - 1] /* Store */ +-4: lduh [%o1], %g2 /* Load Group */ +- add %o1, 2, %o1 /* IEU0 */ +- add %o0, 2, %o0 /* IEU1 */ +- sub %o2, 2, %o2 /* IEU0 */ +- sth %g2, [%o0 - 2] /* Store Group + bubble */ +-5: andcc %o1, 4, %g0 /* IEU1 */ +-216: be,a,pn %xcc, 2f /* CTI */ +- andcc %o2, -128, %g6 /* IEU1 Group */ +- lduw [%o1], %g5 /* Load Group */ +- add %o1, 4, %o1 /* IEU0 */ +- add %o0, 4, %o0 /* IEU1 */ +- sub %o2, 4, %o2 /* IEU0 Group */ +- stw %g5, [%o0 - 4] /* Store */ +- andcc %o2, -128, %g6 /* IEU1 Group */ +-2: be,pn %xcc, 215f /* CTI */ +- andcc %o0, 4, %g0 /* IEU1 Group */ +- be,pn %xcc, 82f + 4 /* CTI Group */ +-5: MOVE_BIGCHUNK(o1, o0, 0x00, g1, g3, g5, o5) +- MOVE_BIGCHUNK(o1, o0, 0x20, g1, g3, g5, o5) +- MOVE_BIGCHUNK(o1, o0, 0x40, g1, g3, g5, o5) +- MOVE_BIGCHUNK(o1, o0, 0x60, g1, g3, g5, o5) +-35: subcc %g6, 128, %g6 /* IEU1 Group */ +- add %o1, 128, %o1 /* IEU0 */ +- bne,pt %xcc, 5b /* CTI */ +- add %o0, 128, %o0 /* IEU0 Group */ +-215: andcc %o2, 0x70, %g6 /* IEU1 Group */ +-41: be,pn %xcc, 80f /* CTI */ +- andcc %o2, 8, %g0 /* IEU1 Group */ +- /* Clk1 8-( */ +- /* Clk2 8-( */ +- /* Clk3 8-( */ +- /* Clk4 8-( */ +-79: rd %pc, %o5 /* PDU Group */ +- sll %g6, 1, %g5 /* IEU0 Group */ +- add %o1, %g6, %o1 /* IEU1 */ +- sub %o5, %g5, %o5 /* IEU0 Group */ +- jmpl %o5 + %lo(80f - 79b), %g0 /* CTI Group brk forced*/ +- add %o0, %g6, %o0 /* IEU0 Group */ +-36: MOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g5, o5) +- MOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g5, o5) +- MOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g5, o5) +- MOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g5, o5) +- MOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g5, o5) +- MOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g5, o5) +- MOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g5, o5) +-80: be,pt %xcc, 81f /* CTI */ +- andcc %o2, 4, %g0 /* IEU1 */ +- ldx [%o1], %g2 /* Load Group */ +- add %o0, 8, %o0 /* IEU0 */ +- stw %g2, [%o0 - 0x4] /* Store Group */ +- add %o1, 8, %o1 /* IEU1 */ +- srlx %g2, 32, %g2 /* IEU0 Group */ +- stw %g2, [%o0 - 0x8] /* Store */ +-81: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 2, %g0 /* IEU1 Group */ +- lduw [%o1], %g2 /* Load Group */ +- add %o1, 4, %o1 /* IEU0 */ +- stw %g2, [%o0] /* Store Group */ +- add %o0, 4, %o0 /* IEU0 */ +-1: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 1, %g0 /* IEU1 Group */ +- lduh [%o1], %g2 /* Load Group */ +- add %o1, 2, %o1 /* IEU0 */ +- sth %g2, [%o0] /* Store Group */ +- add %o0, 2, %o0 /* IEU0 */ +-1: be,pt %xcc, 211f /* CTI */ +- nop /* IEU1 */ +- ldub [%o1], %g2 /* Load Group */ +- stb %g2, [%o0] /* Store Group + bubble */ +-211: retl +- mov %g4, %o0 +- +-82: MOVE_BIGALIGNCHUNK(o1, o0, 0x00, g1, g3, g5, o5) +- MOVE_BIGALIGNCHUNK(o1, o0, 0x40, g1, g3, g5, o5) +-37: subcc %g6, 128, %g6 /* IEU1 Group */ +- add %o1, 128, %o1 /* IEU0 */ +- bne,pt %xcc, 82b /* CTI */ +- add %o0, 128, %o0 /* IEU0 Group */ +- andcc %o2, 0x70, %g6 /* IEU1 */ +- be,pn %xcc, 84f /* CTI */ +- andcc %o2, 8, %g0 /* IEU1 Group */ +- /* Clk1 8-( */ +- /* Clk2 8-( */ +- /* Clk3 8-( */ +- /* Clk4 8-( */ +-83: rd %pc, %o5 /* PDU Group */ +- add %o1, %g6, %o1 /* IEU0 Group */ +- sub %o5, %g6, %o5 /* IEU1 */ +- jmpl %o5 + %lo(84f - 83b), %g0 /* CTI Group brk forced*/ +- add %o0, %g6, %o0 /* IEU0 Group */ +-38: MOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3) +- MOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3) +- MOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3) +- MOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3) +- MOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3) +- MOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3) +- MOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3) +-84: be,pt %xcc, 85f /* CTI Group */ +- andcc %o2, 4, %g0 /* IEU1 */ +- ldx [%o1], %g2 /* Load Group */ +- add %o0, 8, %o0 /* IEU0 */ +- add %o1, 8, %o1 /* IEU0 Group */ +- stx %g2, [%o0 - 0x8] /* Store */ +-85: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 2, %g0 /* IEU1 Group */ +- lduw [%o1], %g2 /* Load Group */ +- add %o0, 4, %o0 /* IEU0 */ +- add %o1, 4, %o1 /* IEU0 Group */ +- stw %g2, [%o0 - 0x4] /* Store */ +-1: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 1, %g0 /* IEU1 Group */ +- lduh [%o1], %g2 /* Load Group */ +- add %o0, 2, %o0 /* IEU0 */ +- add %o1, 2, %o1 /* IEU0 Group */ +- sth %g2, [%o0 - 0x2] /* Store */ +-1: be,pt %xcc, 1f /* CTI */ +- nop /* IEU0 Group */ +- ldub [%o1], %g2 /* Load Group */ +- stb %g2, [%o0] /* Store Group + bubble */ +-1: retl +- mov %g4, %o0 +- +-212: brz,pt %g2, 2f /* CTI Group */ +- mov 8, %g1 /* IEU0 */ +- sub %g1, %g2, %g2 /* IEU0 Group */ +- sub %o2, %g2, %o2 /* IEU0 Group */ +-1: ldub [%o1], %g5 /* Load Group */ +- add %o1, 1, %o1 /* IEU0 */ +- add %o0, 1, %o0 /* IEU1 */ +- subcc %g2, 1, %g2 /* IEU1 Group */ +- bne,pt %xcc, 1b /* CTI */ +- stb %g5, [%o0 - 1] /* Store */ +-2: andn %o2, 7, %g5 /* IEU0 Group */ +- and %o2, 7, %o2 /* IEU1 */ +- fmovd %f0, %f2 /* FPU */ +- alignaddr %o1, %g0, %g1 /* GRU Group */ +- ldd [%g1], %f4 /* Load Group */ +-1: ldd [%g1 + 0x8], %f6 /* Load Group */ +- add %g1, 0x8, %g1 /* IEU0 Group */ +- subcc %g5, 8, %g5 /* IEU1 */ +- faligndata %f4, %f6, %f0 /* GRU Group */ +- std %f0, [%o0] /* Store */ +- add %o1, 8, %o1 /* IEU0 Group */ +- be,pn %xcc, 213f /* CTI */ +- add %o0, 8, %o0 /* IEU1 */ +- ldd [%g1 + 0x8], %f4 /* Load Group */ +- add %g1, 8, %g1 /* IEU0 */ +- subcc %g5, 8, %g5 /* IEU1 */ +- faligndata %f6, %f4, %f0 /* GRU Group */ +- std %f0, [%o0] /* Store */ +- add %o1, 8, %o1 /* IEU0 */ +- bne,pn %xcc, 1b /* CTI Group */ +- add %o0, 8, %o0 /* IEU0 */ +-213: brz,pn %o2, 214f /* CTI Group */ +- nop /* IEU0 */ +- ldub [%o1], %g5 /* LOAD */ +- add %o1, 1, %o1 /* IEU0 */ +- add %o0, 1, %o0 /* IEU1 */ +- subcc %o2, 1, %o2 /* IEU1 */ +- bne,pt %xcc, 206b /* CTI */ +- stb %g5, [%o0 - 1] /* Store Group */ +-214: wr %g0, FPRS_FEF, %fprs +- retl +- mov %g4, %o0 +-END(memcpy) +-libc_hidden_def(memcpy) +- +- .align 32 +-228: andcc %o2, 1, %g0 /* IEU1 Group */ +- be,pt %icc, 2f+4 /* CTI */ +-1: ldub [%o1 - 1], %o5 /* LOAD Group */ +- sub %o1, 1, %o1 /* IEU0 */ +- sub %o0, 1, %o0 /* IEU1 */ +- subcc %o2, 1, %o2 /* IEU1 Group */ +- be,pn %xcc, 229f /* CTI */ +- stb %o5, [%o0] /* Store */ +-2: ldub [%o1 - 1], %o5 /* LOAD Group */ +- sub %o0, 2, %o0 /* IEU0 */ +- ldub [%o1 - 2], %g5 /* LOAD Group */ +- sub %o1, 2, %o1 /* IEU0 */ +- subcc %o2, 2, %o2 /* IEU1 Group */ +- stb %o5, [%o0 + 1] /* Store */ +- bne,pt %xcc, 2b /* CTI */ +- stb %g5, [%o0] /* Store */ +-229: retl +- mov %g4, %o0 +-219: retl +- nop +- +- .align 32 +-ENTRY(memmove) +-#ifndef USE_BPR +- srl %o2, 0, %o2 /* IEU1 Group */ +-#endif +- brz,pn %o2, 219b /* CTI Group */ +- sub %o0, %o1, %o4 /* IEU0 */ +- cmp %o4, %o2 /* IEU1 Group */ +- bgeu,pt %XCC, 218b /* CTI */ +- mov %o0, %g4 /* IEU0 */ +- add %o0, %o2, %o0 /* IEU0 Group */ +-220: add %o1, %o2, %o1 /* IEU1 */ +- cmp %o2, 15 /* IEU1 Group */ +- bleu,pn %xcc, 228b /* CTI */ +- andcc %o0, 7, %g2 /* IEU1 Group */ +- sub %o0, %o1, %g5 /* IEU0 */ +- andcc %g5, 3, %o5 /* IEU1 Group */ +- bne,pn %xcc, 232f /* CTI */ +- andcc %o1, 3, %g0 /* IEU1 Group */ +- be,a,pt %xcc, 236f /* CTI */ +- andcc %o1, 4, %g0 /* IEU1 Group */ +- andcc %o1, 1, %g0 /* IEU1 Group */ +- be,pn %xcc, 4f /* CTI */ +- andcc %o1, 2, %g0 /* IEU1 Group */ +- ldub [%o1 - 1], %g2 /* Load Group */ +- sub %o1, 1, %o1 /* IEU0 */ +- sub %o0, 1, %o0 /* IEU1 */ +- sub %o2, 1, %o2 /* IEU0 Group */ +- be,pn %xcc, 5f /* CTI Group */ +- stb %g2, [%o0] /* Store */ +-4: lduh [%o1 - 2], %g2 /* Load Group */ +- sub %o1, 2, %o1 /* IEU0 */ +- sub %o0, 2, %o0 /* IEU1 */ +- sub %o2, 2, %o2 /* IEU0 */ +- sth %g2, [%o0] /* Store Group + bubble */ +-5: andcc %o1, 4, %g0 /* IEU1 */ +-236: be,a,pn %xcc, 2f /* CTI */ +- andcc %o2, -128, %g6 /* IEU1 Group */ +- lduw [%o1 - 4], %g5 /* Load Group */ +- sub %o1, 4, %o1 /* IEU0 */ +- sub %o0, 4, %o0 /* IEU1 */ +- sub %o2, 4, %o2 /* IEU0 Group */ +- stw %g5, [%o0] /* Store */ +- andcc %o2, -128, %g6 /* IEU1 Group */ +-2: be,pn %xcc, 235f /* CTI */ +- andcc %o0, 4, %g0 /* IEU1 Group */ +- be,pn %xcc, 282f + 4 /* CTI Group */ +-5: RMOVE_BIGCHUNK(o1, o0, 0x00, g1, g3, g5, o5) +- RMOVE_BIGCHUNK(o1, o0, 0x20, g1, g3, g5, o5) +- RMOVE_BIGCHUNK(o1, o0, 0x40, g1, g3, g5, o5) +- RMOVE_BIGCHUNK(o1, o0, 0x60, g1, g3, g5, o5) +- subcc %g6, 128, %g6 /* IEU1 Group */ +- sub %o1, 128, %o1 /* IEU0 */ +- bne,pt %xcc, 5b /* CTI */ +- sub %o0, 128, %o0 /* IEU0 Group */ +-235: andcc %o2, 0x70, %g6 /* IEU1 Group */ +-41: be,pn %xcc, 280f /* CTI */ +- andcc %o2, 8, %g0 /* IEU1 Group */ +- /* Clk1 8-( */ +- /* Clk2 8-( */ +- /* Clk3 8-( */ +- /* Clk4 8-( */ +-279: rd %pc, %o5 /* PDU Group */ +- sll %g6, 1, %g5 /* IEU0 Group */ +- sub %o1, %g6, %o1 /* IEU1 */ +- sub %o5, %g5, %o5 /* IEU0 Group */ +- jmpl %o5 + %lo(280f - 279b), %g0 /* CTI Group brk forced*/ +- sub %o0, %g6, %o0 /* IEU0 Group */ +- RMOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g5, o5) +-280: be,pt %xcc, 281f /* CTI */ +- andcc %o2, 4, %g0 /* IEU1 */ +- ldx [%o1 - 8], %g2 /* Load Group */ +- sub %o0, 8, %o0 /* IEU0 */ +- stw %g2, [%o0 + 4] /* Store Group */ +- sub %o1, 8, %o1 /* IEU1 */ +- srlx %g2, 32, %g2 /* IEU0 Group */ +- stw %g2, [%o0] /* Store */ +-281: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 2, %g0 /* IEU1 Group */ +- lduw [%o1 - 4], %g2 /* Load Group */ +- sub %o1, 4, %o1 /* IEU0 */ +- stw %g2, [%o0 - 4] /* Store Group */ +- sub %o0, 4, %o0 /* IEU0 */ +-1: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 1, %g0 /* IEU1 Group */ +- lduh [%o1 - 2], %g2 /* Load Group */ +- sub %o1, 2, %o1 /* IEU0 */ +- sth %g2, [%o0 - 2] /* Store Group */ +- sub %o0, 2, %o0 /* IEU0 */ +-1: be,pt %xcc, 211f /* CTI */ +- nop /* IEU1 */ +- ldub [%o1 - 1], %g2 /* Load Group */ +- stb %g2, [%o0 - 1] /* Store Group + bubble */ +-211: retl +- mov %g4, %o0 +- +-282: RMOVE_BIGALIGNCHUNK(o1, o0, 0x00, g1, g3, g5, o5) +- RMOVE_BIGALIGNCHUNK(o1, o0, 0x40, g1, g3, g5, o5) +- subcc %g6, 128, %g6 /* IEU1 Group */ +- sub %o1, 128, %o1 /* IEU0 */ +- bne,pt %xcc, 282b /* CTI */ +- sub %o0, 128, %o0 /* IEU0 Group */ +- andcc %o2, 0x70, %g6 /* IEU1 */ +- be,pn %xcc, 284f /* CTI */ +- andcc %o2, 8, %g0 /* IEU1 Group */ +- /* Clk1 8-( */ +- /* Clk2 8-( */ +- /* Clk3 8-( */ +- /* Clk4 8-( */ +-283: rd %pc, %o5 /* PDU Group */ +- sub %o1, %g6, %o1 /* IEU0 Group */ +- sub %o5, %g6, %o5 /* IEU1 */ +- jmpl %o5 + %lo(284f - 283b), %g0 /* CTI Group brk forced*/ +- sub %o0, %g6, %o0 /* IEU0 Group */ +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3) +-284: be,pt %xcc, 285f /* CTI Group */ +- andcc %o2, 4, %g0 /* IEU1 */ +- ldx [%o1 - 8], %g2 /* Load Group */ +- sub %o0, 8, %o0 /* IEU0 */ +- sub %o1, 8, %o1 /* IEU0 Group */ +- stx %g2, [%o0] /* Store */ +-285: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 2, %g0 /* IEU1 Group */ +- lduw [%o1 - 4], %g2 /* Load Group */ +- sub %o0, 4, %o0 /* IEU0 */ +- sub %o1, 4, %o1 /* IEU0 Group */ +- stw %g2, [%o0] /* Store */ +-1: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 1, %g0 /* IEU1 Group */ +- lduh [%o1 - 2], %g2 /* Load Group */ +- sub %o0, 2, %o0 /* IEU0 */ +- sub %o1, 2, %o1 /* IEU0 Group */ +- sth %g2, [%o0] /* Store */ +-1: be,pt %xcc, 1f /* CTI */ +- nop /* IEU0 Group */ +- ldub [%o1 - 1], %g2 /* Load Group */ +- stb %g2, [%o0 - 1] /* Store Group + bubble */ +-1: retl +- mov %g4, %o0 +- +-232: brz,pt %g2, 2f /* CTI Group */ +- sub %o2, %g2, %o2 /* IEU0 Group */ +-1: ldub [%o1 - 1], %g5 /* Load Group */ +- sub %o1, 1, %o1 /* IEU0 */ +- sub %o0, 1, %o0 /* IEU1 */ +- subcc %g2, 1, %g2 /* IEU1 Group */ +- bne,pt %xcc, 1b /* CTI */ +- stb %g5, [%o0] /* Store */ +-2: andn %o2, 7, %g5 /* IEU0 Group */ +- and %o2, 7, %o2 /* IEU1 */ +- fmovd %f0, %f2 /* FPU */ +- alignaddr %o1, %g0, %g1 /* GRU Group */ +- ldd [%g1], %f4 /* Load Group */ +-1: ldd [%g1 - 8], %f6 /* Load Group */ +- sub %g1, 8, %g1 /* IEU0 Group */ +- subcc %g5, 8, %g5 /* IEU1 */ +- faligndata %f6, %f4, %f0 /* GRU Group */ +- std %f0, [%o0 - 8] /* Store */ +- sub %o1, 8, %o1 /* IEU0 Group */ +- be,pn %xcc, 233f /* CTI */ +- sub %o0, 8, %o0 /* IEU1 */ +- ldd [%g1 - 8], %f4 /* Load Group */ +- sub %g1, 8, %g1 /* IEU0 */ +- subcc %g5, 8, %g5 /* IEU1 */ +- faligndata %f4, %f6, %f0 /* GRU Group */ +- std %f0, [%o0 - 8] /* Store */ +- sub %o1, 8, %o1 /* IEU0 */ +- bne,pn %xcc, 1b /* CTI Group */ +- sub %o0, 8, %o0 /* IEU0 */ +-233: brz,pn %o2, 234f /* CTI Group */ +- nop /* IEU0 */ +-237: ldub [%o1 - 1], %g5 /* LOAD */ +- sub %o1, 1, %o1 /* IEU0 */ +- sub %o0, 1, %o0 /* IEU1 */ +- subcc %o2, 1, %o2 /* IEU1 */ +- bne,pt %xcc, 237b /* CTI */ +- stb %g5, [%o0] /* Store Group */ +-234: wr %g0, FPRS_FEF, %fprs +- retl +- mov %g4, %o0 +-END(memmove) +-libc_hidden_def(memmove) +- +-#ifdef USE_BPR +-weak_alias(memcpy,__align_cpy_1) +-weak_alias(memcpy,__align_cpy_2) +-#endif +diff --git a/libc/string/sparc/sparc64/memset.S b/libc/string/sparc/sparc64/memset.S +deleted file mode 100644 +index f76a637..0000000 +--- a/libc/string/sparc/sparc64/memset.S ++++ /dev/null +@@ -1,316 +0,0 @@ +-/* Set a block of memory to some byte value. +- For UltraSPARC. +- Copyright (C) 1996, 97, 98, 99, 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by David S. Miller (davem@caip.rutgers.edu) and +- Jakub Jelinek (jj@ultra.linux.cz). +- +- 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 <features.h> +-#include <asm/asi.h> +-#ifndef XCC +-#define XCC xcc +-#define USE_BPR +-#endif +-#define FPRS_FEF 4 +- +-#define SET_BLOCKS(base, offset, source) \ +- stx source, [base - offset - 0x18]; \ +- stx source, [base - offset - 0x10]; \ +- stx source, [base - offset - 0x08]; \ +- stx source, [base - offset - 0x00]; +- +- /* Well, memset is a lot easier to get right than bcopy... */ +- .text +- .align 32 +-ENTRY(memset) +- andcc %o1, 0xff, %o1 +- mov %o0, %o5 +- be,a,pt %icc, 50f +-#ifndef USE_BPR +- srl %o2, 0, %o1 +-#else +- mov %o2, %o1 +-#endif +- cmp %o2, 7 +-#ifndef USE_BPR +- srl %o2, 0, %o2 +-#endif +- bleu,pn %XCC, 17f +- andcc %o0, 3, %g5 +- be,pt %xcc, 4f +- and %o1, 0xff, %o1 +- cmp %g5, 3 +- be,pn %xcc, 2f +- stb %o1, [%o0 + 0x00] +- cmp %g5, 2 +- be,pt %xcc, 2f +- stb %o1, [%o0 + 0x01] +- stb %o1, [%o0 + 0x02] +-2: sub %g5, 4, %g5 +- sub %o0, %g5, %o0 +- add %o2, %g5, %o2 +-4: sllx %o1, 8, %g1 +- andcc %o0, 4, %g0 +- or %o1, %g1, %o1 +- sllx %o1, 16, %g1 +- or %o1, %g1, %o1 +- be,pt %xcc, 2f +- sllx %o1, 32, %g1 +- stw %o1, [%o0] +- sub %o2, 4, %o2 +- add %o0, 4, %o0 +-2: cmp %o2, 128 +- or %o1, %g1, %o1 +- blu,pn %xcc, 9f +- andcc %o0, 0x38, %g5 +- be,pn %icc, 6f +- mov 64, %o4 +- andcc %o0, 8, %g0 +- be,pn %icc, 1f +- sub %o4, %g5, %o4 +- stx %o1, [%o0] +- add %o0, 8, %o0 +-1: andcc %o4, 16, %g0 +- be,pn %icc, 1f +- sub %o2, %o4, %o2 +- stx %o1, [%o0] +- stx %o1, [%o0 + 8] +- add %o0, 16, %o0 +-1: andcc %o4, 32, %g0 +- be,pn %icc, 7f +- andncc %o2, 0x3f, %o3 +- stw %o1, [%o0] +- stw %o1, [%o0 + 4] +- stw %o1, [%o0 + 8] +- stw %o1, [%o0 + 12] +- stw %o1, [%o0 + 16] +- stw %o1, [%o0 + 20] +- stw %o1, [%o0 + 24] +- stw %o1, [%o0 + 28] +- add %o0, 32, %o0 +-7: be,pn %xcc, 9f +- nop +- ldd [%o0 - 8], %f0 +-18: wr %g0, ASI_BLK_P, %asi +- membar #StoreStore | #LoadStore +- andcc %o3, 0xc0, %g5 +- and %o2, 0x3f, %o2 +- fmovd %f0, %f2 +- fmovd %f0, %f4 +- andn %o3, 0xff, %o3 +- fmovd %f0, %f6 +- cmp %g5, 64 +- fmovd %f0, %f8 +- fmovd %f0, %f10 +- fmovd %f0, %f12 +- brz,pn %g5, 10f +- fmovd %f0, %f14 +- be,pn %icc, 2f +- stda %f0, [%o0 + 0x00] %asi +- cmp %g5, 128 +- be,pn %icc, 2f +- stda %f0, [%o0 + 0x40] %asi +- stda %f0, [%o0 + 0x80] %asi +-2: brz,pn %o3, 12f +- add %o0, %g5, %o0 +-10: stda %f0, [%o0 + 0x00] %asi +- stda %f0, [%o0 + 0x40] %asi +- stda %f0, [%o0 + 0x80] %asi +- stda %f0, [%o0 + 0xc0] %asi +-11: subcc %o3, 256, %o3 +- bne,pt %xcc, 10b +- add %o0, 256, %o0 +-12: wr %g0, FPRS_FEF, %fprs +- membar #StoreLoad | #StoreStore +-9: andcc %o2, 0x78, %g5 +- be,pn %xcc, 13f +- andcc %o2, 7, %o2 +-14: rd %pc, %o4 +- srl %g5, 1, %o3 +- sub %o4, %o3, %o4 +- jmpl %o4 + (13f - 14b), %g0 +- add %o0, %g5, %o0 +-12: SET_BLOCKS (%o0, 0x68, %o1) +- SET_BLOCKS (%o0, 0x48, %o1) +- SET_BLOCKS (%o0, 0x28, %o1) +- SET_BLOCKS (%o0, 0x08, %o1) +-13: be,pn %xcc, 8f +- andcc %o2, 4, %g0 +- be,pn %xcc, 1f +- andcc %o2, 2, %g0 +- stw %o1, [%o0] +- add %o0, 4, %o0 +-1: be,pn %xcc, 1f +- andcc %o2, 1, %g0 +- sth %o1, [%o0] +- add %o0, 2, %o0 +-1: bne,a,pn %xcc, 8f +- stb %o1, [%o0] +-8: retl +- mov %o5, %o0 +-17: brz,pn %o2, 0f +-8: add %o0, 1, %o0 +- subcc %o2, 1, %o2 +- bne,pt %xcc, 8b +- stb %o1, [%o0 - 1] +-0: retl +- mov %o5, %o0 +- +-6: stx %o1, [%o0] +- andncc %o2, 0x3f, %o3 +- be,pn %xcc, 9b +- nop +- ba,pt %xcc, 18b +- ldd [%o0], %f0 +-END(memset) +-libc_hidden_def(memset) +- +-#define ZERO_BLOCKS(base, offset, source) \ +- stx source, [base - offset - 0x38]; \ +- stx source, [base - offset - 0x30]; \ +- stx source, [base - offset - 0x28]; \ +- stx source, [base - offset - 0x20]; \ +- stx source, [base - offset - 0x18]; \ +- stx source, [base - offset - 0x10]; \ +- stx source, [base - offset - 0x08]; \ +- stx source, [base - offset - 0x00]; +- +- .text +- .align 32 +-#ifdef __UCLIBC_SUSV3_LEGACY__ +-ENTRY(bzero) +-#ifndef USE_BPR +- srl %o1, 0, %o1 +-#endif +- mov %o0, %o5 +-#endif +-50: cmp %o1, 7 +- bleu,pn %xcc, 17f +- andcc %o0, 3, %o2 +- be,a,pt %xcc, 4f +- andcc %o0, 4, %g0 +- cmp %o2, 3 +- be,pn %xcc, 2f +- stb %g0, [%o0 + 0x00] +- cmp %o2, 2 +- be,pt %xcc, 2f +- stb %g0, [%o0 + 0x01] +- stb %g0, [%o0 + 0x02] +-2: sub %o2, 4, %o2 +- sub %o0, %o2, %o0 +- add %o1, %o2, %o1 +- andcc %o0, 4, %g0 +-4: be,pt %xcc, 2f +- cmp %o1, 128 +- stw %g0, [%o0] +- sub %o1, 4, %o1 +- add %o0, 4, %o0 +-2: blu,pn %xcc, 9f +- andcc %o0, 0x38, %o2 +- be,pn %icc, 6f +- mov 64, %o4 +- andcc %o0, 8, %g0 +- be,pn %icc, 1f +- sub %o4, %o2, %o4 +- stx %g0, [%o0] +- add %o0, 8, %o0 +-1: andcc %o4, 16, %g0 +- be,pn %icc, 1f +- sub %o1, %o4, %o1 +- stx %g0, [%o0] +- stx %g0, [%o0 + 8] +- add %o0, 16, %o0 +-1: andcc %o4, 32, %g0 +- be,pn %icc, 7f +- andncc %o1, 0x3f, %o3 +- stx %g0, [%o0] +- stx %g0, [%o0 + 8] +- stx %g0, [%o0 + 16] +- stx %g0, [%o0 + 24] +- add %o0, 32, %o0 +-6: andncc %o1, 0x3f, %o3 +-7: be,pn %xcc, 9f +- wr %g0, ASI_BLK_P, %asi +- membar #StoreLoad | #StoreStore | #LoadStore +- fzero %f0 +- andcc %o3, 0xc0, %o2 +- and %o1, 0x3f, %o1 +- fzero %f2 +- andn %o3, 0xff, %o3 +- faddd %f0, %f2, %f4 +- fmuld %f0, %f2, %f6 +- cmp %o2, 64 +- faddd %f0, %f2, %f8 +- fmuld %f0, %f2, %f10 +- faddd %f0, %f2, %f12 +- brz,pn %o2, 10f +- fmuld %f0, %f2, %f14 +- be,pn %icc, 2f +- stda %f0, [%o0 + 0x00] %asi +- cmp %o2, 128 +- be,pn %icc, 2f +- stda %f0, [%o0 + 0x40] %asi +- stda %f0, [%o0 + 0x80] %asi +-2: brz,pn %o3, 12f +- add %o0, %o2, %o0 +-10: stda %f0, [%o0 + 0x00] %asi +- stda %f0, [%o0 + 0x40] %asi +- stda %f0, [%o0 + 0x80] %asi +- stda %f0, [%o0 + 0xc0] %asi +-11: subcc %o3, 256, %o3 +- bne,pt %xcc, 10b +- add %o0, 256, %o0 +-12: wr %g0, FPRS_FEF, %fprs +- membar #StoreLoad | #StoreStore +-9: andcc %o1, 0xf8, %o2 +- be,pn %xcc, 13f +- andcc %o1, 7, %o1 +-14: rd %pc, %o4 +- srl %o2, 1, %o3 +- sub %o4, %o3, %o4 +- jmpl %o4 + (13f - 14b), %g0 +- add %o0, %o2, %o0 +-12: ZERO_BLOCKS (%o0, 0xc8, %g0) +- ZERO_BLOCKS (%o0, 0x88, %g0) +- ZERO_BLOCKS (%o0, 0x48, %g0) +- ZERO_BLOCKS (%o0, 0x08, %g0) +-13: be,pn %xcc, 8f +- andcc %o1, 4, %g0 +- be,pn %xcc, 1f +- andcc %o1, 2, %g0 +- stw %g0, [%o0] +- add %o0, 4, %o0 +-1: be,pn %xcc, 1f +- andcc %o1, 1, %g0 +- sth %g0, [%o0] +- add %o0, 2, %o0 +-1: bne,a,pn %xcc, 8f +- stb %g0, [%o0] +-8: retl +- mov %o5, %o0 +-17: be,pn %xcc, 13b +- orcc %o1, 0, %g0 +- be,pn %xcc, 0f +-8: add %o0, 1, %o0 +- subcc %o1, 1, %o1 +- bne,pt %xcc, 8b +- stb %g0, [%o0 - 1] +-0: retl +- mov %o5, %o0 +-#ifdef __UCLIBC_SUSV3_LEGACY__ +-END(bzero) +-#endif +diff --git a/libc/string/sparc/sparc64/sparcv9b/memcpy.S b/libc/string/sparc/sparc64/sparcv9b/memcpy.S +deleted file mode 100644 +index 8bbdc84..0000000 +--- a/libc/string/sparc/sparc64/sparcv9b/memcpy.S ++++ /dev/null +@@ -1,611 +0,0 @@ +-/* Copy SIZE bytes from SRC to DEST. +- For UltraSPARC-III. +- Copyright (C) 2001, 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by David S. Miller (davem@redhat.com) +- +- The GNU C Library is free software; you can redistribute it and/or +- modify it under the terms of the GNU 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 <features.h> +- +-#define ASI_BLK_P 0xf0 +-#define FPRS_FEF 0x04 +-#define VISEntryHalf rd %fprs, %o5; wr %g0, FPRS_FEF, %fprs +-#define VISExitHalf and %o5, FPRS_FEF, %o5; wr %o5, 0x0, %fprs +- +-#ifndef XCC +-#define USE_BPR +-#define XCC xcc +-#endif +- +- .register %g2,#scratch +- .register %g3,#scratch +- .register %g6,#scratch +- +- .text +- .align 32 +- +-#ifdef __UCLIBC_SUSV3_LEGACY__ +-ENTRY(bcopy) +- sub %o1, %o0, %o4 +- mov %o0, %g4 +- cmp %o4, %o2 +- mov %o1, %o0 +- bgeu,pt %XCC, 100f +- mov %g4, %o1 +-#ifndef USE_BPR +- srl %o2, 0, %o2 +-#endif +- brnz,pn %o2, 220f +- add %o0, %o2, %o0 +- retl +- nop +-END(bcopy) +-#endif +- +- /* Special/non-trivial issues of this code: +- * +- * 1) %o5 is preserved from VISEntryHalf to VISExitHalf +- * 2) Only low 32 FPU registers are used so that only the +- * lower half of the FPU register set is dirtied by this +- * code. This is especially important in the kernel. +- * 3) This code never prefetches cachelines past the end +- * of the source buffer. +- * +- * The cheetah's flexible spine, oversized liver, enlarged heart, +- * slender muscular body, and claws make it the swiftest hunter +- * in Africa and the fastest animal on land. Can reach speeds +- * of up to 2.4GB per second. +- */ +- .align 32 +-ENTRY(memcpy) +- +-100: /* %o0=dst, %o1=src, %o2=len */ +- mov %o0, %g5 +- cmp %o2, 0 +- be,pn %XCC, out +-218: or %o0, %o1, %o3 +- cmp %o2, 16 +- bleu,a,pn %XCC, small_copy +- or %o3, %o2, %o3 +- +- cmp %o2, 256 +- blu,pt %XCC, medium_copy +- andcc %o3, 0x7, %g0 +- +- ba,pt %xcc, enter +- andcc %o0, 0x3f, %g2 +- +- /* Here len >= 256 and condition codes reflect execution +- * of "andcc %o0, 0x7, %g2", done by caller. +- */ +- .align 64 +-enter: +- /* Is 'dst' already aligned on an 64-byte boundary? */ +- be,pt %XCC, 2f +- +- /* Compute abs((dst & 0x3f) - 0x40) into %g2. This is the number +- * of bytes to copy to make 'dst' 64-byte aligned. We pre- +- * subtract this from 'len'. +- */ +- sub %g2, 0x40, %g2 +- sub %g0, %g2, %g2 +- sub %o2, %g2, %o2 +- +- /* Copy %g2 bytes from src to dst, one byte at a time. */ +-1: ldub [%o1 + 0x00], %o3 +- add %o1, 0x1, %o1 +- add %o0, 0x1, %o0 +- subcc %g2, 0x1, %g2 +- +- bg,pt %XCC, 1b +- stb %o3, [%o0 + -1] +- +-2: VISEntryHalf +- and %o1, 0x7, %g1 +- ba,pt %xcc, begin +- alignaddr %o1, %g0, %o1 +- +- .align 64 +-begin: +- prefetch [%o1 + 0x000], #one_read +- prefetch [%o1 + 0x040], #one_read +- andn %o2, (0x40 - 1), %o4 +- prefetch [%o1 + 0x080], #one_read +- prefetch [%o1 + 0x0c0], #one_read +- ldd [%o1 + 0x000], %f0 +- prefetch [%o1 + 0x100], #one_read +- ldd [%o1 + 0x008], %f2 +- prefetch [%o1 + 0x140], #one_read +- ldd [%o1 + 0x010], %f4 +- prefetch [%o1 + 0x180], #one_read +- faligndata %f0, %f2, %f16 +- ldd [%o1 + 0x018], %f6 +- faligndata %f2, %f4, %f18 +- ldd [%o1 + 0x020], %f8 +- faligndata %f4, %f6, %f20 +- ldd [%o1 + 0x028], %f10 +- faligndata %f6, %f8, %f22 +- +- ldd [%o1 + 0x030], %f12 +- faligndata %f8, %f10, %f24 +- ldd [%o1 + 0x038], %f14 +- faligndata %f10, %f12, %f26 +- ldd [%o1 + 0x040], %f0 +- +- sub %o4, 0x80, %o4 +- add %o1, 0x40, %o1 +- ba,pt %xcc, loop +- srl %o4, 6, %o3 +- +- .align 64 +-loop: +- ldd [%o1 + 0x008], %f2 +- faligndata %f12, %f14, %f28 +- ldd [%o1 + 0x010], %f4 +- faligndata %f14, %f0, %f30 +- stda %f16, [%o0] ASI_BLK_P +- ldd [%o1 + 0x018], %f6 +- faligndata %f0, %f2, %f16 +- +- ldd [%o1 + 0x020], %f8 +- faligndata %f2, %f4, %f18 +- ldd [%o1 + 0x028], %f10 +- faligndata %f4, %f6, %f20 +- ldd [%o1 + 0x030], %f12 +- faligndata %f6, %f8, %f22 +- ldd [%o1 + 0x038], %f14 +- faligndata %f8, %f10, %f24 +- +- ldd [%o1 + 0x040], %f0 +- prefetch [%o1 + 0x180], #one_read +- faligndata %f10, %f12, %f26 +- subcc %o3, 0x01, %o3 +- add %o1, 0x40, %o1 +- bg,pt %XCC, loop +- add %o0, 0x40, %o0 +- +- /* Finally we copy the last full 64-byte block. */ +-loopfini: +- ldd [%o1 + 0x008], %f2 +- faligndata %f12, %f14, %f28 +- ldd [%o1 + 0x010], %f4 +- faligndata %f14, %f0, %f30 +- stda %f16, [%o0] ASI_BLK_P +- ldd [%o1 + 0x018], %f6 +- faligndata %f0, %f2, %f16 +- ldd [%o1 + 0x020], %f8 +- faligndata %f2, %f4, %f18 +- ldd [%o1 + 0x028], %f10 +- faligndata %f4, %f6, %f20 +- ldd [%o1 + 0x030], %f12 +- faligndata %f6, %f8, %f22 +- ldd [%o1 + 0x038], %f14 +- faligndata %f8, %f10, %f24 +- cmp %g1, 0 +- be,pt %XCC, 1f +- add %o0, 0x40, %o0 +- ldd [%o1 + 0x040], %f0 +-1: faligndata %f10, %f12, %f26 +- faligndata %f12, %f14, %f28 +- faligndata %f14, %f0, %f30 +- stda %f16, [%o0] ASI_BLK_P +- add %o0, 0x40, %o0 +- add %o1, 0x40, %o1 +- membar #Sync +- +- /* Now we copy the (len modulo 64) bytes at the end. +- * Note how we borrow the %f0 loaded above. +- * +- * Also notice how this code is careful not to perform a +- * load past the end of the src buffer. +- */ +-loopend: +- and %o2, 0x3f, %o2 +- andcc %o2, 0x38, %g2 +- be,pn %XCC, endcruft +- subcc %g2, 0x8, %g2 +- be,pn %XCC, endcruft +- cmp %g1, 0 +- +- be,a,pt %XCC, 1f +- ldd [%o1 + 0x00], %f0 +- +-1: ldd [%o1 + 0x08], %f2 +- add %o1, 0x8, %o1 +- sub %o2, 0x8, %o2 +- subcc %g2, 0x8, %g2 +- faligndata %f0, %f2, %f8 +- std %f8, [%o0 + 0x00] +- be,pn %XCC, endcruft +- add %o0, 0x8, %o0 +- ldd [%o1 + 0x08], %f0 +- add %o1, 0x8, %o1 +- sub %o2, 0x8, %o2 +- subcc %g2, 0x8, %g2 +- faligndata %f2, %f0, %f8 +- std %f8, [%o0 + 0x00] +- bne,pn %XCC, 1b +- add %o0, 0x8, %o0 +- +- /* If anything is left, we copy it one byte at a time. +- * Note that %g1 is (src & 0x3) saved above before the +- * alignaddr was performed. +- */ +-endcruft: +- cmp %o2, 0 +- add %o1, %g1, %o1 +- VISExitHalf +- be,pn %XCC, out +- sub %o0, %o1, %o3 +- +- andcc %g1, 0x7, %g0 +- bne,pn %icc, small_copy_unaligned +- andcc %o2, 0x8, %g0 +- be,pt %icc, 1f +- nop +- ldx [%o1], %o5 +- stx %o5, [%o1 + %o3] +- add %o1, 0x8, %o1 +- +-1: andcc %o2, 0x4, %g0 +- be,pt %icc, 1f +- nop +- lduw [%o1], %o5 +- stw %o5, [%o1 + %o3] +- add %o1, 0x4, %o1 +- +-1: andcc %o2, 0x2, %g0 +- be,pt %icc, 1f +- nop +- lduh [%o1], %o5 +- sth %o5, [%o1 + %o3] +- add %o1, 0x2, %o1 +- +-1: andcc %o2, 0x1, %g0 +- be,pt %icc, out +- nop +- ldub [%o1], %o5 +- ba,pt %xcc, out +- stb %o5, [%o1 + %o3] +- +-medium_copy: /* 16 < len <= 64 */ +- bne,pn %XCC, small_copy_unaligned +- sub %o0, %o1, %o3 +- +-medium_copy_aligned: +- andn %o2, 0x7, %o4 +- and %o2, 0x7, %o2 +-1: subcc %o4, 0x8, %o4 +- ldx [%o1], %o5 +- stx %o5, [%o1 + %o3] +- bgu,pt %XCC, 1b +- add %o1, 0x8, %o1 +- andcc %o2, 0x4, %g0 +- be,pt %XCC, 1f +- nop +- sub %o2, 0x4, %o2 +- lduw [%o1], %o5 +- stw %o5, [%o1 + %o3] +- add %o1, 0x4, %o1 +-1: cmp %o2, 0 +- be,pt %XCC, out +- nop +- ba,pt %xcc, small_copy_unaligned +- nop +- +-small_copy: /* 0 < len <= 16 */ +- andcc %o3, 0x3, %g0 +- bne,pn %XCC, small_copy_unaligned +- sub %o0, %o1, %o3 +- +-small_copy_aligned: +- subcc %o2, 4, %o2 +- lduw [%o1], %g1 +- stw %g1, [%o1 + %o3] +- bgu,pt %XCC, small_copy_aligned +- add %o1, 4, %o1 +- +-out: retl +- mov %g5, %o0 +- +- .align 32 +-small_copy_unaligned: +- subcc %o2, 1, %o2 +- ldub [%o1], %g1 +- stb %g1, [%o1 + %o3] +- bgu,pt %XCC, small_copy_unaligned +- add %o1, 1, %o1 +- retl +- mov %g5, %o0 +- +-END(memcpy) +-libc_hidden_def(memcpy) +- +-#define RMOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3) \ +- ldx [%src - offset - 0x20], %t0; \ +- ldx [%src - offset - 0x18], %t1; \ +- ldx [%src - offset - 0x10], %t2; \ +- ldx [%src - offset - 0x08], %t3; \ +- stw %t0, [%dst - offset - 0x1c]; \ +- srlx %t0, 32, %t0; \ +- stw %t0, [%dst - offset - 0x20]; \ +- stw %t1, [%dst - offset - 0x14]; \ +- srlx %t1, 32, %t1; \ +- stw %t1, [%dst - offset - 0x18]; \ +- stw %t2, [%dst - offset - 0x0c]; \ +- srlx %t2, 32, %t2; \ +- stw %t2, [%dst - offset - 0x10]; \ +- stw %t3, [%dst - offset - 0x04]; \ +- srlx %t3, 32, %t3; \ +- stw %t3, [%dst - offset - 0x08]; +- +-#define RMOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3) \ +- ldx [%src - offset - 0x20], %t0; \ +- ldx [%src - offset - 0x18], %t1; \ +- ldx [%src - offset - 0x10], %t2; \ +- ldx [%src - offset - 0x08], %t3; \ +- stx %t0, [%dst - offset - 0x20]; \ +- stx %t1, [%dst - offset - 0x18]; \ +- stx %t2, [%dst - offset - 0x10]; \ +- stx %t3, [%dst - offset - 0x08]; \ +- ldx [%src - offset - 0x40], %t0; \ +- ldx [%src - offset - 0x38], %t1; \ +- ldx [%src - offset - 0x30], %t2; \ +- ldx [%src - offset - 0x28], %t3; \ +- stx %t0, [%dst - offset - 0x40]; \ +- stx %t1, [%dst - offset - 0x38]; \ +- stx %t2, [%dst - offset - 0x30]; \ +- stx %t3, [%dst - offset - 0x28]; +- +-#define RMOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3) \ +- ldx [%src + offset + 0x00], %t0; \ +- ldx [%src + offset + 0x08], %t1; \ +- stw %t0, [%dst + offset + 0x04]; \ +- srlx %t0, 32, %t2; \ +- stw %t2, [%dst + offset + 0x00]; \ +- stw %t1, [%dst + offset + 0x0c]; \ +- srlx %t1, 32, %t3; \ +- stw %t3, [%dst + offset + 0x08]; +- +-#define RMOVE_LASTALIGNCHUNK(src, dst, offset, t0, t1) \ +- ldx [%src + offset + 0x00], %t0; \ +- ldx [%src + offset + 0x08], %t1; \ +- stx %t0, [%dst + offset + 0x00]; \ +- stx %t1, [%dst + offset + 0x08]; +- +- .align 32 +-228: andcc %o2, 1, %g0 /* IEU1 Group */ +- be,pt %icc, 2f+4 /* CTI */ +-1: ldub [%o1 - 1], %o5 /* LOAD Group */ +- sub %o1, 1, %o1 /* IEU0 */ +- sub %o0, 1, %o0 /* IEU1 */ +- subcc %o2, 1, %o2 /* IEU1 Group */ +- be,pn %xcc, 229f /* CTI */ +- stb %o5, [%o0] /* Store */ +-2: ldub [%o1 - 1], %o5 /* LOAD Group */ +- sub %o0, 2, %o0 /* IEU0 */ +- ldub [%o1 - 2], %g5 /* LOAD Group */ +- sub %o1, 2, %o1 /* IEU0 */ +- subcc %o2, 2, %o2 /* IEU1 Group */ +- stb %o5, [%o0 + 1] /* Store */ +- bne,pt %xcc, 2b /* CTI */ +- stb %g5, [%o0] /* Store */ +-229: retl +- mov %g4, %o0 +- +- .align 32 +-ENTRY(memmove) +- mov %o0, %g5 +-#ifndef USE_BPR +- srl %o2, 0, %o2 /* IEU1 Group */ +-#endif +- brz,pn %o2, out /* CTI Group */ +- sub %o0, %o1, %o4 /* IEU0 */ +- cmp %o4, %o2 /* IEU1 Group */ +- bgeu,pt %XCC, 218b /* CTI */ +- mov %o0, %g4 /* IEU0 */ +- add %o0, %o2, %o0 /* IEU0 Group */ +-220: add %o1, %o2, %o1 /* IEU1 */ +- cmp %o2, 15 /* IEU1 Group */ +- bleu,pn %xcc, 228b /* CTI */ +- andcc %o0, 7, %g2 /* IEU1 Group */ +- sub %o0, %o1, %g5 /* IEU0 */ +- andcc %g5, 3, %o5 /* IEU1 Group */ +- bne,pn %xcc, 232f /* CTI */ +- andcc %o1, 3, %g0 /* IEU1 Group */ +- be,a,pt %xcc, 236f /* CTI */ +- andcc %o1, 4, %g0 /* IEU1 Group */ +- andcc %o1, 1, %g0 /* IEU1 Group */ +- be,pn %xcc, 4f /* CTI */ +- andcc %o1, 2, %g0 /* IEU1 Group */ +- ldub [%o1 - 1], %g2 /* Load Group */ +- sub %o1, 1, %o1 /* IEU0 */ +- sub %o0, 1, %o0 /* IEU1 */ +- sub %o2, 1, %o2 /* IEU0 Group */ +- be,pn %xcc, 5f /* CTI Group */ +- stb %g2, [%o0] /* Store */ +-4: lduh [%o1 - 2], %g2 /* Load Group */ +- sub %o1, 2, %o1 /* IEU0 */ +- sub %o0, 2, %o0 /* IEU1 */ +- sub %o2, 2, %o2 /* IEU0 */ +- sth %g2, [%o0] /* Store Group + bubble */ +-5: andcc %o1, 4, %g0 /* IEU1 */ +-236: be,a,pn %xcc, 2f /* CTI */ +- andcc %o2, -128, %g6 /* IEU1 Group */ +- lduw [%o1 - 4], %g5 /* Load Group */ +- sub %o1, 4, %o1 /* IEU0 */ +- sub %o0, 4, %o0 /* IEU1 */ +- sub %o2, 4, %o2 /* IEU0 Group */ +- stw %g5, [%o0] /* Store */ +- andcc %o2, -128, %g6 /* IEU1 Group */ +-2: be,pn %xcc, 235f /* CTI */ +- andcc %o0, 4, %g0 /* IEU1 Group */ +- be,pn %xcc, 282f + 4 /* CTI Group */ +-5: RMOVE_BIGCHUNK(o1, o0, 0x00, g1, g3, g5, o5) +- RMOVE_BIGCHUNK(o1, o0, 0x20, g1, g3, g5, o5) +- RMOVE_BIGCHUNK(o1, o0, 0x40, g1, g3, g5, o5) +- RMOVE_BIGCHUNK(o1, o0, 0x60, g1, g3, g5, o5) +- subcc %g6, 128, %g6 /* IEU1 Group */ +- sub %o1, 128, %o1 /* IEU0 */ +- bne,pt %xcc, 5b /* CTI */ +- sub %o0, 128, %o0 /* IEU0 Group */ +-235: andcc %o2, 0x70, %g6 /* IEU1 Group */ +-41: be,pn %xcc, 280f /* CTI */ +- andcc %o2, 8, %g0 /* IEU1 Group */ +- /* Clk1 8-( */ +- /* Clk2 8-( */ +- /* Clk3 8-( */ +- /* Clk4 8-( */ +-279: rd %pc, %o5 /* PDU Group */ +- sll %g6, 1, %g5 /* IEU0 Group */ +- sub %o1, %g6, %o1 /* IEU1 */ +- sub %o5, %g5, %o5 /* IEU0 Group */ +- jmpl %o5 + %lo(280f - 279b), %g0 /* CTI Group brk forced*/ +- sub %o0, %g6, %o0 /* IEU0 Group */ +- RMOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g5, o5) +- RMOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g5, o5) +-280: be,pt %xcc, 281f /* CTI */ +- andcc %o2, 4, %g0 /* IEU1 */ +- ldx [%o1 - 8], %g2 /* Load Group */ +- sub %o0, 8, %o0 /* IEU0 */ +- stw %g2, [%o0 + 4] /* Store Group */ +- sub %o1, 8, %o1 /* IEU1 */ +- srlx %g2, 32, %g2 /* IEU0 Group */ +- stw %g2, [%o0] /* Store */ +-281: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 2, %g0 /* IEU1 Group */ +- lduw [%o1 - 4], %g2 /* Load Group */ +- sub %o1, 4, %o1 /* IEU0 */ +- stw %g2, [%o0 - 4] /* Store Group */ +- sub %o0, 4, %o0 /* IEU0 */ +-1: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 1, %g0 /* IEU1 Group */ +- lduh [%o1 - 2], %g2 /* Load Group */ +- sub %o1, 2, %o1 /* IEU0 */ +- sth %g2, [%o0 - 2] /* Store Group */ +- sub %o0, 2, %o0 /* IEU0 */ +-1: be,pt %xcc, 211f /* CTI */ +- nop /* IEU1 */ +- ldub [%o1 - 1], %g2 /* Load Group */ +- stb %g2, [%o0 - 1] /* Store Group + bubble */ +-211: retl +- mov %g4, %o0 +- +-282: RMOVE_BIGALIGNCHUNK(o1, o0, 0x00, g1, g3, g5, o5) +- RMOVE_BIGALIGNCHUNK(o1, o0, 0x40, g1, g3, g5, o5) +- subcc %g6, 128, %g6 /* IEU1 Group */ +- sub %o1, 128, %o1 /* IEU0 */ +- bne,pt %xcc, 282b /* CTI */ +- sub %o0, 128, %o0 /* IEU0 Group */ +- andcc %o2, 0x70, %g6 /* IEU1 */ +- be,pn %xcc, 284f /* CTI */ +- andcc %o2, 8, %g0 /* IEU1 Group */ +- /* Clk1 8-( */ +- /* Clk2 8-( */ +- /* Clk3 8-( */ +- /* Clk4 8-( */ +-283: rd %pc, %o5 /* PDU Group */ +- sub %o1, %g6, %o1 /* IEU0 Group */ +- sub %o5, %g6, %o5 /* IEU1 */ +- jmpl %o5 + %lo(284f - 283b), %g0 /* CTI Group brk forced*/ +- sub %o0, %g6, %o0 /* IEU0 Group */ +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3) +- RMOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3) +-284: be,pt %xcc, 285f /* CTI Group */ +- andcc %o2, 4, %g0 /* IEU1 */ +- ldx [%o1 - 8], %g2 /* Load Group */ +- sub %o0, 8, %o0 /* IEU0 */ +- sub %o1, 8, %o1 /* IEU0 Group */ +- stx %g2, [%o0] /* Store */ +-285: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 2, %g0 /* IEU1 Group */ +- lduw [%o1 - 4], %g2 /* Load Group */ +- sub %o0, 4, %o0 /* IEU0 */ +- sub %o1, 4, %o1 /* IEU0 Group */ +- stw %g2, [%o0] /* Store */ +-1: be,pt %xcc, 1f /* CTI */ +- andcc %o2, 1, %g0 /* IEU1 Group */ +- lduh [%o1 - 2], %g2 /* Load Group */ +- sub %o0, 2, %o0 /* IEU0 */ +- sub %o1, 2, %o1 /* IEU0 Group */ +- sth %g2, [%o0] /* Store */ +-1: be,pt %xcc, 1f /* CTI */ +- nop /* IEU0 Group */ +- ldub [%o1 - 1], %g2 /* Load Group */ +- stb %g2, [%o0 - 1] /* Store Group + bubble */ +-1: retl +- mov %g4, %o0 +- +-232: brz,pt %g2, 2f /* CTI Group */ +- sub %o2, %g2, %o2 /* IEU0 Group */ +-1: ldub [%o1 - 1], %g5 /* Load Group */ +- sub %o1, 1, %o1 /* IEU0 */ +- sub %o0, 1, %o0 /* IEU1 */ +- subcc %g2, 1, %g2 /* IEU1 Group */ +- bne,pt %xcc, 1b /* CTI */ +- stb %g5, [%o0] /* Store */ +-2: andn %o2, 7, %g5 /* IEU0 Group */ +- and %o2, 7, %o2 /* IEU1 */ +- fmovd %f0, %f2 /* FPU */ +- alignaddr %o1, %g0, %g1 /* GRU Group */ +- ldd [%g1], %f4 /* Load Group */ +-1: ldd [%g1 - 8], %f6 /* Load Group */ +- sub %g1, 8, %g1 /* IEU0 Group */ +- subcc %g5, 8, %g5 /* IEU1 */ +- faligndata %f6, %f4, %f0 /* GRU Group */ +- std %f0, [%o0 - 8] /* Store */ +- sub %o1, 8, %o1 /* IEU0 Group */ +- be,pn %xcc, 233f /* CTI */ +- sub %o0, 8, %o0 /* IEU1 */ +- ldd [%g1 - 8], %f4 /* Load Group */ +- sub %g1, 8, %g1 /* IEU0 */ +- subcc %g5, 8, %g5 /* IEU1 */ +- faligndata %f4, %f6, %f0 /* GRU Group */ +- std %f0, [%o0 - 8] /* Store */ +- sub %o1, 8, %o1 /* IEU0 */ +- bne,pn %xcc, 1b /* CTI Group */ +- sub %o0, 8, %o0 /* IEU0 */ +-233: brz,pn %o2, 234f /* CTI Group */ +- nop /* IEU0 */ +-237: ldub [%o1 - 1], %g5 /* LOAD */ +- sub %o1, 1, %o1 /* IEU0 */ +- sub %o0, 1, %o0 /* IEU1 */ +- subcc %o2, 1, %o2 /* IEU1 */ +- bne,pt %xcc, 237b /* CTI */ +- stb %g5, [%o0] /* Store Group */ +-234: wr %g0, FPRS_FEF, %fprs +- retl +- mov %g4, %o0 +-END(memmove) +-libc_hidden_def(memmove) +- +-#ifdef USE_BPR +-weak_alias(memcpy,__align_cpy_1) +-weak_alias(memcpy,__align_cpy_2) +-weak_alias(memcpy,__align_cpy_4) +-weak_alias(memcpy,__align_cpy_8) +-weak_alias(memcpy,__align_cpy_16) +-#endif +diff --git a/libc/string/sparc/sparc64/stpcpy.S b/libc/string/sparc/sparc64/stpcpy.S +deleted file mode 100644 +index 9af0d56..0000000 +--- a/libc/string/sparc/sparc64/stpcpy.S ++++ /dev/null +@@ -1,270 +0,0 @@ +-/* Copy SRC to DEST returning the address of the terminating '\0' in DEST. +- For SPARC v9. +- Copyright (C) 1998, 1999, 2002, 2003, 2004 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jan Vondrak <jvon4518@ss1000.ms.mff.cuni.cz> and +- Jakub Jelinek <jj@ultra.linux.cz>. +- +- 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 <asm/asi.h> +-#ifndef XCC +- .register %g2, #scratch +- .register %g3, #scratch +- .register %g6, #scratch +-#endif +- +- /* Normally, this uses +- ((xword - 0x0101010101010101) & 0x8080808080808080) test +- to find out if any byte in xword could be zero. This is fast, but +- also gives false alarm for any byte in range 0x81-0xff. It does +- not matter for correctness, as if this test tells us there could +- be some zero byte, we check it byte by byte, but if bytes with +- high bits set are common in the strings, then this will give poor +- performance. You can #define EIGHTBIT_NOT_RARE and the algorithm +- will use one tick slower, but more precise test +- ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), +- which does not give any false alarms (but if some bits are set, +- one cannot assume from it which bytes are zero and which are not). +- It is yet to be measured, what is the correct default for glibc +- in these days for an average user. +- */ +- +- .text +- .align 32 +-ENTRY(stpcpy) +- sethi %hi(0x01010101), %g1 /* IEU0 Group */ +- or %g1, %lo(0x01010101), %g1 /* IEU0 Group */ +- andcc %o0, 7, %g0 /* IEU1 */ +- sllx %g1, 32, %g2 /* IEU0 Group */ +- +- bne,pn %icc, 12f /* CTI */ +- andcc %o1, 7, %g3 /* IEU1 */ +- or %g1, %g2, %g1 /* IEU0 Group */ +- bne,pn %icc, 14f /* CTI */ +- +- sllx %g1, 7, %g2 /* IEU0 Group */ +-1: ldx [%o1], %o3 /* Load */ +- add %o1, 8, %o1 /* IEU1 */ +-2: mov %o3, %g3 /* IEU0 Group */ +- +- sub %o3, %g1, %o2 /* IEU1 */ +-3: ldxa [%o1] ASI_PNF, %o3 /* Load */ +-#ifdef EIGHTBIT_NOT_RARE +- andn %o2, %g3, %o2 /* IEU0 Group */ +-#endif +- add %o0, 8, %o0 /* IEU0 Group */ +- andcc %o2, %g2, %g0 /* IEU1 */ +- +- add %o1, 8, %o1 /* IEU0 Group */ +- be,a,pt %xcc, 2b /* CTI */ +- stx %g3, [%o0 - 8] /* Store */ +- srlx %g3, 56, %g5 /* IEU0 Group */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 11f /* CTI */ +- srlx %g3, 48, %g4 /* IEU0 */ +- andcc %g4, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 10f /* CTI */ +- srlx %g3, 40, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 9f /* CTI */ +- +- srlx %g3, 32, %g4 /* IEU0 */ +- andcc %g4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 8f /* CTI */ +- srlx %g3, 24, %g5 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 7f /* CTI */ +- srlx %g3, 16, %g4 /* IEU0 */ +- andcc %g4, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 6f /* CTI */ +- srlx %g3, 8, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5f /* CTI */ +- +- sub %o3, %g1, %o2 /* IEU0 */ +- stx %g3, [%o0 - 8] /* Store Group */ +- andcc %g3, 0xff, %g0 /* IEU1 */ +- bne,pt %icc, 3b /* CTI */ +- +- mov %o3, %g3 /* IEU0 Group */ +-4: retl /* CTI+IEU1 Group */ +- sub %o0, 1, %o0 /* IEU0 */ +- +- .align 16 +-6: ba,pt %xcc, 23f /* CTI Group */ +- sub %o0, 3, %g6 /* IEU0 */ +-5: sub %o0, 2, %g6 /* IEU0 Group */ +- stb %g5, [%o0 - 2] /* Store */ +- +- srlx %g3, 16, %g4 /* IEU0 Group */ +-23: sth %g4, [%o0 - 4] /* Store */ +- srlx %g3, 32, %g4 /* IEU0 Group */ +- stw %g4, [%o0 - 8] /* Store */ +- +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +-8: ba,pt %xcc, 24f /* CTI Group */ +- sub %o0, 5, %g6 /* IEU0 */ +- +-7: sub %o0, 4, %g6 /* IEU0 Group */ +- stb %g5, [%o0 - 4] /* Store */ +- srlx %g3, 32, %g4 /* IEU0 Group */ +-24: stw %g4, [%o0 - 8] /* Store */ +- +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +-10: ba,pt %xcc, 25f /* CTI Group */ +- sub %o0, 7, %g6 /* IEU0 */ +- +-9: sub %o0, 6, %g6 /* IEU0 Group */ +- stb %g5, [%o0 - 6] /* Store */ +- srlx %g3, 48, %g4 /* IEU0 */ +-25: sth %g4, [%o0 - 8] /* Store Group */ +- +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +-11: stb %g5, [%o0 - 8] /* Store Group */ +- retl /* CTI+IEU1 Group */ +- +- sub %o0, 8, %o0 /* IEU0 */ +- +- .align 16 +-12: or %g1, %g2, %g1 /* IEU0 Group */ +- ldub [%o1], %o3 /* Load */ +- sllx %g1, 7, %g2 /* IEU0 Group */ +- stb %o3, [%o0] /* Store Group */ +- +-13: add %o0, 1, %o0 /* IEU0 */ +- add %o1, 1, %o1 /* IEU1 */ +- andcc %o3, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4b /* CTI */ +- +- lduba [%o1] ASI_PNF, %o3 /* Load */ +- andcc %o0, 7, %g0 /* IEU1 Group */ +- bne,a,pt %icc, 13b /* CTI */ +- stb %o3, [%o0] /* Store */ +- +- andcc %o1, 7, %g3 /* IEU1 Group */ +- be,a,pt %icc, 1b /* CTI */ +- ldx [%o1], %o3 /* Load */ +-14: orcc %g0, 64, %g4 /* IEU1 Group */ +- +- sllx %g3, 3, %g5 /* IEU0 */ +- sub %o1, %g3, %o1 /* IEU0 Group */ +- sub %g4, %g5, %g4 /* IEU1 */ +- /* %g1 = 0101010101010101 * +- * %g2 = 8080808080808080 * +- * %g3 = source alignment * +- * %g5 = number of bits to shift left * +- * %g4 = number of bits to shift right */ +- ldxa [%o1] ASI_PNF, %o5 /* Load Group */ +- +- addcc %o1, 8, %o1 /* IEU1 */ +-15: sllx %o5, %g5, %o3 /* IEU0 Group */ +- ldxa [%o1] ASI_PNF, %o5 /* Load */ +- srlx %o5, %g4, %o4 /* IEU0 Group */ +- +- add %o0, 8, %o0 /* IEU1 */ +- or %o3, %o4, %o3 /* IEU0 Group */ +- add %o1, 8, %o1 /* IEU1 */ +- sub %o3, %g1, %o4 /* IEU0 Group */ +- +-#ifdef EIGHTBIT_NOT_RARE +- andn %o4, %o3, %o4 /* IEU0 Group */ +-#endif +- andcc %o4, %g2, %g0 /* IEU1 Group */ +- be,a,pt %xcc, 15b /* CTI */ +- stx %o3, [%o0 - 8] /* Store */ +- srlx %o3, 56, %o4 /* IEU0 Group */ +- +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 22f /* CTI */ +- srlx %o3, 48, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 21f /* CTI */ +- srlx %o3, 40, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 20f /* CTI */ +- +- srlx %o3, 32, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 19f /* CTI */ +- srlx %o3, 24, %o4 /* IEU0 */ +- +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 18f /* CTI */ +- srlx %o3, 16, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 17f /* CTI */ +- srlx %o3, 8, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 16f /* CTI */ +- +- andcc %o3, 0xff, %g0 /* IEU1 Group */ +- bne,pn %icc, 15b /* CTI */ +- stx %o3, [%o0 - 8] /* Store */ +- retl /* CTI+IEU1 Group */ +- +- sub %o0, 1, %o0 /* IEU0 */ +- +- .align 16 +-17: ba,pt %xcc, 26f /* CTI Group */ +- subcc %o0, 3, %g6 /* IEU1 */ +-18: ba,pt %xcc, 27f /* CTI Group */ +- subcc %o0, 4, %g6 /* IEU1 */ +- +-19: ba,pt %xcc, 28f /* CTI Group */ +- subcc %o0, 5, %g6 /* IEU1 */ +-16: subcc %o0, 2, %g6 /* IEU1 Group */ +- srlx %o3, 8, %o4 /* IEU0 */ +- +- stb %o4, [%o0 - 2] /* Store */ +-26: srlx %o3, 16, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 3] /* Store */ +-27: srlx %o3, 24, %o4 /* IEU0 Group */ +- +- stb %o4, [%o0 - 4] /* Store */ +-28: srlx %o3, 32, %o4 /* IEU0 Group */ +- stw %o4, [%o0 - 8] /* Store */ +- retl /* CTI+IEU1 Group */ +- +- mov %g6, %o0 /* IEU0 */ +- +- .align 16 +-21: ba,pt %xcc, 29f /* CTI Group */ +- subcc %o0, 7, %g6 /* IEU1 */ +-22: ba,pt %xcc, 30f /* CTI Group */ +- subcc %o0, 8, %g6 /* IEU1 */ +- +-20: subcc %o0, 6, %g6 /* IEU1 Group */ +- srlx %o3, 40, %o4 /* IEU0 */ +- stb %o4, [%o0 - 6] /* Store */ +-29: srlx %o3, 48, %o4 /* IEU0 Group */ +- +- stb %o4, [%o0 - 7] /* Store */ +-30: srlx %o3, 56, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 8] /* Store */ +- retl /* CTI+IEU1 Group */ +- +- mov %g6, %o0 /* IEU0 */ +-END(stpcpy) +-libc_hidden_def(stpcpy) +diff --git a/libc/string/sparc/sparc64/strcat.S b/libc/string/sparc/sparc64/strcat.S +deleted file mode 100644 +index 56725cc..0000000 +--- a/libc/string/sparc/sparc64/strcat.S ++++ /dev/null +@@ -1,338 +0,0 @@ +-/* strcat (dest, src) -- Append SRC on the end of DEST. +- For SPARC v9. +- Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jj@ultra.linux.cz> and +- Jan Vondrak <jvon4518@ss1000.ms.mff.cuni.cz>. +- +- 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 <asm/asi.h> +-#ifndef XCC +-#define XCC xcc +-#define USE_BPR +- .register %g2, #scratch +- .register %g3, #scratch +- .register %g6, #scratch +-#endif +- +- /* Normally, this uses +- ((xword - 0x0101010101010101) & 0x8080808080808080) test +- to find out if any byte in xword could be zero. This is fast, but +- also gives false alarm for any byte in range 0x81-0xff. It does +- not matter for correctness, as if this test tells us there could +- be some zero byte, we check it byte by byte, but if bytes with +- high bits set are common in the strings, then this will give poor +- performance. You can #define EIGHTBIT_NOT_RARE and the algorithm +- will use one tick slower, but more precise test +- ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), +- which does not give any false alarms (but if some bits are set, +- one cannot assume from it which bytes are zero and which are not). +- It is yet to be measured, what is the correct default for glibc +- in these days for an average user. +- */ +- +- .text +- .align 32 +-ENTRY(strcat) +- sethi %hi(0x01010101), %g1 /* IEU0 Group */ +- ldub [%o0], %o3 /* Load */ +- or %g1, %lo(0x01010101), %g1 /* IEU0 Group */ +- mov %o0, %g6 /* IEU1 */ +- +- sllx %g1, 32, %g2 /* IEU0 Group */ +- andcc %o0, 7, %g0 /* IEU1 */ +- or %g1, %g2, %g1 /* IEU0 Group */ +- bne,pn %icc, 32f /* CTI */ +- +- sllx %g1, 7, %g2 /* IEU0 Group */ +- brz,pn %o3, 30f /* CTI+IEU1 */ +- ldx [%o0], %o3 /* Load */ +-48: add %o0, 8, %o0 /* IEU0 Group */ +- +-49: sub %o3, %g1, %o2 /* IEU0 Group */ +-#ifdef EIGHTBIT_NOT_RARE +- andn %o2, %o3, %g5 /* IEU0 Group */ +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- andcc %g5, %g2, %g0 /* IEU1 Group */ +-#else +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- andcc %o2, %g2, %g0 /* IEU1 Group */ +-#endif +- be,pt %xcc, 49b /* CTI */ +- +- add %o0, 8, %o0 /* IEU0 */ +- addcc %o2, %g1, %g3 /* IEU1 Group */ +- srlx %o2, 32, %o2 /* IEU0 */ +-50: andcc %o2, %g2, %g0 /* IEU1 Group */ +- +- be,pn %xcc, 51f /* CTI */ +- srlx %g3, 56, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 29f /* CTI */ +- +- srlx %g3, 48, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 28f /* CTI */ +- srlx %g3, 40, %o2 /* IEU0 */ +- +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 27f /* CTI */ +- srlx %g3, 32, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 26f /* CTI */ +-51: srlx %g3, 24, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 25f /* CTI */ +- +- srlx %g3, 16, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 24f /* CTI */ +- srlx %g3, 8, %o2 /* IEU0 */ +- +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 23f /* CTI */ +- sub %o3, %g1, %o2 /* IEU0 */ +- andcc %g3, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 52f /* CTI */ +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- andcc %o2, %g2, %g0 /* IEU1 Group */ +- be,pt %xcc, 49b /* CTI */ +- +- add %o0, 8, %o0 /* IEU0 */ +- addcc %o2, %g1, %g3 /* IEU1 Group */ +- ba,pt %xcc, 50b /* CTI */ +- srlx %o2, 32, %o2 /* IEU0 */ +- +- .align 16 +-52: ba,pt %xcc, 12f /* CTI Group */ +- add %o0, -9, %o0 /* IEU0 */ +-23: ba,pt %xcc, 12f /* CTI Group */ +- add %o0, -10, %o0 /* IEU0 */ +- +-24: ba,pt %xcc, 12f /* CTI Group */ +- add %o0, -11, %o0 /* IEU0 */ +-25: ba,pt %xcc, 12f /* CTI Group */ +- add %o0, -12, %o0 /* IEU0 */ +- +-26: ba,pt %xcc, 12f /* CTI Group */ +- add %o0, -13, %o0 /* IEU0 */ +-27: ba,pt %xcc, 12f /* CTI Group */ +- add %o0, -14, %o0 /* IEU0 */ +- +-28: ba,pt %xcc, 12f /* CTI Group */ +- add %o0, -15, %o0 /* IEU0 */ +-29: add %o0, -16, %o0 /* IEU0 Group */ +-30: andcc %o1, 7, %g3 /* IEU1 */ +- +-31: bne,pn %icc, 14f /* CTI */ +- orcc %g0, 64, %g4 /* IEU1 Group */ +-1: ldx [%o1], %o3 /* Load */ +- add %o1, 8, %o1 /* IEU1 */ +- +-2: mov %o3, %g3 /* IEU0 Group */ +-3: sub %o3, %g1, %o2 /* IEU1 */ +- ldxa [%o1] ASI_PNF, %o3 /* Load */ +-#ifdef EIGHTBIT_NOT_RARE +- andn %o2, %g3, %o2 /* IEU0 Group */ +-#endif +- add %o0, 8, %o0 /* IEU0 Group */ +- +- andcc %o2, %g2, %g0 /* IEU1 */ +- add %o1, 8, %o1 /* IEU0 Group */ +- be,a,pt %xcc, 2b /* CTI */ +- stx %g3, [%o0 - 8] /* Store */ +- +- srlx %g3, 56, %g5 /* IEU0 Group */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 11f /* CTI */ +- srlx %g3, 48, %g4 /* IEU0 */ +- +- andcc %g4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 10f /* CTI */ +- srlx %g3, 40, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 9f /* CTI */ +- srlx %g3, 32, %g4 /* IEU0 */ +- andcc %g4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 8f /* CTI */ +- +- srlx %g3, 24, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 7f /* CTI */ +- srlx %g3, 16, %g4 /* IEU0 */ +- +- andcc %g4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 6f /* CTI */ +- srlx %g3, 8, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 5f /* CTI */ +- sub %o3, %g1, %o2 /* IEU0 */ +- stx %g3, [%o0 - 8] /* Store Group */ +- andcc %g3, 0xff, %g0 /* IEU1 */ +- +- bne,pt %icc, 3b /* CTI */ +- mov %o3, %g3 /* IEU0 Group */ +-4: retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +- +- .align 16 +-5: stb %g5, [%o0 - 2] /* Store Group */ +- srlx %g3, 16, %g4 /* IEU0 */ +-6: sth %g4, [%o0 - 4] /* Store Group */ +- srlx %g3, 32, %g4 /* IEU0 */ +- +- stw %g4, [%o0 - 8] /* Store Group */ +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +-7: stb %g5, [%o0 - 4] /* Store Group */ +- +- srlx %g3, 32, %g4 /* IEU0 */ +-8: stw %g4, [%o0 - 8] /* Store Group */ +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +- +-9: stb %g5, [%o0 - 6] /* Store Group */ +- srlx %g3, 48, %g4 /* IEU0 */ +-10: sth %g4, [%o0 - 8] /* Store Group */ +- retl /* CTI+IEU1 Group */ +- +- mov %g6, %o0 /* IEU0 */ +-11: stb %g5, [%o0 - 8] /* Store Group */ +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +- +- .align 16 +-32: andcc %o0, 7, %g0 /* IEU1 Group */ +- be,a,pn %icc, 48b /* CTI */ +- ldx [%o0], %o3 /* Load */ +- add %o0, 1, %o0 /* IEU0 Group */ +- +- brnz,a,pt %o3, 32b /* CTI+IEU1 */ +- lduba [%o0] ASI_PNF, %o3 /* Load */ +- add %o0, -1, %o0 /* IEU0 Group */ +- andcc %o0, 7, %g0 /* IEU1 Group */ +- +- be,a,pn %icc, 31b /* CTI */ +- andcc %o1, 7, %g3 /* IEU1 Group */ +-12: ldub [%o1], %o3 /* Load */ +- stb %o3, [%o0] /* Store Group */ +- +-13: add %o0, 1, %o0 /* IEU0 */ +- add %o1, 1, %o1 /* IEU1 */ +- andcc %o3, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4b /* CTI */ +- +- lduba [%o1] ASI_PNF, %o3 /* Load */ +- andcc %o0, 7, %g0 /* IEU1 Group */ +- bne,a,pt %icc, 13b /* CTI */ +- stb %o3, [%o0] /* Store */ +- +- andcc %o1, 7, %g3 /* IEU1 Group */ +- be,a,pt %icc, 1b /* CTI */ +- ldx [%o1], %o3 /* Load */ +- orcc %g0, 64, %g4 /* IEU1 Group */ +- +-14: sllx %g3, 3, %g5 /* IEU0 */ +- sub %o1, %g3, %o1 /* IEU0 Group */ +- sub %g4, %g5, %g4 /* IEU1 */ +- /* %g1 = 0101010101010101 * +- * %g2 = 8080808080808080 * +- * %g3 = source alignment * +- * %g5 = number of bits to shift left * +- * %g4 = number of bits to shift right */ +- ldxa [%o1] ASI_PNF, %o5 /* Load Group */ +- +- addcc %o1, 8, %o1 /* IEU1 */ +-15: sllx %o5, %g5, %o3 /* IEU0 Group */ +- ldxa [%o1] ASI_PNF, %o5 /* Load */ +- srlx %o5, %g4, %o4 /* IEU0 Group */ +- +- add %o0, 8, %o0 /* IEU1 */ +- or %o3, %o4, %o3 /* IEU0 Group */ +- add %o1, 8, %o1 /* IEU1 */ +- sub %o3, %g1, %o4 /* IEU0 Group */ +- +-#ifdef EIGHTBIT_NOT_RARE +- andn %o4, %o3, %o4 /* IEU0 Group */ +-#endif +- andcc %o4, %g2, %g0 /* IEU1 Group */ +- be,a,pt %xcc, 15b /* CTI */ +- stx %o3, [%o0 - 8] /* Store */ +- srlx %o3, 56, %o4 /* IEU0 Group */ +- +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 22f /* CTI */ +- srlx %o3, 48, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 21f /* CTI */ +- srlx %o3, 40, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 20f /* CTI */ +- +- srlx %o3, 32, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 19f /* CTI */ +- srlx %o3, 24, %o4 /* IEU0 */ +- +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 18f /* CTI */ +- srlx %o3, 16, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 17f /* CTI */ +- srlx %o3, 8, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 16f /* CTI */ +- +- andcc %o3, 0xff, %g0 /* IEU1 Group */ +- bne,pn %icc, 15b /* CTI */ +- stx %o3, [%o0 - 8] /* Store */ +- retl /* CTI+IEU1 Group */ +- +- mov %g6, %o0 /* IEU0 */ +- +- .align 16 +-16: srlx %o3, 8, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 2] /* Store */ +-17: srlx %o3, 16, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 3] /* Store */ +- +-18: srlx %o3, 24, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 4] /* Store */ +-19: srlx %o3, 32, %o4 /* IEU0 Group */ +- stw %o4, [%o0 - 8] /* Store */ +- +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +- nop +- nop +- +-20: srlx %o3, 40, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 6] /* Store */ +-21: srlx %o3, 48, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 7] /* Store */ +- +-22: srlx %o3, 56, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 8] /* Store */ +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +-END(strcat) +-libc_hidden_def(strcat) +diff --git a/libc/string/sparc/sparc64/strchr.S b/libc/string/sparc/sparc64/strchr.S +deleted file mode 100644 +index 25810fd..0000000 +--- a/libc/string/sparc/sparc64/strchr.S ++++ /dev/null +@@ -1,485 +0,0 @@ +-/* strchr (str, ch) -- Return pointer to first occurrence of CH in STR. +- For SPARC v9. +- Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jan Vondrak <jvon4518@ss1000.ms.mff.cuni.cz> and +- Jakub Jelinek <jj@ultra.linux.cz>. +- +- 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 <features.h> +-#include <asm/asi.h> +-#ifndef XCC +-#define XCC xcc +-#define USE_BPR +- .register %g2, #scratch +- .register %g3, #scratch +- .register %g6, #scratch +-#endif +- +- /* Normally, this uses +- ((xword - 0x0101010101010101) & 0x8080808080808080) test +- to find out if any byte in xword could be zero. This is fast, but +- also gives false alarm for any byte in range 0x81-0xff. It does +- not matter for correctness, as if this test tells us there could +- be some zero byte, we check it byte by byte, but if bytes with +- high bits set are common in the strings, then this will give poor +- performance. You can #define EIGHTBIT_NOT_RARE and the algorithm +- will use one tick slower, but more precise test +- ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), +- which does not give any false alarms (but if some bits are set, +- one cannot assume from it which bytes are zero and which are not). +- It is yet to be measured, what is the correct default for glibc +- in these days for an average user. +- */ +- +- .text +- .align 32 +-ENTRY(strchr) +- andcc %o1, 0xff, %o1 /* IEU1 Group */ +- be,pn %icc, 17f /* CTI */ +- sllx %o1, 8, %g3 /* IEU0 Group */ +- sethi %hi(0x01010101), %g1 /* IEU1 */ +- +- or %g3, %o1, %g3 /* IEU0 Group */ +- ldub [%o0], %o3 /* Load */ +- sllx %g3, 16, %g5 /* IEU0 Group */ +- or %g1, %lo(0x01010101), %g1 /* IEU1 */ +- +- sllx %g1, 32, %g2 /* IEU0 Group */ +- brz,pn %o3, 5f /* CTI+IEU1 */ +- orcc %g3, %g5, %g3 /* IEU1 Group */ +- sllx %g3, 32, %g5 /* IEU0 */ +- +- cmp %o3, %o1 /* IEU1 Group */ +- be,pn %xcc, 14f /* CTI */ +- or %g1, %g2, %g1 /* IEU0 */ +- andcc %o0, 7, %g0 /* IEU1 Group */ +- +- bne,a,pn %icc, 15f /* CTI */ +- add %o0, 1, %o0 /* IEU0 */ +- ldx [%o0], %o3 /* Load Group */ +-1: sllx %g1, 7, %g2 /* IEU0 */ +- +- or %g3, %g5, %g3 /* IEU1 */ +- add %o0, 8, %o0 /* IEU0 Group */ +- xor %o3, %g3, %o4 /* IEU1 */ +- /* %g1 = 0101010101010101 * +- * %g2 = 8080088080808080 * +- * %g3 = c c c c c c c c * +- * %o3 = value * +- * %o4 = value XOR c */ +-2: sub %o3, %g1, %o2 /* IEU0 Group */ +- +- sub %o4, %g1, %o5 /* IEU1 */ +-#ifdef EIGHTBIT_NOT_RARE +- andn %o2, %o3, %g6 /* IEU0 Group */ +- andn %o5, %o4, %o5 /* IEU1 */ +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- or %o5, %g6, %o5 /* IEU0 Group */ +-#else +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- or %o5, %o2, %o5 /* IEU0 Group */ +-#endif +- add %o0, 8, %o0 /* IEU1 */ +- +- andcc %o5, %g2, %g0 /* IEU1 Group */ +- be,a,pt %xcc, 2b /* CTI */ +- xor %o3, %g3, %o4 /* IEU0 */ +- srlx %o5, 32, %g5 /* IEU0 Group */ +- +- add %o2, %g1, %o2 /* IEU1 */ +-3: andcc %g5, %g2, %g0 /* IEU1 Group */ +- be,pn %xcc, 4f /* CTI */ +- srlx %o2, 56, %g5 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5f /* CTI */ +- srlx %o4, 56, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 6f /* CTI */ +- srlx %o2, 48, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5f /* CTI */ +- +- srlx %o4, 48, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 7f /* CTI */ +- srlx %o2, 40, %g5 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5f /* CTI */ +- srlx %o4, 40, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 8f /* CTI */ +- srlx %o2, 32, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5f /* CTI */ +- +- srlx %o4, 32, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 9f /* CTI */ +-4: srlx %o2, 24, %g5 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5f /* CTI */ +- srlx %o4, 24, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 10f /* CTI */ +- srlx %o2, 16, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5f /* CTI */ +- +- srlx %o4, 16, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 11f /* CTI */ +- srlx %o2, 8, %g5 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5f /* CTI */ +- srlx %o4, 8, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 12f /* CTI */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5f /* CTI */ +- sub %o3, %g1, %o2 /* IEU0 */ +- +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 13f /* CTI */ +- xor %o3, %g3, %o4 /* IEU0 */ +- ldxa [%o0] ASI_PNF, %o3 /* Load Group */ +- +- sub %o4, %g1, %o5 /* IEU0 */ +- or %o5, %o2, %o5 /* IEU1 */ +- add %o0, 8, %o0 /* IEU0 Group */ +- andcc %o5, %g2, %g0 /* IEU1 */ +- +- be,a,pt %xcc, 2b /* CTI */ +- xor %o3, %g3, %o4 /* IEU0 Group */ +- srlx %o5, 32, %g5 /* IEU0 Group */ +- ba,pt %xcc, 3b /* CTI */ +- +- add %o2, %g1, %o2 /* IEU1 */ +- +- .align 16 +-5: retl /* CTI+IEU1 Group */ +- clr %o0 /* IEU0 */ +-6: retl /* CTI+IEU1 Group */ +- add %o0, -16, %o0 /* IEU0 */ +- +-7: retl /* CTI+IEU1 Group */ +- add %o0, -15, %o0 /* IEU0 */ +-8: retl /* CTI+IEU1 Group */ +- add %o0, -14, %o0 /* IEU0 */ +- +-9: retl /* CTI+IEU1 Group */ +- add %o0, -13, %o0 /* IEU0 */ +-10: retl /* CTI+IEU1 Group */ +- add %o0, -12, %o0 /* IEU0 */ +- +-11: retl /* CTI+IEU1 Group */ +- add %o0, -11, %o0 /* IEU0 */ +-12: retl /* CTI+IEU1 Group */ +- add %o0, -10, %o0 /* IEU0 */ +- +-13: retl /* CTI+IEU1 Group */ +- add %o0, -9, %o0 /* IEU0 */ +-14: retl /* CTI+IEU1 Group */ +- nop /* IEU0 */ +- +- .align 16 +-15: ldub [%o0], %o3 /* Load Group */ +-16: andcc %o0, 7, %g0 /* IEU1 */ +- be,a,pn %icc, 1b /* CTI */ +- ldx [%o0], %o3 /* Load Group */ +- +- andcc %o3, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5b /* CTI */ +- add %o0, 1, %o0 /* IEU0 */ +- cmp %o3, %o1 /* IEU1 Group */ +- +- bne,a,pn %icc, 16b /* CTI */ +- ldub [%o0], %o3 /* Load */ +- retl /* CTI+IEU1 Group */ +- add %o0, -1, %o0 /* IEU0 */ +- +- /* strchr (str, 0) */ +- .align 32 +- nop +- .align 16 +-17: sethi %hi(0x01010101), %g1 /* IEU0 Group */ +- ldub [%o0], %o3 /* Load */ +- or %g1, %lo(0x01010101), %g1 /* IEU0 Group */ +- sllx %g1, 32, %g2 /* IEU0 Group */ +- +- andcc %o0, 7, %g0 /* IEU1 */ +- or %g1, %g2, %g1 /* IEU0 Group */ +- bne,pn %icc, 32f /* CTI */ +- sllx %g1, 7, %g2 /* IEU0 Group */ +- +- brz,pn %o3, 30f /* CTI+IEU1 */ +- ldx [%o0], %o3 /* Load */ +-18: add %o0, 8, %o0 /* IEU0 Group */ +-19: sub %o3, %g1, %o2 /* IEU0 Group */ +- +-#ifdef EIGHTBIT_NOT_RARE +- andn %o2, %o3, %g6 /* IEU0 Group */ +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- andcc %g6, %g2, %g0 /* IEU1 Group */ +-#else +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- andcc %o2, %g2, %g0 /* IEU1 Group */ +-#endif +- be,pt %xcc, 19b /* CTI */ +- add %o0, 8, %o0 /* IEU0 */ +- +- addcc %o2, %g1, %g3 /* IEU1 Group */ +- srlx %o2, 32, %o2 /* IEU0 */ +-20: andcc %o2, %g2, %g0 /* IEU1 Group */ +- be,pn %xcc, 21f /* CTI */ +- +- srlx %g3, 56, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 29f /* CTI */ +- srlx %g3, 48, %o2 /* IEU0 */ +- +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 28f /* CTI */ +- srlx %g3, 40, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 27f /* CTI */ +- srlx %g3, 32, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 26f /* CTI */ +- +-21: srlx %g3, 24, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 25f /* CTI */ +- srlx %g3, 16, %o2 /* IEU0 */ +- +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 24f /* CTI */ +- srlx %g3, 8, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 23f /* CTI */ +- sub %o3, %g1, %o2 /* IEU0 */ +- andcc %g3, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 22f /* CTI */ +- +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- andcc %o2, %g2, %g0 /* IEU1 Group */ +- be,pt %xcc, 19b /* CTI */ +- add %o0, 8, %o0 /* IEU0 */ +- +- addcc %o2, %g1, %g3 /* IEU1 Group */ +- ba,pt %xcc, 20b /* CTI */ +- srlx %o2, 32, %o2 /* IEU0 */ +- +- .align 16 +-22: retl /* CTI+IEU1 Group */ +- add %o0, -9, %o0 /* IEU0 */ +-23: retl /* CTI+IEU1 Group */ +- add %o0, -10, %o0 /* IEU0 */ +- +-24: retl /* CTI+IEU1 Group */ +- add %o0, -11, %o0 /* IEU0 */ +-25: retl /* CTI+IEU1 Group */ +- add %o0, -12, %o0 /* IEU0 */ +- +-26: retl /* CTI+IEU1 Group */ +- add %o0, -13, %o0 /* IEU0 */ +-27: retl /* CTI+IEU1 Group */ +- add %o0, -14, %o0 /* IEU0 */ +- +-28: retl /* CTI+IEU1 Group */ +- add %o0, -15, %o0 /* IEU0 */ +-29: retl /* CTI+IEU1 Group */ +- add %o0, -16, %o0 /* IEU0 */ +- +-30: retl /* CTI+IEU1 Group */ +- nop /* IEU0 */ +- +- .align 16 +-32: andcc %o0, 7, %g0 /* IEU1 Group */ +- be,a,pn %icc, 18b /* CTI */ +- ldx [%o0], %o3 /* Load */ +- add %o0, 1, %o0 /* IEU0 Group */ +- +- brnz,a,pt %o3, 32b /* CTI+IEU1 */ +- lduba [%o0] ASI_PNF, %o3 /* Load */ +- retl /* CTI+IEU1 Group */ +- add %o0, -1, %o0 /* IEU0 */ +-END(strchr) +-libc_hidden_def(strchr) +-#ifdef __UCLIBC_SUSV3_LEGACY__ +-strong_alias(strchr,index) +-#endif +- +- .align 32 +-ENTRY(strrchr) +- andcc %o1, 0xff, %o1 /* IEU1 Group */ +- be,pn %icc, 17b /* CTI */ +- clr %g4 /* IEU0 */ +- andcc %o0, 7, %g0 /* IEU1 Group */ +- +- bne,pn %icc, 13f /* CTI */ +- sllx %o1, 8, %g3 /* IEU0 */ +- ldx [%o0], %o3 /* Load Group */ +-1: sethi %hi(0x01010101), %g1 /* IEU0 */ +- +- or %g3, %o1, %g3 /* IEU1 */ +- sllx %g3, 16, %g5 /* IEU0 Group */ +- or %g1, %lo(0x01010101), %g1 /* IEU1 */ +- sllx %g1, 32, %g2 /* IEU0 Group */ +- +- or %g3, %g5, %g3 /* IEU1 */ +- sllx %g3, 32, %g5 /* IEU0 Group */ +- or %g1, %g2, %g1 /* IEU1 */ +- sllx %g1, 7, %g2 /* IEU0 Group */ +- +- or %g3, %g5, %g3 /* IEU1 */ +- add %o0, 8, %o0 /* IEU0 Group */ +- xor %o3, %g3, %o4 /* IEU1 */ +- /* %g1 = 0101010101010101 * +- * %g2 = 8080088080808080 * +- * %g3 = c c c c c c c c * +- * %o3 = value * +- * %o4 = value XOR c */ +-2: sub %o3, %g1, %o2 /* IEU0 Group */ +- +-3: sub %o4, %g1, %o5 /* IEU1 */ +-#ifdef EIGHTBIT_NOT_RARE +- andn %o2, %o3, %g6 /* IEU0 Group */ +- andn %o5, %o4, %o5 /* IEU1 */ +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- +- or %o5, %g6, %o5 /* IEU0 Group */ +-#else +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- +- or %o5, %o2, %o5 /* IEU0 Group */ +-#endif +- add %o0, 8, %o0 /* IEU1 */ +- andcc %o5, %g2, %g0 /* IEU1 Group */ +- be,a,pt %xcc, 2b /* CTI */ +- +- xor %o3, %g3, %o4 /* IEU0 */ +- srlx %o5, 32, %g5 /* IEU0 Group */ +- add %o2, %g1, %o2 /* IEU1 */ +- andcc %g5, %g2, %g0 /* IEU1 Group */ +- +- be,pn %xcc, 7f /* CTI */ +- srlx %o2, 56, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 12f /* CTI */ +- +- srlx %o4, 56, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- srlx %o2, 48, %g5 /* IEU0 */ +- be,a,pn %icc, 4f /* CTI */ +- +- add %o0, -16, %g4 /* IEU0 Group */ +-4: andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 12f /* CTI */ +- srlx %o4, 48, %g5 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- srlx %o2, 40, %g5 /* IEU0 */ +- be,a,pn %icc, 5f /* CTI */ +- add %o0, -15, %g4 /* IEU0 Group */ +- +-5: andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 12f /* CTI */ +- srlx %o4, 40, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- srlx %o2, 32, %g5 /* IEU0 */ +- be,a,pn %icc, 6f /* CTI */ +- add %o0, -14, %g4 /* IEU0 Group */ +-6: andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 12f /* CTI */ +- srlx %o4, 32, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,a,pn %icc, 7f /* CTI */ +- +- add %o0, -13, %g4 /* IEU0 */ +-7: srlx %o2, 24, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 12f /* CTI */ +- +- srlx %o4, 24, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- srlx %o2, 16, %g5 /* IEU0 */ +- be,a,pn %icc, 8f /* CTI */ +- +- add %o0, -12, %g4 /* IEU0 Group */ +-8: andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 12f /* CTI */ +- srlx %o4, 16, %g5 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- srlx %o2, 8, %g5 /* IEU0 */ +- be,a,pn %icc, 9f /* CTI */ +- add %o0, -11, %g4 /* IEU0 Group */ +- +-9: andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 12f /* CTI */ +- srlx %o4, 8, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,a,pn %icc, 10f /* CTI */ +- add %o0, -10, %g4 /* IEU0 */ +-10: andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 12f /* CTI */ +- +- sub %o3, %g1, %o2 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,a,pn %icc, 11f /* CTI */ +- add %o0, -9, %g4 /* IEU0 */ +- +-11: ba,pt %xcc, 3b /* CTI Group */ +- xor %o3, %g3, %o4 /* IEU0 Group */ +-12: retl /* CTI+IEU1 Group */ +- mov %g4, %o0 /* IEU0 */ +- +- .align 16 +-13: ldub [%o0], %o3 /* Load Group */ +- add %o0, 1, %o0 /* IEU0 */ +-14: andcc %o3, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 12b /* CTI */ +- +- cmp %o3, %o1 /* IEU1 Group */ +- ldub [%o0], %o3 /* Load */ +- be,a,pn %icc, 15f /* CTI */ +- add %o0, -1, %g4 /* IEU0 Group */ +- +-15: andcc %o0, 7, %g0 /* IEU1 Group */ +- bne,a,pt %icc, 14b /* CTI */ +- add %o0, 1, %o0 /* IEU0 */ +- ba,pt %xcc, 1b /* CTI Group */ +- +- ldx [%o0], %o3 /* Load */ +-END(strrchr) +-libc_hidden_def(strrchr) +-#ifdef __UCLIBC_SUSV3_LEGACY__ +-strong_alias(strrchr,rindex) +-#endif +diff --git a/libc/string/sparc/sparc64/strcmp.S b/libc/string/sparc/sparc64/strcmp.S +deleted file mode 100644 +index 7b85007..0000000 +--- a/libc/string/sparc/sparc64/strcmp.S ++++ /dev/null +@@ -1,278 +0,0 @@ +-/* Compare two strings for differences. +- For SPARC v9. +- Copyright (C) 1997, 1999, 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jan Vondrak <jvon4518@ss1000.ms.mff.cuni.cz> and +- Jakub Jelinek <jj@ultra.linux.cz>. +- +- 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 <asm/asi.h> +-#ifndef XCC +- .register %g2, #scratch +- .register %g3, #scratch +- .register %g6, #scratch +-#endif +- +- /* Normally, this uses +- ((xword - 0x0101010101010101) & 0x8080808080808080) test +- to find out if any byte in xword could be zero. This is fast, but +- also gives false alarm for any byte in range 0x81-0xff. It does +- not matter for correctness, as if this test tells us there could +- be some zero byte, we check it byte by byte, but if bytes with +- high bits set are common in the strings, then this will give poor +- performance. You can #define EIGHTBIT_NOT_RARE and the algorithm +- will use one tick slower, but more precise test +- ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), +- which does not give any false alarms (but if some bits are set, +- one cannot assume from it which bytes are zero and which are not). +- It is yet to be measured, what is the correct default for glibc +- in these days for an average user. +- */ +- +- .text +- .align 32 +-ENTRY(strcmp) +- sethi %hi(0x01010101), %g1 /* IEU0 Group */ +- andcc %o0, 7, %g0 /* IEU1 */ +- bne,pn %icc, 7f /* CTI */ +- or %g1, %lo(0x01010101), %g1 /* IEU0 Group */ +- +- andcc %o1, 7, %g3 /* IEU1 */ +- bne,pn %icc, 9f /* CTI */ +- sllx %g1, 32, %g2 /* IEU0 Group */ +- ldx [%o0], %o2 /* Load */ +- +- or %g1, %g2, %g1 /* IEU0 Group */ +-1: ldx [%o1], %o3 /* Load */ +- sub %o1, %o0, %o1 /* IEU1 */ +- sllx %g1, 7, %g2 /* IEU0 Group */ +- +-2: add %o0, 8, %o0 /* IEU1 */ +- sub %o2, %g1, %g3 /* IEU0 Group */ +- subcc %o2, %o3, %g0 /* IEU1 */ +- bne,pn %xcc, 13f /* CTI */ +- +-#ifdef EIGHTBIT_NOT_RARE +- andn %g3, %o2, %g4 /* IEU0 Group */ +- ldxa [%o0] ASI_PNF, %o2 /* Load */ +- andcc %g4, %g2, %g0 /* IEU1 Group */ +-#else +- ldxa [%o0] ASI_PNF, %o2 /* Load Group */ +- andcc %g3, %g2, %g0 /* IEU1 */ +-#endif +- be,a,pt %xcc, 2b /* CTI */ +- ldxa [%o1 + %o0] ASI_PNF, %o3 /* Load Group */ +- +- addcc %g3, %g1, %o4 /* IEU1 */ +- srlx %g3, 32, %g3 /* IEU0 */ +- andcc %g3, %g2, %g0 /* IEU1 Group */ +- be,pt %xcc, 3f /* CTI */ +- +- srlx %o4, 56, %o5 /* IEU0 */ +- andcc %o5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4f /* CTI */ +- srlx %o4, 48, %o5 /* IEU0 */ +- +- andcc %o5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4f /* CTI */ +- srlx %o4, 40, %o5 /* IEU0 */ +- andcc %o5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 4f /* CTI */ +- srlx %o4, 32, %o5 /* IEU0 */ +- andcc %o5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4f /* CTI */ +- +-3: srlx %o4, 24, %o5 /* IEU0 */ +- andcc %o5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4f /* CTI */ +- srlx %o4, 16, %o5 /* IEU0 */ +- +- andcc %o5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4f /* CTI */ +- srlx %o4, 8, %o5 /* IEU0 */ +- andcc %o5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 4f /* CTI */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- bne,a,pn %icc, 2b /* CTI */ +- ldxa [%o1 + %o0] ASI_PNF, %o3 /* Load */ +- +-4: retl /* CTI+IEU1 Group */ +- clr %o0 /* IEU0 */ +- +- .align 32 +-13: mov 0xff, %g6 /* IEU0 Group */ +-#ifdef EIGHTBIT_NOT_RARE +- andcc %g4, %g2, %g0 /* IEU1 */ +-#else +- andcc %g3, %g2, %g0 /* IEU1 */ +-#endif +- be,pt %xcc, 25f /* CTI */ +- addcc %g3, %g1, %o4 /* IEU1 Group */ +- +- srlx %g3, 32, %g3 /* IEU0 */ +- andcc %g3, %g2, %g0 /* IEU1 Group */ +- be,pt %xcc, 23f /* CTI */ +- sllx %g6, 56, %o5 /* IEU0 */ +- +- andcc %o4, %o5, %g0 /* IEU1 Group */ +- be,pn %xcc, 24f /* CTI */ +- sllx %g6, 48, %o5 /* IEU0 */ +- andcc %o4, %o5, %g0 /* IEU1 Group */ +- +- be,pn %xcc, 24f /* CTI */ +- sllx %g6, 40, %o5 /* IEU0 */ +- andcc %o4, %o5, %g0 /* IEU1 Group */ +- be,pn %xcc, 24f /* CTI */ +- +- sllx %g6, 32, %o5 /* IEU0 */ +- andcc %o4, %o5, %g0 /* IEU1 Group */ +- be,pn %xcc, 24f /* CTI */ +-23: sllx %g6, 24, %o5 /* IEU0 */ +- +- andcc %o4, %o5, %g0 /* IEU1 Group */ +- be,pn %icc, 24f /* CTI */ +- sllx %g6, 16, %o5 /* IEU0 */ +- andcc %o4, %o5, %g0 /* IEU1 Group */ +- +- be,pn %icc, 24f /* CTI */ +- sllx %g6, 8, %o5 /* IEU0 */ +- andcc %o4, %o5, %g0 /* IEU1 Group */ +- be,pn %icc, 24f /* CTI */ +- +- mov %g6, %o5 /* IEU0 */ +-25: cmp %o4, %o3 /* IEU1 Group */ +-5: mov -1, %o0 /* IEU0 */ +- retl /* CTI+IEU1 Group */ +- +- movgu %xcc, 1, %o0 /* Single Group */ +- +- .align 16 +-24: sub %o5, 1, %g6 /* IEU0 Group */ +- clr %o0 /* IEU1 */ +- or %o5, %g6, %o5 /* IEU0 Group */ +- andn %o4, %o5, %o4 /* IEU0 Group */ +- +- andn %o3, %o5, %o3 /* IEU1 */ +- cmp %o4, %o3 /* IEU1 Group */ +- movgu %xcc, 1, %o0 /* Single Group */ +- retl /* CTI+IEU1 Group */ +- +- movlu %xcc, -1, %o0 /* Single Group */ +-6: retl /* CTI+IEU1 Group */ +- mov %o4, %o0 /* IEU0 */ +- +- .align 16 +-7: ldub [%o0], %o2 /* Load */ +- add %o0, 1, %o0 /* IEU1 */ +- ldub [%o1], %o3 /* Load Group */ +- sllx %g1, 32, %g2 /* IEU0 */ +- +-8: add %o1, 1, %o1 /* IEU1 */ +- subcc %o2, %o3, %o4 /* IEU1 Group */ +- bne,pn %xcc, 6b /* CTI */ +- lduba [%o0] ASI_PNF, %o2 /* Load */ +- +- brz,pn %o3, 4b /* CTI+IEU1 Group */ +- lduba [%o1] ASI_PNF, %o3 /* Load */ +- andcc %o0, 7, %g0 /* IEU1 Group */ +- bne,a,pn %icc, 8b /* CTI */ +- +- add %o0, 1, %o0 /* IEU0 */ +- or %g1, %g2, %g1 /* IEU0 Group */ +- andcc %o1, 7, %g3 /* IEU1 */ +- be,a,pn %icc, 1b /* CTI */ +- +- ldxa [%o0] ASI_PNF, %o2 /* Load Group */ +-9: sllx %g3, 3, %g5 /* IEU0 */ +- mov 64, %o5 /* IEU1 */ +- sub %o1, %g3, %o1 /* IEU0 Group */ +- +- sub %o5, %g5, %o5 /* IEU1 */ +- ldxa [%o1] ASI_PNF, %g6 /* Load Group */ +- or %g1, %g2, %g1 /* IEU0 */ +- sub %o1, %o0, %o1 /* IEU1 */ +- +- sllx %g1, 7, %g2 /* IEU0 Group */ +- add %o1, 8, %o1 /* IEU1 */ +- /* %g1 = 0101010101010101 +- * %g2 = 8080808080800880 +- * %g5 = number of bits to shift left +- * %o5 = number of bits to shift right */ +-10: sllx %g6, %g5, %o3 /* IEU0 Group */ +- ldxa [%o1 + %o0] ASI_PNF, %g6 /* Load */ +- +-11: srlx %g6, %o5, %o4 /* IEU0 Group */ +- ldxa [%o0] ASI_PNF, %o2 /* Load */ +- or %o3, %o4, %o3 /* IEU1 */ +- add %o0, 8, %o0 /* IEU0 Group */ +- +- subcc %o2, %o3, %g0 /* IEU1 */ +-#ifdef EIGHTBIT_NOT_RARE +- sub %o2, %g1, %g3 /* IEU0 Group */ +- bne,pn %xcc, 13b /* CTI */ +- andn %g3, %o2, %g4 /* IEU0 Group */ +- +- andcc %g4, %g2, %g0 /* IEU1 Group */ +- be,pt %xcc, 10b /* CTI */ +- srlx %g4, 32, %g4 /* IEU0 */ +- andcc %g4, %g2, %g0 /* IEU1 Group */ +-#else +- bne,pn %xcc, 13b /* CTI */ +- sub %o2, %g1, %g3 /* IEU0 Group */ +- andcc %g3, %g2, %g0 /* IEU1 Group */ +- +- be,pt %xcc, 10b /* CTI */ +- srlx %g3, 32, %g3 /* IEU0 */ +- andcc %g3, %g2, %g0 /* IEU1 Group */ +-#endif +- be,pt %xcc, 12f /* CTI */ +- +- srlx %o2, 56, %g3 /* IEU0 */ +- andcc %g3, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4b /* CTI */ +- srlx %o2, 48, %g3 /* IEU0 */ +- +- andcc %g3, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4b /* CTI */ +- srlx %o2, 40, %g3 /* IEU0 */ +- andcc %g3, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 4b /* CTI */ +- srlx %o2, 32, %g3 /* IEU0 */ +- andcc %g3, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4b /* CTI */ +- +-12: srlx %o2, 24, %g3 /* IEU0 */ +- andcc %g3, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4b /* CTI */ +- srlx %o2, 16, %g3 /* IEU0 */ +- +- andcc %g3, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4b /* CTI */ +- srlx %o2, 8, %g3 /* IEU0 */ +- andcc %g3, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 4b /* CTI */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4b /* CTI */ +- sllx %g6, %g5, %o3 /* IEU0 */ +- +- ba,pt %xcc, 11b /* CTI Group */ +- ldxa [%o1 + %o0] ASI_PNF, %g6 /* Load */ +-END(strcmp) +-libc_hidden_def(strcmp) +diff --git a/libc/string/sparc/sparc64/strcpy.S b/libc/string/sparc/sparc64/strcpy.S +deleted file mode 100644 +index 28799e4..0000000 +--- a/libc/string/sparc/sparc64/strcpy.S ++++ /dev/null +@@ -1,244 +0,0 @@ +-/* Copy SRC to DEST returning DEST. +- For SPARC v9. +- Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jan Vondrak <jvon4518@ss1000.ms.mff.cuni.cz> and +- Jakub Jelinek <jj@ultra.linux.cz>. +- +- 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 <asm/asi.h> +-#ifndef XCC +- .register %g2, #scratch +- .register %g3, #scratch +- .register %g6, #scratch +-#endif +- +- /* Normally, this uses +- ((xword - 0x0101010101010101) & 0x8080808080808080) test +- to find out if any byte in xword could be zero. This is fast, but +- also gives false alarm for any byte in range 0x81-0xff. It does +- not matter for correctness, as if this test tells us there could +- be some zero byte, we check it byte by byte, but if bytes with +- high bits set are common in the strings, then this will give poor +- performance. You can #define EIGHTBIT_NOT_RARE and the algorithm +- will use one tick slower, but more precise test +- ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), +- which does not give any false alarms (but if some bits are set, +- one cannot assume from it which bytes are zero and which are not). +- It is yet to be measured, what is the correct default for glibc +- in these days for an average user. +- */ +- +- .text +- .align 32 +-ENTRY(strcpy) +- sethi %hi(0x01010101), %g1 /* IEU0 Group */ +- mov %o0, %g6 /* IEU1 */ +- or %g1, %lo(0x01010101), %g1 /* IEU0 Group */ +- andcc %o0, 7, %g0 /* IEU1 */ +- +- sllx %g1, 32, %g2 /* IEU0 Group */ +- bne,pn %icc, 12f /* CTI */ +- andcc %o1, 7, %g3 /* IEU1 */ +- or %g1, %g2, %g1 /* IEU0 Group */ +- +- bne,pn %icc, 14f /* CTI */ +- sllx %g1, 7, %g2 /* IEU0 Group */ +-1: ldx [%o1], %o3 /* Load */ +- add %o1, 8, %o1 /* IEU1 */ +- +-2: mov %o3, %g3 /* IEU0 Group */ +-3: sub %o3, %g1, %o2 /* IEU1 */ +- ldxa [%o1] ASI_PNF, %o3 /* Load */ +-#ifdef EIGHTBIT_NOT_RARE +- andn %o2, %g3, %o2 /* IEU0 Group */ +-#endif +- add %o0, 8, %o0 /* IEU0 Group */ +- +- andcc %o2, %g2, %g0 /* IEU1 */ +- add %o1, 8, %o1 /* IEU0 Group */ +- be,a,pt %xcc, 2b /* CTI */ +- stx %g3, [%o0 - 8] /* Store */ +- +- srlx %g3, 56, %g5 /* IEU0 Group */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 11f /* CTI */ +- srlx %g3, 48, %g4 /* IEU0 */ +- +- andcc %g4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 10f /* CTI */ +- srlx %g3, 40, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 9f /* CTI */ +- srlx %g3, 32, %g4 /* IEU0 */ +- andcc %g4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 8f /* CTI */ +- +- srlx %g3, 24, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 7f /* CTI */ +- srlx %g3, 16, %g4 /* IEU0 */ +- +- andcc %g4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 6f /* CTI */ +- srlx %g3, 8, %g5 /* IEU0 */ +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 5f /* CTI */ +- sub %o3, %g1, %o2 /* IEU0 */ +- stx %g3, [%o0 - 8] /* Store Group */ +- andcc %g3, 0xff, %g0 /* IEU1 */ +- +- bne,pt %icc, 3b /* CTI */ +- mov %o3, %g3 /* IEU0 Group */ +-4: retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +- +- .align 16 +-5: stb %g5, [%o0 - 2] /* Store Group */ +- srlx %g3, 16, %g4 /* IEU0 */ +-6: sth %g4, [%o0 - 4] /* Store Group */ +- srlx %g3, 32, %g4 /* IEU0 */ +- +- stw %g4, [%o0 - 8] /* Store Group */ +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +-7: stb %g5, [%o0 - 4] /* Store Group */ +- +- srlx %g3, 32, %g4 /* IEU0 */ +-8: stw %g4, [%o0 - 8] /* Store Group */ +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +- +-9: stb %g5, [%o0 - 6] /* Store Group */ +- srlx %g3, 48, %g4 /* IEU0 */ +-10: sth %g4, [%o0 - 8] /* Store Group */ +- retl /* CTI+IEU1 Group */ +- +- mov %g6, %o0 /* IEU0 */ +-11: stb %g5, [%o0 - 8] /* Store Group */ +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +- +-12: or %g1, %g2, %g1 /* IEU0 Group */ +- ldub [%o1], %o3 /* Load */ +- sllx %g1, 7, %g2 /* IEU0 Group */ +- stb %o3, [%o0] /* Store Group */ +- +-13: add %o0, 1, %o0 /* IEU0 */ +- add %o1, 1, %o1 /* IEU1 */ +- andcc %o3, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 4b /* CTI */ +- +- lduba [%o1] ASI_PNF, %o3 /* Load */ +- andcc %o0, 7, %g0 /* IEU1 Group */ +- bne,a,pt %icc, 13b /* CTI */ +- stb %o3, [%o0] /* Store */ +- +- andcc %o1, 7, %g3 /* IEU1 Group */ +- be,a,pt %icc, 1b /* CTI */ +- ldx [%o1], %o3 /* Load */ +-14: orcc %g0, 64, %g4 /* IEU1 Group */ +- +- sllx %g3, 3, %g5 /* IEU0 */ +- sub %o1, %g3, %o1 /* IEU0 Group */ +- sub %g4, %g5, %g4 /* IEU1 */ +- /* %g1 = 0101010101010101 * +- * %g2 = 8080808080808080 * +- * %g3 = source alignment * +- * %g5 = number of bits to shift left * +- * %g4 = number of bits to shift right */ +- ldxa [%o1] ASI_PNF, %o5 /* Load Group */ +- +- addcc %o1, 8, %o1 /* IEU1 */ +-15: sllx %o5, %g5, %o3 /* IEU0 Group */ +- ldxa [%o1] ASI_PNF, %o5 /* Load */ +- srlx %o5, %g4, %o4 /* IEU0 Group */ +- +- add %o0, 8, %o0 /* IEU1 */ +- or %o3, %o4, %o3 /* IEU0 Group */ +- add %o1, 8, %o1 /* IEU1 */ +- sub %o3, %g1, %o4 /* IEU0 Group */ +- +-#ifdef EIGHTBIT_NOT_RARE +- andn %o4, %o3, %o4 /* IEU0 Group */ +-#endif +- andcc %o4, %g2, %g0 /* IEU1 Group */ +- be,a,pt %xcc, 15b /* CTI */ +- stx %o3, [%o0 - 8] /* Store */ +- srlx %o3, 56, %o4 /* IEU0 Group */ +- +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 22f /* CTI */ +- srlx %o3, 48, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 21f /* CTI */ +- srlx %o3, 40, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 20f /* CTI */ +- +- srlx %o3, 32, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 19f /* CTI */ +- srlx %o3, 24, %o4 /* IEU0 */ +- +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 18f /* CTI */ +- srlx %o3, 16, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 17f /* CTI */ +- srlx %o3, 8, %o4 /* IEU0 */ +- andcc %o4, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 16f /* CTI */ +- +- andcc %o3, 0xff, %g0 /* IEU1 Group */ +- bne,pn %icc, 15b /* CTI */ +- stx %o3, [%o0 - 8] /* Store */ +- retl /* CTI+IEU1 Group */ +- +- mov %g6, %o0 /* IEU0 */ +- +- .align 16 +-16: srlx %o3, 8, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 2] /* Store */ +-17: srlx %o3, 16, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 3] /* Store */ +- +-18: srlx %o3, 24, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 4] /* Store */ +-19: srlx %o3, 32, %o4 /* IEU0 Group */ +- stw %o4, [%o0 - 8] /* Store */ +- +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +- nop +- nop +- +-20: srlx %o3, 40, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 6] /* Store */ +-21: srlx %o3, 48, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 7] /* Store */ +- +-22: srlx %o3, 56, %o4 /* IEU0 Group */ +- stb %o4, [%o0 - 8] /* Store */ +- retl /* CTI+IEU1 Group */ +- mov %g6, %o0 /* IEU0 */ +-END(strcpy) +- +-libc_hidden_def(strcpy) +diff --git a/libc/string/sparc/sparc64/strlen.S b/libc/string/sparc/sparc64/strlen.S +deleted file mode 100644 +index f58c1c2..0000000 +--- a/libc/string/sparc/sparc64/strlen.S ++++ /dev/null +@@ -1,172 +0,0 @@ +-/* Determine the length of a string. For SPARC v9. +- Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jan Vondrak <jvon4518@ss1000.ms.mff.cuni.cz> and +- Jakub Jelinek <jj@ultra.linux.cz>. +- +- 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 <asm/asi.h> +- +- /* Normally, this uses +- ((xword - 0x0101010101010101) & 0x8080808080808080) test +- to find out if any byte in xword could be zero. This is fast, but +- also gives false alarm for any byte in range 0x81-0xff. It does +- not matter for correctness, as if this test tells us there could +- be some zero byte, we check it byte by byte, but if bytes with +- high bits set are common in the strings, then this will give poor +- performance. You can #define EIGHTBIT_NOT_RARE and the algorithm +- will use one tick slower, but more precise test +- ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080), +- which does not give any false alarms (but if some bits are set, +- one cannot assume from it which bytes are zero and which are not). +- It is yet to be measured, what is the correct default for glibc +- in these days for an average user. +- */ +- +- .text +- .align 32 +-ENTRY(strlen) +- sethi %hi(0x01010101), %g1 /* IEU0 Group */ +- ldub [%o0], %o3 /* Load */ +- or %g1, %lo(0x01010101), %g1 /* IEU0 Group */ +- mov %o0, %o1 /* IEU1 */ +- +- sllx %g1, 32, %g4 /* IEU0 Group */ +- andcc %o0, 7, %g0 /* IEU1 */ +- or %g1, %g4, %g1 /* IEU0 Group */ +- brz,pn %o3, 13f /* CTI+IEU1 */ +- +- sllx %g1, 7, %g4 /* IEU0 Group */ +- bne,a,pn %icc, 15f /* CTI */ +- add %o0, 1, %o0 /* IEU1 */ +- /* %g1 = 0x0101010101010101 * +- * %g4 = 0x8080808080808080 * +- * %o0 = string pointer * +- * %o1 = start of string */ +-1: ldx [%o0], %o3 /* Load Group */ +- +- add %o0, 8, %o0 /* IEU1 */ +-2: sub %o3, %g1, %o2 /* IEU0 Group */ +-#ifdef EIGHTBIT_NOT_RARE +- andn %o2, %o3, %o5 /* IEU0 Group */ +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- andcc %o5, %g4, %g0 /* IEU1 Group */ +-#else +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- andcc %o2, %g4, %g0 /* IEU1 Group */ +-#endif +- +- be,pt %xcc, 2b /* CTI */ +- add %o0, 8, %o0 /* IEU0 */ +- addcc %o2, %g1, %g5 /* IEU1 Group */ +-#ifdef EIGHTBIT_NOT_RARE +- srlx %o5, 32, %o5 /* IEU0 */ +- +-3: andcc %o5, %g4, %g0 /* IEU1 Group */ +-#else +- srlx %o2, 32, %o2 /* IEU0 */ +- +-3: andcc %o2, %g4, %g0 /* IEU1 Group */ +-#endif +- be,pn %xcc, 4f /* CTI */ +- srlx %g5, 56, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 12f /* CTI */ +- srlx %g5, 48, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 11f /* CTI */ +- +- srlx %g5, 40, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 10f /* CTI */ +- srlx %g5, 32, %o2 /* IEU0 */ +- +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 9f /* CTI */ +-4: srlx %g5, 24, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- +- be,pn %icc, 8f /* CTI */ +- srlx %g5, 16, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 7f /* CTI */ +- +- srlx %g5, 8, %o2 /* IEU0 */ +- andcc %o2, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 6f /* CTI */ +- sub %o3, %g1, %o2 /* IEU0 */ +- +- andcc %g5, 0xff, %g0 /* IEU1 Group */ +- be,pn %icc, 5f /* CTI */ +- ldxa [%o0] ASI_PNF, %o3 /* Load */ +- andcc %o2, %g4, %g0 /* IEU1 Group */ +- +- be,pt %xcc, 2b /* CTI */ +- add %o0, 8, %o0 /* IEU0 */ +- addcc %o2, %g1, %g5 /* IEU1 Group */ +- ba,pt %xcc, 3b /* CTI */ +- +- srlx %o2, 32, %o2 /* IEU0 */ +-5: add %o0, -9, %o0 /* IEU0 Group */ +- retl /* CTI+IEU1 Group */ +- sub %o0, %o1, %o0 /* IEU0 */ +- +-6: add %o0, -10, %o0 /* IEU0 Group */ +- retl /* CTI+IEU1 Group */ +- sub %o0, %o1, %o0 /* IEU0 */ +-7: add %o0, -11, %o0 /* IEU0 Group */ +- +- retl /* CTI+IEU1 Group */ +- sub %o0, %o1, %o0 /* IEU0 */ +-8: add %o0, -12, %o0 /* IEU0 Group */ +- retl /* CTI+IEU1 Group */ +- +- sub %o0, %o1, %o0 /* IEU0 */ +-9: add %o0, -13, %o0 /* IEU0 Group */ +- retl /* CTI+IEU1 Group */ +- sub %o0, %o1, %o0 /* IEU0 */ +- +-10: add %o0, -14, %o0 /* IEU0 Group */ +- retl /* CTI+IEU1 Group */ +- sub %o0, %o1, %o0 /* IEU0 */ +-11: add %o0, -15, %o0 /* IEU0 Group */ +- +- retl /* CTI+IEU1 Group */ +- sub %o0, %o1, %o0 /* IEU0 */ +-12: add %o0, -16, %o0 /* IEU0 Group */ +- retl /* CTI+IEU1 Group */ +- +- sub %o0, %o1, %o0 /* IEU0 */ +-13: retl /* CTI+IEU1 Group */ +- mov 0, %o0 /* IEU0 */ +- nop +- +-15: ldub [%o0], %o3 /* Load Group */ +-16: andcc %o0, 7, %g0 /* IEU1 */ +- be,pn %icc, 1b /* CTI */ +- nop /* IEU0 Group */ +- +- add %o0, 1, %o0 /* IEU1 */ +- andcc %o3, 0xff, %g0 /* IEU1 Group */ +- bne,a,pt %icc, 16b /* CTI */ +- lduba [%o0] ASI_PNF, %o3 /* Load */ +- +- add %o0, -1, %o0 /* IEU0 Group */ +- retl /* CTI+IEU1 Group */ +- sub %o0, %o1, %o0 /* IEU0 */ +-END(strlen) +-libc_hidden_def(strlen) +diff --git a/libc/sysdeps/linux/sparc/bits/setjmp.h b/libc/sysdeps/linux/sparc/bits/setjmp.h +index 5ec4da5..26f6212 100644 +--- a/libc/sysdeps/linux/sparc/bits/setjmp.h ++++ b/libc/sysdeps/linux/sparc/bits/setjmp.h +@@ -25,37 +25,6 @@ + + #include <bits/wordsize.h> + +-#if 0 /*__WORDSIZE == 64*/ +- +-typedef struct __sparc64_jmp_buf +- { +- struct __sparc64_jmp_buf *uc_link; +- unsigned long uc_flags; +- unsigned long uc_sigmask; +- struct __sparc64_jmp_buf_mcontext +- { +- unsigned long mc_gregs[19]; +- unsigned long mc_fp; +- unsigned long mc_i7; +- struct __sparc64_jmp_buf_fpu +- { +- union +- { +- unsigned int sregs[32]; +- unsigned long dregs[32]; +- long double qregs[16]; +- } mcfpu_fpregs; +- unsigned long mcfpu_fprs; +- unsigned long mcfpu_gsr; +- void *mcfpu_fq; +- unsigned char mcfpu_qcnt; +- unsigned char mcfpu_qentsz; +- unsigned char mcfpu_enab; +- } mc_fpregs; +- } uc_mcontext; +- } __jmp_buf[1]; +-#else + typedef int __jmp_buf[3]; +-#endif + + #endif /* bits/setjmp.h */ +diff --git a/libc/sysdeps/linux/sparc/bits/sigcontext.h b/libc/sysdeps/linux/sparc/bits/sigcontext.h +index 9435485..251032f 100644 +--- a/libc/sysdeps/linux/sparc/bits/sigcontext.h ++++ b/libc/sysdeps/linux/sparc/bits/sigcontext.h +@@ -21,8 +21,6 @@ + + #include <bits/wordsize.h> + +-#if __WORDSIZE == 32 +- + /* It is quite hard to choose what to put here, because + Linux/sparc32 had at least 3 totally incompatible + signal stack layouts. +@@ -42,36 +40,3 @@ struct sigcontext + int si_mask; + }; + +-#else /* sparc64 */ +- +-typedef struct +- { +- unsigned int si_float_regs [64]; +- unsigned long si_fsr; +- unsigned long si_gsr; +- unsigned long si_fprs; +- } __siginfo_fpu_t; +- +-struct sigcontext +- { +- char sigc_info[128]; +- struct +- { +- unsigned long u_regs[16]; /* globals and ins */ +- unsigned long tstate; +- unsigned long tpc; +- unsigned long tnpc; +- unsigned int y; +- unsigned int fprs; +- } sigc_regs; +- __siginfo_fpu_t * sigc_fpu_save; +- struct +- { +- void * ss_sp; +- int ss_flags; +- unsigned long ss_size; +- } sigc_stack; +- unsigned long sigc_mask; +-}; +- +-#endif /* sparc64 */ +diff --git a/libc/sysdeps/linux/sparc/crt1.S b/libc/sysdeps/linux/sparc/crt1.S +index 25b5ee5..77e9147 100644 +--- a/libc/sysdeps/linux/sparc/crt1.S ++++ b/libc/sysdeps/linux/sparc/crt1.S +@@ -39,16 +39,9 @@ + #include <features.h> + #include <bits/wordsize.h> + +-/* macro out the 32 / 64 bit differences */ +-#if __WORDSIZE == 32 + # define STACK_BIAS 0 + # define ELE_SIZE 4 + # define LD ld +-#else +-# define STACK_BIAS 2047 /* see glibc/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h */ +-# define ELE_SIZE 8 +-# define LD ldx +-#endif + + .text + .align 4 +@@ -116,11 +109,7 @@ _start: + nop + + /* Die very horribly if exit returns. */ +-#if __WORDSIZE == 32 + unimp +-#else +- illtrap 0 +-#endif + + .size _start,.-_start + +diff --git a/libc/sysdeps/linux/sparc/jmpbuf-unwind.h b/libc/sysdeps/linux/sparc/jmpbuf-unwind.h +index 40303f0..eabfad8 100644 +--- a/libc/sysdeps/linux/sparc/jmpbuf-unwind.h ++++ b/libc/sysdeps/linux/sparc/jmpbuf-unwind.h +@@ -6,26 +6,8 @@ + #include <setjmp.h> + #include <jmpbuf-offsets.h> + +-#if __WORDSIZE == 64 +- +-/* Test if longjmp to JMPBUF would unwind the frame +- containing a local variable at ADDRESS. */ +-#define _JMPBUF_UNWINDS(jmpbuf, address) \ +- ((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_fp) +- +-#else +- + /* Test if longjmp to JMPBUF would unwind the frame + containing a local variable at ADDRESS. */ + #define _JMPBUF_UNWINDS(jmpbuf, address) \ + ((int) (address) < (jmpbuf)[JB_SP]) + +-#endif +- +-#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +-#if defined(__arch64__) +-#include "sparc64/jmpbuf-unwind.h" +-#else +-#include "sparc32/jmpbuf-unwind.h" +-#endif +-#endif +diff --git a/libc/sysdeps/linux/sparc/qp_ops.c b/libc/sysdeps/linux/sparc/qp_ops.c +index 123be53..97f98da 100644 +--- a/libc/sysdeps/linux/sparc/qp_ops.c ++++ b/libc/sysdeps/linux/sparc/qp_ops.c +@@ -1,5 +1,3 @@ +-/* XXX add ops from glibc sysdeps/sparc/sparc64/soft-fp */ +- + #include <stdio.h> + #include <stdlib.h> + +@@ -9,11 +7,7 @@ static void fakedef(void) + exit(-1); + } + +-#ifdef __sparc_v9__ +-# define fakedef(sym) strong_alias(fakedef, _Qp_##sym) +-#else + # define fakedef(sym) strong_alias(fakedef, _Q_##sym) +-#endif + + fakedef(fne) + fakedef(feq) +@@ -31,7 +25,6 @@ fakedef(qtos) + fakedef(stoq) + fakedef(itoq) + fakedef(add) +-#ifndef __sparc_v9__ + fakedef(qtou) + fakedef(utoq) + fakedef(cmp) +@@ -44,4 +37,3 @@ fakedef(qtoll) + fakedef(qtoull) + fakedef(sqrt) + fakedef(ulltoq) +-#endif +diff --git a/libc/sysdeps/linux/sparc/sparcv9/clone.S b/libc/sysdeps/linux/sparc/sparcv9/clone.S +deleted file mode 100644 +index 2ee62a0..0000000 +--- a/libc/sysdeps/linux/sparc/sparcv9/clone.S ++++ /dev/null +@@ -1,101 +0,0 @@ +-/* Copyright (C) 1997, 2000, 2007 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/>. */ +- +-/* clone() is even more special than fork() as it mucks with stacks +- and invokes a function in the right context after its all over. */ +- +-#include <asm/errno.h> +-#include <asm/unistd.h> +-#include <tcb-offsets.h> +-#include <sysdep.h> +- +-#define CLONE_VM 0x00000100 +-#define CLONE_THREAD 0x00010000 +- +-/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, +- pid_t *ptid, void *tls, pid_t *ctid); */ +- +- .register %g2,#scratch +- .register %g3,#scratch +- +- .text +- +-ENTRY (__clone) +- save %sp, -192, %sp +- cfi_def_cfa_register(%fp) +- cfi_window_save +- cfi_register(%o7, %i7) +- +- /* sanity check arguments */ +- brz,pn %i0, 99f /* fn non-NULL? */ +- mov %i0, %g2 +- brz,pn %i1, 99f /* child_stack non-NULL? */ +- mov %i2, %o0 /* clone flags */ +- +- /* The child_stack is the top of the stack, allocate one +- whole stack frame from that as this is what the kernel +- expects. Also, subtract STACK_BIAS. */ +- sub %i1, 192 + 0x7ff, %o1 +- mov %i3, %g3 +- mov %i2, %g4 +- +- mov %i4,%o2 /* PTID */ +- mov %i5,%o3 /* TLS */ +- ldx [%fp+0x7ff+176],%o4 /* CTID */ +- +- /* Do the system call */ +- set __NR_clone, %g1 +- ta 0x6d +- bcs,pn %xcc, 98f +- nop +- brnz,pn %o1, __thread_start +- nop +- jmpl %i7 + 8, %g0 +- restore %o0, %g0, %o0 +-99: mov EINVAL, %o0 +-98: call HIDDEN_JUMPTARGET(__errno_location) +- mov %o0, %i0 +- st %i0, [%o0] +- jmpl %i7 + 8, %g0 +- restore %g0,-1,%o0 +-END(__clone) +- +- .type __thread_start,@function +-__thread_start: +-#ifdef RESET_PID +- sethi %hi(CLONE_THREAD), %l0 +- andcc %g4, %l0, %g0 +- bne,pt %icc, 1f +- andcc %g4, CLONE_VM, %g0 +- bne,a,pn %icc, 2f +- mov -1,%o0 +- set __NR_getpid,%g1 +- ta 0x6d +-2: st %o0,[%g7 + PID] +- st %o0,[%g7 + TID] +-1: +-#endif +- mov %g0, %fp /* terminate backtrace */ +- call %g2 +- mov %g3,%o0 +- call HIDDEN_JUMPTARGET(_exit),0 +- nop +- +- .size __thread_start, .-__thread_start +- +-weak_alias (__clone, clone) +diff --git a/libc/sysdeps/linux/sparc/sparcv9/rem.S b/libc/sysdeps/linux/sparc/sparcv9/rem.S +deleted file mode 100644 +index 1474e32..0000000 +--- a/libc/sysdeps/linux/sparc/sparcv9/rem.S ++++ /dev/null +@@ -1,20 +0,0 @@ +-/* +- * Sparc v9 has divide. +- * As divx takes 68 cycles and sdivcc only 36, +- * we use sdivcc eventhough it is deprecated. +- */ +- +- .text +- .align 32 +-ENTRY(.rem) +- +- sra %o0, 31, %o2 +- wr %o2, 0, %y +- sdivcc %o0, %o1, %o2 +- xnor %o2, %g0, %o3 +- movvs %icc, %o3, %o2 +- smul %o2, %o1, %o2 +- retl +- sub %o0, %o2, %o0 +- +-END(.rem) +diff --git a/libc/sysdeps/linux/sparc/sparcv9/sdiv.S b/libc/sysdeps/linux/sparc/sparcv9/sdiv.S +deleted file mode 100644 +index 45535bb..0000000 +--- a/libc/sysdeps/linux/sparc/sparcv9/sdiv.S ++++ /dev/null +@@ -1,18 +0,0 @@ +-/* +- * Sparc v9 has divide. +- * As divx takes 68 cycles and sdivcc only 36, +- * we use sdivcc eventhough it is deprecated. +- */ +- +- .text +- .align 32 +-ENTRY(.div) +- +- sra %o0, 31, %o2 +- wr %o2, 0, %y +- sdivcc %o0, %o1, %o0 +- xnor %o0, %g0, %o2 +- retl +- movvs %icc, %o2, %o0 +- +-END(.div) +diff --git a/libc/sysdeps/linux/sparc/sparcv9/udiv.S b/libc/sysdeps/linux/sparc/sparcv9/udiv.S +deleted file mode 100644 +index 303f29b..0000000 +--- a/libc/sysdeps/linux/sparc/sparcv9/udiv.S ++++ /dev/null +@@ -1,15 +0,0 @@ +-/* +- * Sparc v9 has divide. +- * As divx takes 68 cycles and udiv only 37, +- * we use udiv eventhough it is deprecated. +- */ +- +- .text +- .align 32 +-ENTRY(.udiv) +- +- wr %g0, 0, %y +- retl +- udiv %o0, %o1, %o0 +- +-END(.udiv) +diff --git a/libc/sysdeps/linux/sparc/sparcv9/umul.S b/libc/sysdeps/linux/sparc/sparcv9/umul.S +deleted file mode 100644 +index e65e4b9..0000000 +--- a/libc/sysdeps/linux/sparc/sparcv9/umul.S ++++ /dev/null +@@ -1,15 +0,0 @@ +-/* +- * Sparc v9 has multiply. +- */ +- +- .text +- .align 32 +-ENTRY(.umul) +- +- srl %o0, 0, %o0 +- srl %o1, 0, %o1 +- mulx %o0, %o1, %o0 +- retl +- srlx %o0, 32, %o1 +- +-END(.umul) +diff --git a/libc/sysdeps/linux/sparc/sparcv9/urem.S b/libc/sysdeps/linux/sparc/sparcv9/urem.S +deleted file mode 100644 +index 9354269..0000000 +--- a/libc/sysdeps/linux/sparc/sparcv9/urem.S ++++ /dev/null +@@ -1,17 +0,0 @@ +-/* +- * Sparc v9 has divide. +- * As divx takes 68 cycles and udiv only 37, +- * we use udiv eventhough it is deprecated. +- */ +- +- .text +- .align 32 +-ENTRY(.urem) +- +- wr %g0, 0, %y +- udiv %o0, %o1, %o2 +- umul %o2, %o1, %o2 +- retl +- sub %o0, %o2, %o0 +- +-END(.urem) +diff --git a/libc/sysdeps/linux/sparc/sys/procfs.h b/libc/sysdeps/linux/sparc/sys/procfs.h +index 37d6a61..edbd5a5 100644 +--- a/libc/sysdeps/linux/sparc/sys/procfs.h ++++ b/libc/sysdeps/linux/sparc/sys/procfs.h +@@ -32,20 +32,6 @@ + + __BEGIN_DECLS + +-#if __WORDSIZE == 64 +- +-#define ELF_NGREG 36 +- +-typedef struct +- { +- unsigned long pr_regs[32]; +- unsigned long pr_fsr; +- unsigned long pr_gsr; +- unsigned long pr_fprs; +- } elf_fpregset_t; +- +-#else /* sparc32 */ +- + #define ELF_NGREG 38 + + typedef struct +@@ -63,8 +49,6 @@ typedef struct + unsigned int pr_q[64]; + } elf_fpregset_t; + +-#endif /* sparc32 */ +- + typedef unsigned long elf_greg_t; + typedef elf_greg_t elf_gregset_t[ELF_NGREG]; + +@@ -110,13 +94,8 @@ struct elf_prpsinfo + char pr_zomb; /* Zombie. */ + char pr_nice; /* Nice val. */ + unsigned long int pr_flag; /* Flags. */ +-#if __WORDSIZE == 64 +- unsigned int pr_uid; +- unsigned int pr_gid; +-#else + unsigned short int pr_uid; + unsigned short int pr_gid; +-#endif + int pr_pid, pr_ppid, pr_pgrp, pr_sid; + /* Lots missing */ + char pr_fname[16]; /* Filename of executable. */ +@@ -138,73 +117,6 @@ typedef __pid_t lwpid_t; + typedef struct elf_prstatus prstatus_t; + typedef struct elf_prpsinfo prpsinfo_t; + +-#if __WORDSIZE == 64 +- +-/* Provide 32-bit variants so that BFD can read 32-bit +- core files. */ +-#define ELF_NGREG32 38 +-typedef struct +- { +- union +- { +- unsigned int pr_regs[32]; +- double pr_dregs[16]; +- } pr_fr; +- unsigned int __unused; +- unsigned int pr_fsr; +- unsigned char pr_qcnt; +- unsigned char pr_q_entrysize; +- unsigned char pr_en; +- unsigned int pr_q[64]; +- } elf_fpregset_t32; +- +-typedef unsigned int elf_greg_t32; +-typedef elf_greg_t32 elf_gregset_t32[ELF_NGREG32]; +- +-struct elf_prstatus32 +- { +- struct elf_siginfo pr_info; /* Info associated with signal. */ +- short int pr_cursig; /* Current signal. */ +- unsigned int pr_sigpend; /* Set of pending signals. */ +- unsigned int pr_sighold; /* Set of held signals. */ +- __pid_t pr_pid; +- __pid_t pr_ppid; +- __pid_t pr_pgrp; +- __pid_t pr_sid; +- struct +- { +- int tv_sec, tv_usec; +- } pr_utime, /* User time. */ +- pr_stime, /* System time. */ +- pr_cutime, /* Cumulative user time. */ +- pr_cstime; /* Cumulative system time. */ +- elf_gregset_t32 pr_reg; /* GP registers. */ +- int pr_fpvalid; /* True if math copro being used. */ +- }; +- +-struct elf_prpsinfo32 +- { +- char pr_state; /* Numeric process state. */ +- char pr_sname; /* Char for pr_state. */ +- char pr_zomb; /* Zombie. */ +- char pr_nice; /* Nice val. */ +- unsigned int pr_flag; /* Flags. */ +- unsigned short int pr_uid; +- unsigned short int pr_gid; +- int pr_pid, pr_ppid, pr_pgrp, pr_sid; +- /* Lots missing */ +- char pr_fname[16]; /* Filename of executable. */ +- char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ +- }; +- +-typedef elf_gregset_t32 prgregset32_t; +-typedef elf_fpregset_t32 prfpregset32_t; +- +-typedef struct elf_prstatus32 prstatus32_t; +-typedef struct elf_prpsinfo32 prpsinfo32_t; +- +-#endif /* sparc64 */ +- + __END_DECLS + + #endif /* sys/procfs.h */ +diff --git a/libpthread/linuxthreads.old/sysdeps/sparc/pt-machine.h b/libpthread/linuxthreads.old/sysdeps/sparc/pt-machine.h +index ab90810..d502c75 100644 +--- a/libpthread/linuxthreads.old/sysdeps/sparc/pt-machine.h ++++ b/libpthread/linuxthreads.old/sysdeps/sparc/pt-machine.h +@@ -1,8 +1,82 @@ +-#include <features.h> +-#include <bits/wordsize.h> ++/* Machine-dependent pthreads configuration and inline functions. ++ sparc version. ++ Copyright (C) 1996-1998, 2000-2003 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Richard Henderson <rth@tamu.edu>. + +-#if __WORDSIZE == 32 +-# include "sparc32/pt-machine.h" +-#else +-# include "sparc64/pt-machine.h" ++ 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; see the file COPYING.LIB. If ++ not, see <http://www.gnu.org/licenses/>. */ ++ ++#ifndef _PT_MACHINE_H ++#define _PT_MACHINE_H 1 ++ ++#ifndef PT_EI ++# define PT_EI __extern_always_inline + #endif ++ ++extern long int testandset (int *spinlock); ++extern int __compare_and_swap (long int *p, long int oldval, long int newval); ++ ++/* Spinlock implementation; required. */ ++PT_EI long int ++testandset (int *spinlock) ++{ ++ int ret; ++ ++ __asm__ __volatile__("ldstub %1,%0" ++ : "=r"(ret), "=m"(*spinlock) ++ : "m"(*spinlock)); ++ ++ return ret; ++} ++ ++ ++/* Memory barrier; default is to do nothing */ ++#define MEMORY_BARRIER() __asm__ __volatile__("stbar" : : : "memory") ++ ++ ++/* Get some notion of the current stack. Need not be exactly the top ++ of the stack, just something somewhere in the current frame. */ ++#define CURRENT_STACK_FRAME (stack_pointer + (2 * 64)) ++register char *stack_pointer __asm__("%sp"); ++ ++ ++/* Registers %g6 and %g7 are reserved by the ABI for "system use". ++ %g7 is specified in the TLS ABI as thread pointer -- we do the same. */ ++struct _pthread_descr_struct; ++register struct _pthread_descr_struct *__thread_self __asm__("%g7"); ++ ++/* Return the thread descriptor for the current thread. */ ++#define THREAD_SELF __thread_self ++ ++/* Initialize the thread-unique value. */ ++#define INIT_THREAD_SELF(descr, nr) (__thread_self = (descr)) ++ ++/* Access to data in the thread descriptor is easy. */ ++#define THREAD_GETMEM(descr, member) \ ++ ((void) sizeof (descr), THREAD_SELF->member) ++#define THREAD_GETMEM_NC(descr, member) \ ++ ((void) sizeof (descr), THREAD_SELF->member) ++#define THREAD_SETMEM(descr, member, value) \ ++ ((void) sizeof (descr), THREAD_SELF->member = (value)) ++#define THREAD_SETMEM_NC(descr, member, value) \ ++ ((void) sizeof (descr), THREAD_SELF->member = (value)) ++ ++/* We want the OS to assign stack addresses. */ ++#define FLOATING_STACKS 1 ++ ++/* Maximum size of the stack if the rlimit is unlimited. */ ++#define ARCH_STACK_MAX_SIZE 8*1024*1024 ++ ++#endif /* pt-machine.h */ +diff --git a/libpthread/linuxthreads.old/sysdeps/sparc/sparc32/pt-machine.h b/libpthread/linuxthreads.old/sysdeps/sparc/sparc32/pt-machine.h +deleted file mode 100644 +index d502c75..0000000 +--- a/libpthread/linuxthreads.old/sysdeps/sparc/sparc32/pt-machine.h ++++ /dev/null +@@ -1,82 +0,0 @@ +-/* Machine-dependent pthreads configuration and inline functions. +- sparc version. +- Copyright (C) 1996-1998, 2000-2003 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; see the file COPYING.LIB. If +- not, see <http://www.gnu.org/licenses/>. */ +- +-#ifndef _PT_MACHINE_H +-#define _PT_MACHINE_H 1 +- +-#ifndef PT_EI +-# define PT_EI __extern_always_inline +-#endif +- +-extern long int testandset (int *spinlock); +-extern int __compare_and_swap (long int *p, long int oldval, long int newval); +- +-/* Spinlock implementation; required. */ +-PT_EI long int +-testandset (int *spinlock) +-{ +- int ret; +- +- __asm__ __volatile__("ldstub %1,%0" +- : "=r"(ret), "=m"(*spinlock) +- : "m"(*spinlock)); +- +- return ret; +-} +- +- +-/* Memory barrier; default is to do nothing */ +-#define MEMORY_BARRIER() __asm__ __volatile__("stbar" : : : "memory") +- +- +-/* Get some notion of the current stack. Need not be exactly the top +- of the stack, just something somewhere in the current frame. */ +-#define CURRENT_STACK_FRAME (stack_pointer + (2 * 64)) +-register char *stack_pointer __asm__("%sp"); +- +- +-/* Registers %g6 and %g7 are reserved by the ABI for "system use". +- %g7 is specified in the TLS ABI as thread pointer -- we do the same. */ +-struct _pthread_descr_struct; +-register struct _pthread_descr_struct *__thread_self __asm__("%g7"); +- +-/* Return the thread descriptor for the current thread. */ +-#define THREAD_SELF __thread_self +- +-/* Initialize the thread-unique value. */ +-#define INIT_THREAD_SELF(descr, nr) (__thread_self = (descr)) +- +-/* Access to data in the thread descriptor is easy. */ +-#define THREAD_GETMEM(descr, member) \ +- ((void) sizeof (descr), THREAD_SELF->member) +-#define THREAD_GETMEM_NC(descr, member) \ +- ((void) sizeof (descr), THREAD_SELF->member) +-#define THREAD_SETMEM(descr, member, value) \ +- ((void) sizeof (descr), THREAD_SELF->member = (value)) +-#define THREAD_SETMEM_NC(descr, member, value) \ +- ((void) sizeof (descr), THREAD_SELF->member = (value)) +- +-/* We want the OS to assign stack addresses. */ +-#define FLOATING_STACKS 1 +- +-/* Maximum size of the stack if the rlimit is unlimited. */ +-#define ARCH_STACK_MAX_SIZE 8*1024*1024 +- +-#endif /* pt-machine.h */ +diff --git a/libpthread/linuxthreads.old/sysdeps/sparc/sparc64/pt-machine.h b/libpthread/linuxthreads.old/sysdeps/sparc/sparc64/pt-machine.h +deleted file mode 100644 +index e3c73d9..0000000 +--- a/libpthread/linuxthreads.old/sysdeps/sparc/sparc64/pt-machine.h ++++ /dev/null +@@ -1,104 +0,0 @@ +-/* Machine-dependent pthreads configuration and inline functions. +- Sparc v9 version. +- Copyright (C) 1997-2002, 2003 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; see the file COPYING.LIB. If +- not, see <http://www.gnu.org/licenses/>. */ +- +-#ifndef _PT_MACHINE_H +-#define _PT_MACHINE_H 1 +- +-#ifndef PT_EI +-# define PT_EI __extern_always_inline +-#endif +- +-extern long int testandset (int *spinlock); +-extern int __compare_and_swap (long int *p, long int oldval, long int newval); +- +-/* Spinlock implementation; required. */ +-PT_EI long int +-testandset (int *spinlock) +-{ +- int ret; +- +- __asm__ __volatile__("ldstub %1,%0" +- : "=r" (ret), "=m" (*spinlock) : "m" (*spinlock)); +- +- return ret; +-} +- +- +-/* Memory barrier; default is to do nothing */ +-#define MEMORY_BARRIER() \ +- __asm__ __volatile__("membar #LoadLoad | #LoadStore | #StoreLoad | #StoreStore" : : : "memory") +-/* Read barrier. */ +-#define READ_MEMORY_BARRIER() \ +- __asm__ __volatile__("membar #LoadLoad | #LoadStore" : : : "memory") +-/* Write barrier. */ +-#define WRITE_MEMORY_BARRIER() \ +- __asm__ __volatile__("membar #StoreLoad | #StoreStore" : : : "memory") +- +- +-/* Get some notion of the current stack. Need not be exactly the top +- of the stack, just something somewhere in the current frame. */ +-#define CURRENT_STACK_FRAME (stack_pointer + (2 * 128)) +-register char *stack_pointer __asm__ ("%sp"); +- +- +-/* Registers %g6 and %g7 are reserved by the ABI for "system use". The +- TLS ABI specifies %g7 as the thread pointer. */ +-struct _pthread_descr_struct; +-register struct _pthread_descr_struct *__thread_self __asm__ ("%g7"); +- +-/* Return the thread descriptor for the current thread. */ +-#define THREAD_SELF __thread_self +- +-/* Initialize the thread-unique value. */ +-#define INIT_THREAD_SELF(descr, nr) (__thread_self = (descr)) +- +- +-/* Compare-and-swap for semaphores. */ +- +-#define HAS_COMPARE_AND_SWAP +-PT_EI int +-__compare_and_swap (long int *p, long int oldval, long int newval) +-{ +- long int readval; +- +- __asm__ __volatile__ ("casx [%4], %2, %0" +- : "=r"(readval), "=m"(*p) +- : "r"(oldval), "m"(*p), "r"(p), "0"(newval)); +- MEMORY_BARRIER(); +- return readval == oldval; +-} +- +-/* Access to data in the thread descriptor is easy. */ +-#define THREAD_GETMEM(descr, member) \ +- ((void) sizeof (descr), THREAD_SELF->member) +-#define THREAD_GETMEM_NC(descr, member) \ +- ((void) sizeof (descr), THREAD_SELF->member) +-#define THREAD_SETMEM(descr, member, value) \ +- ((void) sizeof (descr), THREAD_SELF->member = (value)) +-#define THREAD_SETMEM_NC(descr, member, value) \ +- ((void) sizeof (descr), THREAD_SELF->member = (value)) +- +-/* We want the OS to assign stack addresses. */ +-#define FLOATING_STACKS 1 +- +-/* Maximum size of the stack if the rlimit is unlimited. */ +-#define ARCH_STACK_MAX_SIZE 32*1024*1024 +- +-#endif /* pt-machine.h */ +diff --git a/libpthread/linuxthreads/sysdeps/sparc/pspinlock.c b/libpthread/linuxthreads/sysdeps/sparc/pspinlock.c +index 72a9af5..4de152b 100644 +--- a/libpthread/linuxthreads/sysdeps/sparc/pspinlock.c ++++ b/libpthread/linuxthreads/sysdeps/sparc/pspinlock.c +@@ -1,14 +1,87 @@ +-#include <features.h> +-#include <bits/wordsize.h> ++/* POSIX spinlock implementation. SPARC32 version. ++ Copyright (C) 2000 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. + +-#if __WORDSIZE == 32 ++ 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. + +-# if defined(__CONFIG_SPARC_V9B__) +-# include "sparc32/sparcv9b/pspinlock.c" +-# else +-# include "sparc32/pspinlock.c" +-# endif ++ The GNU C Library is distributed in the hope that 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. + +-#else +-# include "sparc64/pspinlock.c" +-#endif ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; see the file COPYING.LIB. If ++ not, see <http://www.gnu.org/licenses/>. */ ++ ++#include <errno.h> ++#include <pthread.h> ++#include "internals.h" ++ ++/* This implementation is similar to the one used in the Linux kernel. */ ++int ++__pthread_spin_lock (pthread_spinlock_t *lock) ++{ ++ __asm__ __volatile__ ++ ("1: ldstub [%0], %%g2\n" ++ " orcc %%g2, 0x0, %%g0\n" ++ " bne,a 2f\n" ++ " ldub [%0], %%g2\n" ++ ".subsection 2\n" ++ "2: orcc %%g2, 0x0, %%g0\n" ++ " bne,a 2b\n" ++ " ldub [%0], %%g2\n" ++ " b,a 1b\n" ++ ".previous" ++ : /* no outputs */ ++ : "r" (lock) ++ : "g2", "memory", "cc"); ++ return 0; ++} ++weak_alias (__pthread_spin_lock, pthread_spin_lock) ++ ++ ++int ++__pthread_spin_trylock (pthread_spinlock_t *lock) ++{ ++ int result; ++ __asm__ __volatile__ ++ ("ldstub [%1], %0" ++ : "=r" (result) ++ : "r" (lock) ++ : "memory"); ++ return result == 0 ? 0 : EBUSY; ++} ++weak_alias (__pthread_spin_trylock, pthread_spin_trylock) ++ ++ ++int ++__pthread_spin_unlock (pthread_spinlock_t *lock) ++{ ++ *lock = 0; ++ return 0; ++} ++weak_alias (__pthread_spin_unlock, pthread_spin_unlock) ++ ++ ++int ++__pthread_spin_init (pthread_spinlock_t *lock, int pshared) ++{ ++ /* We can ignore the `pshared' parameter. Since we are busy-waiting ++ all processes which can access the memory location `lock' points ++ to can use the spinlock. */ ++ *lock = 0; ++ return 0; ++} ++weak_alias (__pthread_spin_init, pthread_spin_init) ++ ++ ++int ++__pthread_spin_destroy (pthread_spinlock_t *lock) ++{ ++ /* Nothing to do. */ ++ return 0; ++} ++weak_alias (__pthread_spin_destroy, pthread_spin_destroy) +diff --git a/libpthread/linuxthreads/sysdeps/sparc/pt-machine.h b/libpthread/linuxthreads/sysdeps/sparc/pt-machine.h +index ab90810..d502c75 100644 +--- a/libpthread/linuxthreads/sysdeps/sparc/pt-machine.h ++++ b/libpthread/linuxthreads/sysdeps/sparc/pt-machine.h +@@ -1,8 +1,82 @@ +-#include <features.h> +-#include <bits/wordsize.h> ++/* Machine-dependent pthreads configuration and inline functions. ++ sparc version. ++ Copyright (C) 1996-1998, 2000-2003 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Richard Henderson <rth@tamu.edu>. + +-#if __WORDSIZE == 32 +-# include "sparc32/pt-machine.h" +-#else +-# include "sparc64/pt-machine.h" ++ 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; see the file COPYING.LIB. If ++ not, see <http://www.gnu.org/licenses/>. */ ++ ++#ifndef _PT_MACHINE_H ++#define _PT_MACHINE_H 1 ++ ++#ifndef PT_EI ++# define PT_EI __extern_always_inline + #endif ++ ++extern long int testandset (int *spinlock); ++extern int __compare_and_swap (long int *p, long int oldval, long int newval); ++ ++/* Spinlock implementation; required. */ ++PT_EI long int ++testandset (int *spinlock) ++{ ++ int ret; ++ ++ __asm__ __volatile__("ldstub %1,%0" ++ : "=r"(ret), "=m"(*spinlock) ++ : "m"(*spinlock)); ++ ++ return ret; ++} ++ ++ ++/* Memory barrier; default is to do nothing */ ++#define MEMORY_BARRIER() __asm__ __volatile__("stbar" : : : "memory") ++ ++ ++/* Get some notion of the current stack. Need not be exactly the top ++ of the stack, just something somewhere in the current frame. */ ++#define CURRENT_STACK_FRAME (stack_pointer + (2 * 64)) ++register char *stack_pointer __asm__("%sp"); ++ ++ ++/* Registers %g6 and %g7 are reserved by the ABI for "system use". ++ %g7 is specified in the TLS ABI as thread pointer -- we do the same. */ ++struct _pthread_descr_struct; ++register struct _pthread_descr_struct *__thread_self __asm__("%g7"); ++ ++/* Return the thread descriptor for the current thread. */ ++#define THREAD_SELF __thread_self ++ ++/* Initialize the thread-unique value. */ ++#define INIT_THREAD_SELF(descr, nr) (__thread_self = (descr)) ++ ++/* Access to data in the thread descriptor is easy. */ ++#define THREAD_GETMEM(descr, member) \ ++ ((void) sizeof (descr), THREAD_SELF->member) ++#define THREAD_GETMEM_NC(descr, member) \ ++ ((void) sizeof (descr), THREAD_SELF->member) ++#define THREAD_SETMEM(descr, member, value) \ ++ ((void) sizeof (descr), THREAD_SELF->member = (value)) ++#define THREAD_SETMEM_NC(descr, member, value) \ ++ ((void) sizeof (descr), THREAD_SELF->member = (value)) ++ ++/* We want the OS to assign stack addresses. */ ++#define FLOATING_STACKS 1 ++ ++/* Maximum size of the stack if the rlimit is unlimited. */ ++#define ARCH_STACK_MAX_SIZE 8*1024*1024 ++ ++#endif /* pt-machine.h */ +diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c b/libpthread/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c +deleted file mode 100644 +index 4de152b..0000000 +--- a/libpthread/linuxthreads/sysdeps/sparc/sparc32/pspinlock.c ++++ /dev/null +@@ -1,87 +0,0 @@ +-/* POSIX spinlock implementation. SPARC32 version. +- Copyright (C) 2000 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- +- The GNU C Library is free software; you can redistribute it and/or +- modify it under the terms of the GNU 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; see the file COPYING.LIB. If +- not, see <http://www.gnu.org/licenses/>. */ +- +-#include <errno.h> +-#include <pthread.h> +-#include "internals.h" +- +-/* This implementation is similar to the one used in the Linux kernel. */ +-int +-__pthread_spin_lock (pthread_spinlock_t *lock) +-{ +- __asm__ __volatile__ +- ("1: ldstub [%0], %%g2\n" +- " orcc %%g2, 0x0, %%g0\n" +- " bne,a 2f\n" +- " ldub [%0], %%g2\n" +- ".subsection 2\n" +- "2: orcc %%g2, 0x0, %%g0\n" +- " bne,a 2b\n" +- " ldub [%0], %%g2\n" +- " b,a 1b\n" +- ".previous" +- : /* no outputs */ +- : "r" (lock) +- : "g2", "memory", "cc"); +- return 0; +-} +-weak_alias (__pthread_spin_lock, pthread_spin_lock) +- +- +-int +-__pthread_spin_trylock (pthread_spinlock_t *lock) +-{ +- int result; +- __asm__ __volatile__ +- ("ldstub [%1], %0" +- : "=r" (result) +- : "r" (lock) +- : "memory"); +- return result == 0 ? 0 : EBUSY; +-} +-weak_alias (__pthread_spin_trylock, pthread_spin_trylock) +- +- +-int +-__pthread_spin_unlock (pthread_spinlock_t *lock) +-{ +- *lock = 0; +- return 0; +-} +-weak_alias (__pthread_spin_unlock, pthread_spin_unlock) +- +- +-int +-__pthread_spin_init (pthread_spinlock_t *lock, int pshared) +-{ +- /* We can ignore the `pshared' parameter. Since we are busy-waiting +- all processes which can access the memory location `lock' points +- to can use the spinlock. */ +- *lock = 0; +- return 0; +-} +-weak_alias (__pthread_spin_init, pthread_spin_init) +- +- +-int +-__pthread_spin_destroy (pthread_spinlock_t *lock) +-{ +- /* Nothing to do. */ +- return 0; +-} +-weak_alias (__pthread_spin_destroy, pthread_spin_destroy) +diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h b/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h +deleted file mode 100644 +index d502c75..0000000 +--- a/libpthread/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h ++++ /dev/null +@@ -1,82 +0,0 @@ +-/* Machine-dependent pthreads configuration and inline functions. +- sparc version. +- Copyright (C) 1996-1998, 2000-2003 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; see the file COPYING.LIB. If +- not, see <http://www.gnu.org/licenses/>. */ +- +-#ifndef _PT_MACHINE_H +-#define _PT_MACHINE_H 1 +- +-#ifndef PT_EI +-# define PT_EI __extern_always_inline +-#endif +- +-extern long int testandset (int *spinlock); +-extern int __compare_and_swap (long int *p, long int oldval, long int newval); +- +-/* Spinlock implementation; required. */ +-PT_EI long int +-testandset (int *spinlock) +-{ +- int ret; +- +- __asm__ __volatile__("ldstub %1,%0" +- : "=r"(ret), "=m"(*spinlock) +- : "m"(*spinlock)); +- +- return ret; +-} +- +- +-/* Memory barrier; default is to do nothing */ +-#define MEMORY_BARRIER() __asm__ __volatile__("stbar" : : : "memory") +- +- +-/* Get some notion of the current stack. Need not be exactly the top +- of the stack, just something somewhere in the current frame. */ +-#define CURRENT_STACK_FRAME (stack_pointer + (2 * 64)) +-register char *stack_pointer __asm__("%sp"); +- +- +-/* Registers %g6 and %g7 are reserved by the ABI for "system use". +- %g7 is specified in the TLS ABI as thread pointer -- we do the same. */ +-struct _pthread_descr_struct; +-register struct _pthread_descr_struct *__thread_self __asm__("%g7"); +- +-/* Return the thread descriptor for the current thread. */ +-#define THREAD_SELF __thread_self +- +-/* Initialize the thread-unique value. */ +-#define INIT_THREAD_SELF(descr, nr) (__thread_self = (descr)) +- +-/* Access to data in the thread descriptor is easy. */ +-#define THREAD_GETMEM(descr, member) \ +- ((void) sizeof (descr), THREAD_SELF->member) +-#define THREAD_GETMEM_NC(descr, member) \ +- ((void) sizeof (descr), THREAD_SELF->member) +-#define THREAD_SETMEM(descr, member, value) \ +- ((void) sizeof (descr), THREAD_SELF->member = (value)) +-#define THREAD_SETMEM_NC(descr, member, value) \ +- ((void) sizeof (descr), THREAD_SELF->member = (value)) +- +-/* We want the OS to assign stack addresses. */ +-#define FLOATING_STACKS 1 +- +-/* Maximum size of the stack if the rlimit is unlimited. */ +-#define ARCH_STACK_MAX_SIZE 8*1024*1024 +- +-#endif /* pt-machine.h */ +diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c b/libpthread/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c +deleted file mode 100644 +index fb49ca3..0000000 +--- a/libpthread/linuxthreads/sysdeps/sparc/sparc32/sparcv9/pspinlock.c ++++ /dev/null +@@ -1,93 +0,0 @@ +-/* POSIX spinlock implementation. SPARC v9 version. +- Copyright (C) 2000 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- +- The GNU C Library is free software; you can redistribute it and/or +- modify it under the terms of the GNU 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; see the file COPYING.LIB. If +- not, see <http://www.gnu.org/licenses/>. */ +- +-#include <errno.h> +-#include <pthread.h> +-#include "internals.h" +- +- +-/* This implementation is similar to the one used in the Linux kernel. */ +-int +-__pthread_spin_lock (pthread_spinlock_t *lock) +-{ +- __asm__ __volatile__ +- ("1: ldstub [%0], %%g2\n" +- " brnz,pn %%g2, 2f\n" +- " membar #StoreLoad | #StoreStore\n" +- ".subsection 2\n" +- "2: ldub [%0], %%g2\n" +- " brnz,pt %%g2, 2b\n" +- " membar #LoadLoad\n" +- " b,a,pt %%xcc, 1b\n" +- ".previous" +- : /* no outputs */ +- : "r" (lock) +- : "g2", "memory"); +- return 0; +-} +-weak_alias (__pthread_spin_lock, pthread_spin_lock) +- +- +-int +-__pthread_spin_trylock (pthread_spinlock_t *lock) +-{ +- int result; +- __asm__ __volatile__ +- ("ldstub [%1], %0\n" +- "membar #StoreLoad | #StoreStore" +- : "=r" (result) +- : "r" (lock) +- : "memory"); +- return result == 0 ? 0 : EBUSY; +-} +-weak_alias (__pthread_spin_trylock, pthread_spin_trylock) +- +- +-int +-__pthread_spin_unlock (pthread_spinlock_t *lock) +-{ +- __asm__ __volatile__ +- ("membar #StoreStore | #LoadStore\n" +- "stb %%g0, [%0]" +- : +- : "r" (lock) +- : "memory"); +- return 0; +-} +-weak_alias (__pthread_spin_unlock, pthread_spin_unlock) +- +- +-int +-__pthread_spin_init (pthread_spinlock_t *lock, int pshared) +-{ +- /* We can ignore the `pshared' parameter. Since we are busy-waiting +- all processes which can access the memory location `lock' points +- to can use the spinlock. */ +- *lock = 0; +- return 0; +-} +-weak_alias (__pthread_spin_init, pthread_spin_init) +- +- +-int +-__pthread_spin_destroy (pthread_spinlock_t *lock) +-{ +- /* Nothing to do. */ +- return 0; +-} +-weak_alias (__pthread_spin_destroy, pthread_spin_destroy) +diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c b/libpthread/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c +deleted file mode 100644 +index 743cb77..0000000 +--- a/libpthread/linuxthreads/sysdeps/sparc/sparc64/pspinlock.c ++++ /dev/null +@@ -1,92 +0,0 @@ +-/* POSIX spinlock implementation. SPARC64 version. +- Copyright (C) 2000 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- +- The GNU C Library is free software; you can redistribute it and/or +- modify it under the terms of the GNU 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; see the file COPYING.LIB. If +- not, see <http://www.gnu.org/licenses/>. */ +- +-#include <errno.h> +-#include <pthread.h> +-#include "internals.h" +- +-/* This implementation is similar to the one used in the Linux kernel. */ +-int +-__pthread_spin_lock (pthread_spinlock_t *lock) +-{ +- __asm__ __volatile__ +- ("1: ldstub [%0], %%g5\n" +- " brnz,pn %%g5, 2f\n" +- " membar #StoreLoad | #StoreStore\n" +- ".subsection 2\n" +- "2: ldub [%0], %%g5\n" +- " brnz,pt %%g5, 2b\n" +- " membar #LoadLoad\n" +- " b,a,pt %%xcc, 1b\n" +- ".previous" +- : /* no outputs */ +- : "r" (lock) +- : "g5", "memory"); +- return 0; +-} +-weak_alias (__pthread_spin_lock, pthread_spin_lock) +- +- +-int +-__pthread_spin_trylock (pthread_spinlock_t *lock) +-{ +- int result; +- __asm__ __volatile__ +- ("ldstub [%1], %0\n" +- "membar #StoreLoad | #StoreStore" +- : "=r" (result) +- : "r" (lock) +- : "memory"); +- return result == 0 ? 0 : EBUSY; +-} +-weak_alias (__pthread_spin_trylock, pthread_spin_trylock) +- +- +-int +-__pthread_spin_unlock (pthread_spinlock_t *lock) +-{ +- __asm__ __volatile__ +- ("membar #StoreStore | #LoadStore\n" +- "stb %%g0, [%0]" +- : +- : "r" (lock) +- : "memory"); +- return 0; +-} +-weak_alias (__pthread_spin_unlock, pthread_spin_unlock) +- +- +-int +-__pthread_spin_init (pthread_spinlock_t *lock, int pshared) +-{ +- /* We can ignore the `pshared' parameter. Since we are busy-waiting +- all processes which can access the memory location `lock' points +- to can use the spinlock. */ +- *lock = 0; +- return 0; +-} +-weak_alias (__pthread_spin_init, pthread_spin_init) +- +- +-int +-__pthread_spin_destroy (pthread_spinlock_t *lock) +-{ +- /* Nothing to do. */ +- return 0; +-} +-weak_alias (__pthread_spin_destroy, pthread_spin_destroy) +diff --git a/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h b/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h +deleted file mode 100644 +index e3c73d9..0000000 +--- a/libpthread/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h ++++ /dev/null +@@ -1,104 +0,0 @@ +-/* Machine-dependent pthreads configuration and inline functions. +- Sparc v9 version. +- Copyright (C) 1997-2002, 2003 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; see the file COPYING.LIB. If +- not, see <http://www.gnu.org/licenses/>. */ +- +-#ifndef _PT_MACHINE_H +-#define _PT_MACHINE_H 1 +- +-#ifndef PT_EI +-# define PT_EI __extern_always_inline +-#endif +- +-extern long int testandset (int *spinlock); +-extern int __compare_and_swap (long int *p, long int oldval, long int newval); +- +-/* Spinlock implementation; required. */ +-PT_EI long int +-testandset (int *spinlock) +-{ +- int ret; +- +- __asm__ __volatile__("ldstub %1,%0" +- : "=r" (ret), "=m" (*spinlock) : "m" (*spinlock)); +- +- return ret; +-} +- +- +-/* Memory barrier; default is to do nothing */ +-#define MEMORY_BARRIER() \ +- __asm__ __volatile__("membar #LoadLoad | #LoadStore | #StoreLoad | #StoreStore" : : : "memory") +-/* Read barrier. */ +-#define READ_MEMORY_BARRIER() \ +- __asm__ __volatile__("membar #LoadLoad | #LoadStore" : : : "memory") +-/* Write barrier. */ +-#define WRITE_MEMORY_BARRIER() \ +- __asm__ __volatile__("membar #StoreLoad | #StoreStore" : : : "memory") +- +- +-/* Get some notion of the current stack. Need not be exactly the top +- of the stack, just something somewhere in the current frame. */ +-#define CURRENT_STACK_FRAME (stack_pointer + (2 * 128)) +-register char *stack_pointer __asm__ ("%sp"); +- +- +-/* Registers %g6 and %g7 are reserved by the ABI for "system use". The +- TLS ABI specifies %g7 as the thread pointer. */ +-struct _pthread_descr_struct; +-register struct _pthread_descr_struct *__thread_self __asm__ ("%g7"); +- +-/* Return the thread descriptor for the current thread. */ +-#define THREAD_SELF __thread_self +- +-/* Initialize the thread-unique value. */ +-#define INIT_THREAD_SELF(descr, nr) (__thread_self = (descr)) +- +- +-/* Compare-and-swap for semaphores. */ +- +-#define HAS_COMPARE_AND_SWAP +-PT_EI int +-__compare_and_swap (long int *p, long int oldval, long int newval) +-{ +- long int readval; +- +- __asm__ __volatile__ ("casx [%4], %2, %0" +- : "=r"(readval), "=m"(*p) +- : "r"(oldval), "m"(*p), "r"(p), "0"(newval)); +- MEMORY_BARRIER(); +- return readval == oldval; +-} +- +-/* Access to data in the thread descriptor is easy. */ +-#define THREAD_GETMEM(descr, member) \ +- ((void) sizeof (descr), THREAD_SELF->member) +-#define THREAD_GETMEM_NC(descr, member) \ +- ((void) sizeof (descr), THREAD_SELF->member) +-#define THREAD_SETMEM(descr, member, value) \ +- ((void) sizeof (descr), THREAD_SELF->member = (value)) +-#define THREAD_SETMEM_NC(descr, member, value) \ +- ((void) sizeof (descr), THREAD_SELF->member = (value)) +- +-/* We want the OS to assign stack addresses. */ +-#define FLOATING_STACKS 1 +- +-/* Maximum size of the stack if the rlimit is unlimited. */ +-#define ARCH_STACK_MAX_SIZE 32*1024*1024 +- +-#endif /* pt-machine.h */ +diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h +deleted file mode 100644 +index bd9bb0d..0000000 +--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h ++++ /dev/null +@@ -1,100 +0,0 @@ +-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. +- +- 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 <tls.h> +-#ifndef __ASSEMBLER__ +-# include <linuxthreads/internals.h> +-#endif +- +-#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt +- +-# undef PSEUDO +-# define PSEUDO(name, syscall_name, args) \ +- .text; \ +-ENTRY(name) \ +- ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1; \ +- cmp %g1, 0; \ +- bne 1f; \ +- mov SYS_ify(syscall_name), %g1; \ +- ta 0x10; \ +- bcs __syscall_error_handler; \ +- nop; \ +- .subsection 2; \ +-1: save %sp, -96, %sp; \ +- CENABLE; \ +- nop; \ +- mov %o0, %l0; \ +- COPY_ARGS_##args \ +- mov SYS_ify(syscall_name), %g1; \ +- ta 0x10; \ +- bcs __syscall_error_handler2; \ +- mov %o0, %l1; \ +- CDISABLE; \ +- mov %l0, %o0; \ +- jmpl %i7 + 8, %g0; \ +- restore %g0, %l1, %o0; \ +- .previous; \ +- SYSCALL_ERROR_HANDLER \ +- SYSCALL_ERROR_HANDLER2 +- +-#define SYSCALL_ERROR_HANDLER2 \ +-SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler2) \ +- .global __errno_location; \ +- .type __errno_location,@function; \ +- CDISABLE; \ +- mov %l0, %o0; \ +- call __errno_location; \ +- nop; \ +- st %l1, [%o0]; \ +- jmpl %i7 + 8, %g0; \ +- restore %g0, -1, %o0; \ +- .previous; +- +-# ifdef IS_IN_libpthread +-# define CENABLE call __pthread_enable_asynccancel +-# define CDISABLE call __pthread_disable_asynccancel +-# elif !defined NOT_IN_libc +-# define CENABLE call __libc_enable_asynccancel +-# define CDISABLE call __libc_disable_asynccancel +-# else +-# define CENABLE call __librt_enable_asynccancel +-# define CDISABLE call __librt_disable_asynccancel +-# endif +- +-#define COPY_ARGS_0 /* Nothing */ +-#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0; +-#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1; +-#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2; +-#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3; +-#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4; +-#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5; +- +-# ifndef __ASSEMBLER__ +-# define SINGLE_THREAD_P \ +- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ +- p_header.data.multiple_threads) == 0, 1) +-# else +-# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1 +-# endif +- +-#elif !defined __ASSEMBLER__ +- +-/* This code should never be used but we define it anyhow. */ +-# define SINGLE_THREAD_P (1) +- +-#endif +diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S +deleted file mode 100644 +index ab2286e..0000000 +--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S ++++ /dev/null +@@ -1,64 +0,0 @@ +-/* Copyright (C) 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. +- +- 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-cancel.h> +- +- .text +-#ifdef SHARED +-.LLGETPC0: +- retl +- add %o7, %o0, %o0 +-#endif +-ENTRY(__vfork) +-#ifdef SHARED +- mov %o7, %o1 +- sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %o0 +- call .LLGETPC0 +- add %o0, %lo(_GLOBAL_OFFSET_TABLE_+4), %o0 +- sethi %hi(__libc_pthread_functions), %o2 +- mov %o1, %o7 +- or %o2, %lo(__libc_pthread_functions), %o2 +- ld [%o0 + %o2], %o2 +- ld [%o2], %o2 +- cmp %o2, 0 +-#else +- .weak pthread_create +- sethi %hi(pthread_create), %o0 +- orcc %o0, %lo(pthread_create), %o0 +-#endif +-#if defined SHARED && !defined BROKEN_SPARC_WDISP22 +- bne HIDDEN_JUMPTARGET(fork) +-#else +- bne 1f +-#endif +- mov __NR_vfork, %g1 +- ta 0x10 +- bcs __syscall_error_handler +- nop +- sub %o1, 1, %o1 +- retl +- and %o0, %o1, %o0 +-#if !defined SHARED || defined BROKEN_SPARC_WDISP22 +-1: mov %o7, %g1 +- call HIDDEN_JUMPTARGET(fork) +- mov %g1, %o7 +-#endif +- SYSCALL_ERROR_HANDLER +-PSEUDO_END (__vfork) +-libc_hidden_def (__vfork) +-weak_alias (__vfork, vfork) +diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c +deleted file mode 100644 +index d57283a..0000000 +--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c ++++ /dev/null +@@ -1 +0,0 @@ +-#include "../../ia64/pt-sigsuspend.c" +diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h +deleted file mode 100644 +index 9972ee4..0000000 +--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h ++++ /dev/null +@@ -1,99 +0,0 @@ +-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. +- +- 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 <tls.h> +-#ifndef __ASSEMBLER__ +-# include <linuxthreads/internals.h> +-#endif +- +-#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt +- +-# undef PSEUDO +-# define PSEUDO(name, syscall_name, args) \ +- .text; \ +-ENTRY(name) \ +- ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1; \ +- brnz,pn %g1, 1f; \ +- mov SYS_ify(syscall_name), %g1; \ +- ta 0x6d; \ +- bcs,pn %xcc, __syscall_error_handler; \ +- nop; \ +- .subsection 2; \ +-1: save %sp, -192, %sp; \ +- CENABLE; \ +- nop; \ +- mov %o0, %l0; \ +- COPY_ARGS_##args \ +- mov SYS_ify(syscall_name), %g1; \ +- ta 0x6d; \ +- bcs,pn %xcc, __syscall_error_handler2; \ +- mov %o0, %l1; \ +- CDISABLE; \ +- mov %l0, %o0; \ +- jmpl %i7 + 8, %g0; \ +- restore %g0, %l1, %o0; \ +- .previous; \ +- SYSCALL_ERROR_HANDLER \ +- SYSCALL_ERROR_HANDLER2 +- +-#define SYSCALL_ERROR_HANDLER2 \ +-SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler2) \ +- .global __errno_location; \ +- .type __errno_location,@function; \ +- CDISABLE; \ +- mov %l0, %o0; \ +- call __errno_location; \ +- nop; \ +- st %l1, [%o0]; \ +- jmpl %i7 + 8, %g0; \ +- restore %g0, -1, %o0; \ +- .previous; +- +-# ifdef IS_IN_libpthread +-# define CENABLE call __pthread_enable_asynccancel +-# define CDISABLE call __pthread_disable_asynccancel +-# elif !defined NOT_IN_libc +-# define CENABLE call __libc_enable_asynccancel +-# define CDISABLE call __libc_disable_asynccancel +-# else +-# define CENABLE call __librt_enable_asynccancel +-# define CDISABLE call __librt_disable_asynccancel +-# endif +- +-#define COPY_ARGS_0 /* Nothing */ +-#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0; +-#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1; +-#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2; +-#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3; +-#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4; +-#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5; +- +-# ifndef __ASSEMBLER__ +-# define SINGLE_THREAD_P \ +- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ +- p_header.data.multiple_threads) == 0, 1) +-# else +-# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1 +-# endif +- +-#elif !defined __ASSEMBLER__ +- +-/* This code should never be used but we define it anyhow. */ +-# define SINGLE_THREAD_P (1) +- +-#endif +diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S +deleted file mode 100644 +index 3ff16b1..0000000 +--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S ++++ /dev/null +@@ -1,63 +0,0 @@ +-/* Copyright (C) 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. +- +- 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-cancel.h> +- +-#ifdef SHARED +-.LLGETPC0: +- retl +- add %o7, %o0, %o0 +-#endif +-ENTRY(__vfork) +-#ifdef SHARED +- mov %o7, %o1 +- sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %o0 +- call .LLGETPC0 +- add %o0, %lo(_GLOBAL_OFFSET_TABLE_+4), %o0 +- sethi %hi(__libc_pthread_functions), %o2 +- mov %o1, %o7 +- or %o2, %lo(__libc_pthread_functions), %o2 +- ldx [%o0 + %o2], %o2 +- ldx [%o2], %o0 +-#else +- .weak pthread_create +- sethi %hi(pthread_create), %o0 +- or %o0, %lo(pthread_create), %o0 +-#endif +-#if defined SHARED && !defined BROKEN_SPARC_WDISP22 +- cmp %o0, 0 +- bne HIDDEN_JUMPTARGET(fork) +-#else +- brnz,pn %o0, 1f +-#endif +- mov __NR_vfork, %g1 +- ta 0x6d +- bcs,pn %xcc, __syscall_error_handler +- nop +- sub %o1, 1, %o1 +- retl +- and %o0, %o1, %o0 +-#if !defined SHARED || defined BROKEN_SPARC_WDISP22 +-1: mov %o7, %g1 +- call HIDDEN_JUMPTARGET(fork) +- mov %g1, %o7 +-#endif +- SYSCALL_ERROR_HANDLER +-PSEUDO_END (__vfork) +-libc_hidden_def (__vfork) +-weak_alias (__vfork, vfork) +diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h +index fa656b3..bd9bb0d 100644 +--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h ++++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h +@@ -1,10 +1,100 @@ +-#ifndef SPARC_SYSDEP_CANCEL_H +-#define SPARC_SYSDEP_CANCEL_H ++/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. + +-#if defined(__arch64__) +-#include <sparc64/sysdep-cancel.h> +-#else +-#include <sparc32/sysdep-cancel.h> ++ 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 <tls.h> ++#ifndef __ASSEMBLER__ ++# include <linuxthreads/internals.h> + #endif + ++#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt ++ ++# undef PSEUDO ++# define PSEUDO(name, syscall_name, args) \ ++ .text; \ ++ENTRY(name) \ ++ ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1; \ ++ cmp %g1, 0; \ ++ bne 1f; \ ++ mov SYS_ify(syscall_name), %g1; \ ++ ta 0x10; \ ++ bcs __syscall_error_handler; \ ++ nop; \ ++ .subsection 2; \ ++1: save %sp, -96, %sp; \ ++ CENABLE; \ ++ nop; \ ++ mov %o0, %l0; \ ++ COPY_ARGS_##args \ ++ mov SYS_ify(syscall_name), %g1; \ ++ ta 0x10; \ ++ bcs __syscall_error_handler2; \ ++ mov %o0, %l1; \ ++ CDISABLE; \ ++ mov %l0, %o0; \ ++ jmpl %i7 + 8, %g0; \ ++ restore %g0, %l1, %o0; \ ++ .previous; \ ++ SYSCALL_ERROR_HANDLER \ ++ SYSCALL_ERROR_HANDLER2 ++ ++#define SYSCALL_ERROR_HANDLER2 \ ++SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler2) \ ++ .global __errno_location; \ ++ .type __errno_location,@function; \ ++ CDISABLE; \ ++ mov %l0, %o0; \ ++ call __errno_location; \ ++ nop; \ ++ st %l1, [%o0]; \ ++ jmpl %i7 + 8, %g0; \ ++ restore %g0, -1, %o0; \ ++ .previous; ++ ++# ifdef IS_IN_libpthread ++# define CENABLE call __pthread_enable_asynccancel ++# define CDISABLE call __pthread_disable_asynccancel ++# elif !defined NOT_IN_libc ++# define CENABLE call __libc_enable_asynccancel ++# define CDISABLE call __libc_disable_asynccancel ++# else ++# define CENABLE call __librt_enable_asynccancel ++# define CDISABLE call __librt_disable_asynccancel ++# endif ++ ++#define COPY_ARGS_0 /* Nothing */ ++#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0; ++#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1; ++#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2; ++#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3; ++#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4; ++#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5; ++ ++# ifndef __ASSEMBLER__ ++# define SINGLE_THREAD_P \ ++ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ ++ p_header.data.multiple_threads) == 0, 1) ++# else ++# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1 ++# endif ++ ++#elif !defined __ASSEMBLER__ ++ ++/* This code should never be used but we define it anyhow. */ ++# define SINGLE_THREAD_P (1) ++ + #endif +diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/vfork.S b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/vfork.S +new file mode 100644 +index 0000000..ab2286e +--- /dev/null ++++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/vfork.S +@@ -0,0 +1,64 @@ ++/* Copyright (C) 2003 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. ++ ++ 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-cancel.h> ++ ++ .text ++#ifdef SHARED ++.LLGETPC0: ++ retl ++ add %o7, %o0, %o0 ++#endif ++ENTRY(__vfork) ++#ifdef SHARED ++ mov %o7, %o1 ++ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %o0 ++ call .LLGETPC0 ++ add %o0, %lo(_GLOBAL_OFFSET_TABLE_+4), %o0 ++ sethi %hi(__libc_pthread_functions), %o2 ++ mov %o1, %o7 ++ or %o2, %lo(__libc_pthread_functions), %o2 ++ ld [%o0 + %o2], %o2 ++ ld [%o2], %o2 ++ cmp %o2, 0 ++#else ++ .weak pthread_create ++ sethi %hi(pthread_create), %o0 ++ orcc %o0, %lo(pthread_create), %o0 ++#endif ++#if defined SHARED && !defined BROKEN_SPARC_WDISP22 ++ bne HIDDEN_JUMPTARGET(fork) ++#else ++ bne 1f ++#endif ++ mov __NR_vfork, %g1 ++ ta 0x10 ++ bcs __syscall_error_handler ++ nop ++ sub %o1, 1, %o1 ++ retl ++ and %o0, %o1, %o0 ++#if !defined SHARED || defined BROKEN_SPARC_WDISP22 ++1: mov %o7, %g1 ++ call HIDDEN_JUMPTARGET(fork) ++ mov %g1, %o7 ++#endif ++ SYSCALL_ERROR_HANDLER ++PSEUDO_END (__vfork) ++libc_hidden_def (__vfork) ++weak_alias (__vfork, vfork) +diff --git a/libpthread/nptl/sysdeps/jmpbuf-unwind.h b/libpthread/nptl/sysdeps/jmpbuf-unwind.h +new file mode 100644 +index 0000000..2f64e7d +--- /dev/null ++++ b/libpthread/nptl/sysdeps/jmpbuf-unwind.h +@@ -0,0 +1,27 @@ ++/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. ++ ++ 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 <setjmp.h> ++#include <stdint.h> ++#include <unwind.h> ++ ++#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ ++ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) ++ ++#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ++ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj)) +diff --git a/libpthread/nptl/sysdeps/pthread_spin_lock.c b/libpthread/nptl/sysdeps/pthread_spin_lock.c +new file mode 100644 +index 0000000..2dfcd3c +--- /dev/null ++++ b/libpthread/nptl/sysdeps/pthread_spin_lock.c +@@ -0,0 +1,39 @@ ++/* Copyright (C) 2003 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. ++ ++ 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 "pthreadP.h" ++ ++int ++pthread_spin_lock (pthread_spinlock_t *lock) ++{ ++ __asm__ __volatile__ ++ ("1: ldstub [%0], %%g2\n" ++ " orcc %%g2, 0x0, %%g0\n" ++ " bne,a 2f\n" ++ " ldub [%0], %%g2\n" ++ ".subsection 2\n" ++ "2: orcc %%g2, 0x0, %%g0\n" ++ " bne,a 2b\n" ++ " ldub [%0], %%g2\n" ++ " b,a 1b\n" ++ ".previous" ++ : /* no outputs */ ++ : "r" (lock) ++ : "g2", "memory", "cc"); ++ return 0; ++} +diff --git a/libpthread/nptl/sysdeps/pthread_spin_trylock.c b/libpthread/nptl/sysdeps/pthread_spin_trylock.c +new file mode 100644 +index 0000000..c1b7b23 +--- /dev/null ++++ b/libpthread/nptl/sysdeps/pthread_spin_trylock.c +@@ -0,0 +1,28 @@ ++/* Copyright (C) 2003 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. ++ ++ 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 <errno.h> ++#include "pthreadP.h" ++ ++int ++pthread_spin_trylock (pthread_spinlock_t *lock) ++{ ++ int res; ++ __asm__ __volatile__ ("ldstub [%1], %0" : "=r" (res) : "r" (lock) : "memory"); ++ return res == 0 ? 0 : EBUSY; ++} +diff --git a/libpthread/nptl/sysdeps/pthreaddef.h b/libpthread/nptl/sysdeps/pthreaddef.h +new file mode 100644 +index 0000000..435fedc +--- /dev/null ++++ b/libpthread/nptl/sysdeps/pthreaddef.h +@@ -0,0 +1,39 @@ ++/* Copyright (C) 2003 Free Software 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/>. */ ++ ++/* Default stack size. */ ++#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) ++ ++/* Required stack pointer alignment at beginning. */ ++#define STACK_ALIGN 16 ++ ++/* Minimal stack size after allocating thread descriptor and guard size. */ ++#define MINIMAL_REST_STACK 2048 ++ ++/* Alignment requirement for TCB. */ ++#define TCB_ALIGNMENT 16 ++ ++ ++/* Location of current stack frame. */ ++#define CURRENT_STACK_FRAME (stack_pointer + (2 * 64)) ++register char *stack_pointer __asm__("%sp"); ++ ++/* XXX Until we have a better place keep the definitions here. */ ++ ++/* While there is no such syscall. */ ++#define __exit_thread_inline(val) \ ++ INLINE_SYSCALL (exit, 1, (val)) +diff --git a/libpthread/nptl/sysdeps/sparc/jmpbuf-unwind.h b/libpthread/nptl/sysdeps/sparc/jmpbuf-unwind.h +index 6cbb37b..2f64e7d 100644 +--- a/libpthread/nptl/sysdeps/sparc/jmpbuf-unwind.h ++++ b/libpthread/nptl/sysdeps/sparc/jmpbuf-unwind.h +@@ -1,5 +1,27 @@ +-#if defined(__arch64__) +-#include "sparc64/jmpbuf-unwind.h" +-#else +-#include "sparc32/jmpbuf-unwind.h" +-#endif ++/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. ++ ++ 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 <setjmp.h> ++#include <stdint.h> ++#include <unwind.h> ++ ++#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ ++ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) ++ ++#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ ++ ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj)) +diff --git a/libpthread/nptl/sysdeps/sparc/pthread_spin_lock.c b/libpthread/nptl/sysdeps/sparc/pthread_spin_lock.c +index dcc5ae2..2dfcd3c 100644 +--- a/libpthread/nptl/sysdeps/sparc/pthread_spin_lock.c ++++ b/libpthread/nptl/sysdeps/sparc/pthread_spin_lock.c +@@ -1,5 +1,39 @@ +-#if defined(__arch64__) +-#include "sparc64/pthread_spin_lock.c" +-#else +-#include "sparc32/pthread_spin_lock.c" +-#endif ++/* Copyright (C) 2003 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. ++ ++ 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 "pthreadP.h" ++ ++int ++pthread_spin_lock (pthread_spinlock_t *lock) ++{ ++ __asm__ __volatile__ ++ ("1: ldstub [%0], %%g2\n" ++ " orcc %%g2, 0x0, %%g0\n" ++ " bne,a 2f\n" ++ " ldub [%0], %%g2\n" ++ ".subsection 2\n" ++ "2: orcc %%g2, 0x0, %%g0\n" ++ " bne,a 2b\n" ++ " ldub [%0], %%g2\n" ++ " b,a 1b\n" ++ ".previous" ++ : /* no outputs */ ++ : "r" (lock) ++ : "g2", "memory", "cc"); ++ return 0; ++} +diff --git a/libpthread/nptl/sysdeps/sparc/pthread_spin_trylock.c b/libpthread/nptl/sysdeps/sparc/pthread_spin_trylock.c +index af63eec..c1b7b23 100644 +--- a/libpthread/nptl/sysdeps/sparc/pthread_spin_trylock.c ++++ b/libpthread/nptl/sysdeps/sparc/pthread_spin_trylock.c +@@ -1,5 +1,28 @@ +-#if defined(__arch64__) +-#include "sparc64/pthread_spin_trylock.c" +-#else +-#include "sparc32/pthread_spin_trylock.c" +-#endif ++/* Copyright (C) 2003 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. ++ ++ 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 <errno.h> ++#include "pthreadP.h" ++ ++int ++pthread_spin_trylock (pthread_spinlock_t *lock) ++{ ++ int res; ++ __asm__ __volatile__ ("ldstub [%1], %0" : "=r" (res) : "r" (lock) : "memory"); ++ return res == 0 ? 0 : EBUSY; ++} +diff --git a/libpthread/nptl/sysdeps/sparc/pthreaddef.h b/libpthread/nptl/sysdeps/sparc/pthreaddef.h +index d4695c4..435fedc 100644 +--- a/libpthread/nptl/sysdeps/sparc/pthreaddef.h ++++ b/libpthread/nptl/sysdeps/sparc/pthreaddef.h +@@ -1,5 +1,39 @@ +-#if defined(__arch64__) +-#include "sparc64/pthreaddef.h" +-#else +-#include "sparc32/pthreaddef.h" +-#endif ++/* Copyright (C) 2003 Free Software 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/>. */ ++ ++/* Default stack size. */ ++#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) ++ ++/* Required stack pointer alignment at beginning. */ ++#define STACK_ALIGN 16 ++ ++/* Minimal stack size after allocating thread descriptor and guard size. */ ++#define MINIMAL_REST_STACK 2048 ++ ++/* Alignment requirement for TCB. */ ++#define TCB_ALIGNMENT 16 ++ ++ ++/* Location of current stack frame. */ ++#define CURRENT_STACK_FRAME (stack_pointer + (2 * 64)) ++register char *stack_pointer __asm__("%sp"); ++ ++/* XXX Until we have a better place keep the definitions here. */ ++ ++/* While there is no such syscall. */ ++#define __exit_thread_inline(val) \ ++ INLINE_SYSCALL (exit, 1, (val)) +diff --git a/libpthread/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h b/libpthread/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h +deleted file mode 100644 +index 2f64e7d..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc32/jmpbuf-unwind.h ++++ /dev/null +@@ -1,27 +0,0 @@ +-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. +- +- 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 <setjmp.h> +-#include <stdint.h> +-#include <unwind.h> +- +-#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ +- _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) +- +-#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ +- ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj)) +diff --git a/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.c b/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.c +deleted file mode 100644 +index 2dfcd3c..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_lock.c ++++ /dev/null +@@ -1,39 +0,0 @@ +-/* Copyright (C) 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. +- +- 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 "pthreadP.h" +- +-int +-pthread_spin_lock (pthread_spinlock_t *lock) +-{ +- __asm__ __volatile__ +- ("1: ldstub [%0], %%g2\n" +- " orcc %%g2, 0x0, %%g0\n" +- " bne,a 2f\n" +- " ldub [%0], %%g2\n" +- ".subsection 2\n" +- "2: orcc %%g2, 0x0, %%g0\n" +- " bne,a 2b\n" +- " ldub [%0], %%g2\n" +- " b,a 1b\n" +- ".previous" +- : /* no outputs */ +- : "r" (lock) +- : "g2", "memory", "cc"); +- return 0; +-} +diff --git a/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_trylock.c b/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_trylock.c +deleted file mode 100644 +index c1b7b23..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc32/pthread_spin_trylock.c ++++ /dev/null +@@ -1,28 +0,0 @@ +-/* Copyright (C) 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. +- +- 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 <errno.h> +-#include "pthreadP.h" +- +-int +-pthread_spin_trylock (pthread_spinlock_t *lock) +-{ +- int res; +- __asm__ __volatile__ ("ldstub [%1], %0" : "=r" (res) : "r" (lock) : "memory"); +- return res == 0 ? 0 : EBUSY; +-} +diff --git a/libpthread/nptl/sysdeps/sparc/sparc32/pthreaddef.h b/libpthread/nptl/sysdeps/sparc/sparc32/pthreaddef.h +deleted file mode 100644 +index 435fedc..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc32/pthreaddef.h ++++ /dev/null +@@ -1,39 +0,0 @@ +-/* Copyright (C) 2003 Free Software 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/>. */ +- +-/* Default stack size. */ +-#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) +- +-/* Required stack pointer alignment at beginning. */ +-#define STACK_ALIGN 16 +- +-/* Minimal stack size after allocating thread descriptor and guard size. */ +-#define MINIMAL_REST_STACK 2048 +- +-/* Alignment requirement for TCB. */ +-#define TCB_ALIGNMENT 16 +- +- +-/* Location of current stack frame. */ +-#define CURRENT_STACK_FRAME (stack_pointer + (2 * 64)) +-register char *stack_pointer __asm__("%sp"); +- +-/* XXX Until we have a better place keep the definitions here. */ +- +-/* While there is no such syscall. */ +-#define __exit_thread_inline(val) \ +- INLINE_SYSCALL (exit, 1, (val)) +diff --git a/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.c b/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.c +deleted file mode 100644 +index 3d314be..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_lock.c ++++ /dev/null +@@ -1,38 +0,0 @@ +-/* Copyright (C) 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. +- +- 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 "pthreadP.h" +- +-int +-pthread_spin_lock (pthread_spinlock_t *lock) +-{ +- __asm__ __volatile__ +- ("1: ldstub [%0], %%g2\n" +- " brnz,pn %%g2, 2f\n" +- " membar #StoreLoad | #StoreStore\n" +- ".subsection 2\n" +- "2: ldub [%0], %%g2\n" +- " brnz,pt %%g2, 2b\n" +- " membar #LoadLoad\n" +- " b,a,pt %%xcc, 1b\n" +- ".previous" +- : /* no outputs */ +- : "r" (lock) +- : "g2", "memory"); +- return 0; +-} +diff --git a/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_trylock.c b/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_trylock.c +deleted file mode 100644 +index 3b20a21..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_trylock.c ++++ /dev/null +@@ -1 +0,0 @@ +-#include <sparc64/pthread_spin_trylock.c> +diff --git a/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_unlock.c b/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_unlock.c +deleted file mode 100644 +index 482cbe3..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc32/sparcv9/pthread_spin_unlock.c ++++ /dev/null +@@ -1 +0,0 @@ +-#include <sparc64/pthread_spin_unlock.c> +diff --git a/libpthread/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h b/libpthread/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h +deleted file mode 100644 +index 2f64e7d..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h ++++ /dev/null +@@ -1,27 +0,0 @@ +-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. +- +- 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 <setjmp.h> +-#include <stdint.h> +-#include <unwind.h> +- +-#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ +- _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) +- +-#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ +- ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[JB_SP] - (_adj)) +diff --git a/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.c b/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.c +deleted file mode 100644 +index 0235056..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_lock.c ++++ /dev/null +@@ -1,38 +0,0 @@ +-/* Copyright (C) 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. +- +- 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 "pthreadP.h" +- +-int +-pthread_spin_lock (pthread_spinlock_t *lock) +-{ +- __asm__ __volatile__ +- ("1: ldstub [%0], %%g5\n" +- " brnz,pn %%g5, 2f\n" +- " membar #StoreLoad | #StoreStore\n" +- ".subsection 2\n" +- "2: ldub [%0], %%g5\n" +- " brnz,pt %%g5, 2b\n" +- " membar #LoadLoad\n" +- " b,a,pt %%xcc, 1b\n" +- ".previous" +- : /* no outputs */ +- : "r" (lock) +- : "g5", "memory"); +- return 0; +-} +diff --git a/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_trylock.c b/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_trylock.c +deleted file mode 100644 +index b14621b..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_trylock.c ++++ /dev/null +@@ -1,33 +0,0 @@ +-/* Copyright (C) 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. +- +- 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 <errno.h> +-#include "pthreadP.h" +- +-int +-pthread_spin_trylock (pthread_spinlock_t *lock) +-{ +- int res; +- __asm__ __volatile__ +- ("ldstub [%1], %0\n" +- "membar #StoreLoad | #StoreStore" +- : "=r" (res) +- : "r" (lock) +- : "memory"); +- return res == 0 ? 0 : EBUSY; +-} +diff --git a/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_unlock.c b/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_unlock.c +deleted file mode 100644 +index a00fad3..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc64/pthread_spin_unlock.c ++++ /dev/null +@@ -1,29 +0,0 @@ +-/* pthread_spin_unlock -- unlock a spin lock. Generic version. +- Copyright (C) 2003 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. +- +- 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 "pthreadP.h" +-#include <atomic.h> +- +-int +-pthread_spin_unlock (pthread_spinlock_t *lock) +-{ +- __asm__ __volatile__ ("membar #StoreStore | #LoadStore"); +- *lock = 0; +- return 0; +-} +diff --git a/libpthread/nptl/sysdeps/sparc/sparc64/pthreaddef.h b/libpthread/nptl/sysdeps/sparc/sparc64/pthreaddef.h +deleted file mode 100644 +index 845f4bf..0000000 +--- a/libpthread/nptl/sysdeps/sparc/sparc64/pthreaddef.h ++++ /dev/null +@@ -1,39 +0,0 @@ +-/* Copyright (C) 2003 Free Software 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/>. */ +- +-/* Default stack size. */ +-#define ARCH_STACK_DEFAULT_SIZE (4 * 1024 * 1024) +- +-/* Required stack pointer alignment at beginning. */ +-#define STACK_ALIGN 16 +- +-/* Minimal stack size after allocating thread descriptor and guard size. */ +-#define MINIMAL_REST_STACK 4096 +- +-/* Alignment requirement for TCB. */ +-#define TCB_ALIGNMENT 16 +- +- +-/* Location of current stack frame. */ +-#define CURRENT_STACK_FRAME (stack_pointer + (2 * 128)) +-register char *stack_pointer __asm__("%sp"); +- +-/* XXX Until we have a better place keep the definitions here. */ +- +-/* While there is no such syscall. */ +-#define __exit_thread_inline(val) \ +- INLINE_SYSCALL (exit, 1, (val)) +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/clone.S +index dfc5e82..a6142aa 100644 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/clone.S ++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/clone.S +@@ -1,5 +1,2 @@ +-#if defined(__arch64__) +-#include "./sparc64/clone.S" +-#else +-#include "./sparc32/clone.S" +-#endif ++#define RESET_PID ++#include <libc/sysdeps/linux/sparc/clone.S> +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S +index e8705c5..37231a8 100644 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S ++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S +@@ -1,5 +1,44 @@ +-#if defined(__arch64__) +-#include "sparc64/pt-vfork.S" +-#else +-#include "sparc32/pt-vfork.S" +-#endif ++/* Copyright (C) 2004 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. ++ ++ 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> ++#include <tcb-offsets.h> ++ ++ .text ++ .globl __syscall_error ++ENTRY(__vfork) ++ ld [%g7 + PID], %o5 ++ sub %g0, %o5, %o4 ++ st %o4, [%g7 + PID] ++ ++ LOADSYSCALL(vfork) ++ ta 0x10 ++ bcc 2f ++ mov %o7, %g1 ++ st %o5, [%g7 + PID] ++ call __syscall_error ++ mov %g1, %o7 ++2: sub %o1, 1, %o1 ++ andcc %o0, %o1, %o0 ++ bne,a 1f ++ st %o5, [%g7 + PID] ++1: retl ++ nop ++END(__vfork) ++ ++weak_alias (__vfork, vfork) +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c +index 73eaa69..169f6e7 100644 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c ++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c +@@ -1 +1,93 @@ +-#include "sparc32/pthread_barrier_wait.c" ++/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. ++ ++ 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 <errno.h> ++#include <sysdep.h> ++#include <lowlevellock.h> ++#include <pthreadP.h> ++ ++/* Wait on barrier. */ ++int ++pthread_barrier_wait ( ++ pthread_barrier_t *barrier) ++{ ++ union sparc_pthread_barrier *ibarrier ++ = (union sparc_pthread_barrier *) barrier; ++ int result = 0; ++ int private = ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE; ++ ++ /* Make sure we are alone. */ ++ lll_lock (ibarrier->b.lock, private); ++ ++ /* One more arrival. */ ++ --ibarrier->b.left; ++ ++ /* Are these all? */ ++ if (ibarrier->b.left == 0) ++ { ++ /* Yes. Increment the event counter to avoid invalid wake-ups and ++ tell the current waiters that it is their turn. */ ++ ++ibarrier->b.curr_event; ++ ++ /* Wake up everybody. */ ++ lll_futex_wake (&ibarrier->b.curr_event, INT_MAX, private); ++ ++ /* This is the thread which finished the serialization. */ ++ result = PTHREAD_BARRIER_SERIAL_THREAD; ++ } ++ else ++ { ++ /* The number of the event we are waiting for. The barrier's event ++ number must be bumped before we continue. */ ++ unsigned int event = ibarrier->b.curr_event; ++ ++ /* Before suspending, make the barrier available to others. */ ++ lll_unlock (ibarrier->b.lock, private); ++ ++ /* Wait for the event counter of the barrier to change. */ ++ do ++ lll_futex_wait (&ibarrier->b.curr_event, event, private); ++ while (event == ibarrier->b.curr_event); ++ } ++ ++ /* Make sure the init_count is stored locally or in a register. */ ++ unsigned int init_count = ibarrier->b.init_count; ++ ++ /* If this was the last woken thread, unlock. */ ++ if (__atomic_is_v9 || ibarrier->s.pshared == 0) ++ { ++ if (atomic_increment_val (&ibarrier->b.left) == init_count) ++ /* We are done. */ ++ lll_unlock (ibarrier->b.lock, private); ++ } ++ else ++ { ++ unsigned int left; ++ /* Slightly more complicated. On pre-v9 CPUs, atomic_increment_val ++ is only atomic for threads within the same process, not for ++ multiple processes. */ ++ __sparc32_atomic_do_lock24 (&ibarrier->s.left_lock); ++ left = ++ibarrier->b.left; ++ __sparc32_atomic_do_unlock24 (&ibarrier->s.left_lock); ++ if (left == init_count) ++ /* We are done. */ ++ lll_unlock (ibarrier->b.lock, private); ++ } ++ ++ return result; ++} +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c +new file mode 100644 +index 0000000..8da4193 +--- /dev/null ++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c +@@ -0,0 +1,52 @@ ++/* sem_post -- post to a POSIX semaphore. SPARC version. ++ Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. ++ ++ 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 <errno.h> ++#include <sysdep.h> ++#include <lowlevellock.h> ++#include <internaltypes.h> ++#include <semaphore.h> ++ ++int ++sem_post (sem_t *sem) ++{ ++ struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; ++ int nr; ++ ++ if (__atomic_is_v9) ++ nr = atomic_increment_val (&isem->value); ++ else ++ { ++ __sparc32_atomic_do_lock24 (&isem->lock); ++ nr = ++(isem->value); ++ __sparc32_atomic_do_unlock24 (&isem->lock); ++ } ++ atomic_full_barrier (); ++ if (isem->nwaiters > 0) ++ { ++ int err = lll_futex_wake (&isem->value, 1, ++ isem->private ^ FUTEX_PRIVATE_FLAG); ++ if (__builtin_expect (err, 0) < 0) ++ { ++ __set_errno (-err); ++ return -1; ++ } ++ } ++ return 0; ++} +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c +new file mode 100644 +index 0000000..64c9abf +--- /dev/null ++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c +@@ -0,0 +1,147 @@ ++/* sem_timedwait -- wait on a semaphore. SPARC version. ++ Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. ++ ++ 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 <errno.h> ++#include <sysdep.h> ++#include <lowlevellock.h> ++#include <internaltypes.h> ++#include <semaphore.h> ++ ++#include <pthreadP.h> ++ ++ ++extern void __sem_wait_cleanup (void *arg) attribute_hidden; ++ ++ ++int ++sem_timedwait (sem_t *sem, const struct timespec *abstime) ++{ ++ struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; ++ int err; ++ int val; ++ ++ if (__atomic_is_v9) ++ val = atomic_decrement_if_positive (&isem->value); ++ else ++ { ++ __sparc32_atomic_do_lock24 (&isem->lock); ++ val = isem->value; ++ if (val > 0) ++ isem->value = val - 1; ++ __sparc32_atomic_do_unlock24 (&isem->lock); ++ } ++ ++ if (val > 0) ++ return 0; ++ ++ if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) ++ { ++ __set_errno (EINVAL); ++ return -1; ++ } ++ ++ if (__atomic_is_v9) ++ atomic_increment (&isem->nwaiters); ++ else ++ { ++ __sparc32_atomic_do_lock24 (&isem->lock); ++ isem->nwaiters++; ++ __sparc32_atomic_do_unlock24 (&isem->lock); ++ } ++ ++ pthread_cleanup_push (__sem_wait_cleanup, isem); ++ ++ while (1) ++ { ++ struct timeval tv; ++ struct timespec rt; ++ int sec, nsec; ++ ++ /* Get the current time. */ ++ __gettimeofday (&tv, NULL); ++ ++ /* Compute relative timeout. */ ++ sec = abstime->tv_sec - tv.tv_sec; ++ nsec = abstime->tv_nsec - tv.tv_usec * 1000; ++ if (nsec < 0) ++ { ++ nsec += 1000000000; ++ --sec; ++ } ++ ++ /* Already timed out? */ ++ err = -ETIMEDOUT; ++ if (sec < 0) ++ { ++ __set_errno (ETIMEDOUT); ++ err = -1; ++ break; ++ } ++ ++ /* Do wait. */ ++ rt.tv_sec = sec; ++ rt.tv_nsec = nsec; ++ ++ /* Enable asynchronous cancellation. Required by the standard. */ ++ int oldtype = __pthread_enable_asynccancel (); ++ ++ err = lll_futex_timed_wait (&isem->value, 0, &rt, ++ isem->private ^ FUTEX_PRIVATE_FLAG); ++ ++ /* Disable asynchronous cancellation. */ ++ __pthread_disable_asynccancel (oldtype); ++ ++ if (err != 0 && err != -EWOULDBLOCK) ++ { ++ __set_errno (-err); ++ err = -1; ++ break; ++ } ++ ++ if (__atomic_is_v9) ++ val = atomic_decrement_if_positive (&isem->value); ++ else ++ { ++ __sparc32_atomic_do_lock24 (&isem->lock); ++ val = isem->value; ++ if (val > 0) ++ isem->value = val - 1; ++ __sparc32_atomic_do_unlock24 (&isem->lock); ++ } ++ ++ if (val > 0) ++ { ++ err = 0; ++ break; ++ } ++ } ++ ++ pthread_cleanup_pop (0); ++ ++ if (__atomic_is_v9) ++ atomic_decrement (&isem->nwaiters); ++ else ++ { ++ __sparc32_atomic_do_lock24 (&isem->lock); ++ isem->nwaiters--; ++ __sparc32_atomic_do_unlock24 (&isem->lock); ++ } ++ ++ return err; ++} +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_trywait.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_trywait.c +new file mode 100644 +index 0000000..36e859b +--- /dev/null ++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_trywait.c +@@ -0,0 +1,51 @@ ++/* sem_trywait -- wait on a semaphore. SPARC version. ++ Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. ++ ++ 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 <errno.h> ++#include <sysdep.h> ++#include <lowlevellock.h> ++#include <internaltypes.h> ++#include <semaphore.h> ++ ++ ++int ++sem_trywait (sem_t *sem) ++{ ++ struct sparc_old_sem *isem = (struct sparc_old_sem *) sem; ++ int val; ++ ++ if (isem->value > 0) ++ { ++ if (__atomic_is_v9) ++ val = atomic_decrement_if_positive (&isem->value); ++ else ++ { ++ __sparc32_atomic_do_lock24 (&isem->lock); ++ val = isem->value; ++ if (val > 0) ++ isem->value = val - 1; ++ __sparc32_atomic_do_unlock24 (&isem->lock); ++ } ++ if (val > 0) ++ return 0; ++ } ++ ++ __set_errno (EAGAIN); ++ return -1; ++} +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_wait.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_wait.c +new file mode 100644 +index 0000000..5d887ab +--- /dev/null ++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sem_wait.c +@@ -0,0 +1,124 @@ ++/* sem_wait -- wait on a semaphore. Generic futex-using version. ++ Copyright (C) 2003, 2007 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. ++ ++ 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 <errno.h> ++#include <sysdep.h> ++#include <lowlevellock.h> ++#include <internaltypes.h> ++#include <semaphore.h> ++ ++#include <pthreadP.h> ++ ++ ++void ++attribute_hidden ++__sem_wait_cleanup (void *arg) ++{ ++ struct sparc_new_sem *isem = (struct sparc_new_sem *) arg; ++ ++ if (__atomic_is_v9) ++ atomic_decrement (&isem->nwaiters); ++ else ++ { ++ __sparc32_atomic_do_lock24 (&isem->lock); ++ isem->nwaiters--; ++ __sparc32_atomic_do_unlock24 (&isem->lock); ++ } ++} ++ ++ ++int ++sem_wait (sem_t *sem) ++{ ++ struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; ++ int err; ++ int val; ++ ++ if (__atomic_is_v9) ++ val = atomic_decrement_if_positive (&isem->value); ++ else ++ { ++ __sparc32_atomic_do_lock24 (&isem->lock); ++ val = isem->value; ++ if (val > 0) ++ isem->value = val - 1; ++ else ++ isem->nwaiters++; ++ __sparc32_atomic_do_unlock24 (&isem->lock); ++ } ++ ++ if (val > 0) ++ return 0; ++ ++ if (__atomic_is_v9) ++ atomic_increment (&isem->nwaiters); ++ else ++ /* Already done above while still holding isem->lock. */; ++ ++ pthread_cleanup_push (__sem_wait_cleanup, isem); ++ ++ while (1) ++ { ++ /* Enable asynchronous cancellation. Required by the standard. */ ++ int oldtype = __pthread_enable_asynccancel (); ++ ++ err = lll_futex_wait (&isem->value, 0, ++ isem->private ^ FUTEX_PRIVATE_FLAG); ++ ++ /* Disable asynchronous cancellation. */ ++ __pthread_disable_asynccancel (oldtype); ++ ++ if (err != 0 && err != -EWOULDBLOCK) ++ { ++ __set_errno (-err); ++ err = -1; ++ break; ++ } ++ ++ if (__atomic_is_v9) ++ val = atomic_decrement_if_positive (&isem->value); ++ else ++ { ++ __sparc32_atomic_do_lock24 (&isem->lock); ++ val = isem->value; ++ if (val > 0) ++ isem->value = val - 1; ++ __sparc32_atomic_do_unlock24 (&isem->lock); ++ } ++ ++ if (val > 0) ++ { ++ err = 0; ++ break; ++ } ++ } ++ ++ pthread_cleanup_pop (0); ++ ++ if (__atomic_is_v9) ++ atomic_decrement (&isem->nwaiters); ++ else ++ { ++ __sparc32_atomic_do_lock24 (&isem->lock); ++ isem->nwaiters--; ++ __sparc32_atomic_do_unlock24 (&isem->lock); ++ } ++ ++ return err; ++} +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S +deleted file mode 100644 +index a6142aa..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S ++++ /dev/null +@@ -1,2 +0,0 @@ +-#define RESET_PID +-#include <libc/sysdeps/linux/sparc/clone.S> +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S +deleted file mode 100644 +index 37231a8..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S ++++ /dev/null +@@ -1,44 +0,0 @@ +-/* Copyright (C) 2004 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. +- +- 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> +-#include <tcb-offsets.h> +- +- .text +- .globl __syscall_error +-ENTRY(__vfork) +- ld [%g7 + PID], %o5 +- sub %g0, %o5, %o4 +- st %o4, [%g7 + PID] +- +- LOADSYSCALL(vfork) +- ta 0x10 +- bcc 2f +- mov %o7, %g1 +- st %o5, [%g7 + PID] +- call __syscall_error +- mov %g1, %o7 +-2: sub %o1, 1, %o1 +- andcc %o0, %o1, %o0 +- bne,a 1f +- st %o5, [%g7 + PID] +-1: retl +- nop +-END(__vfork) +- +-weak_alias (__vfork, vfork) +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c +deleted file mode 100644 +index 169f6e7..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c ++++ /dev/null +@@ -1,93 +0,0 @@ +-/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. +- +- 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 <errno.h> +-#include <sysdep.h> +-#include <lowlevellock.h> +-#include <pthreadP.h> +- +-/* Wait on barrier. */ +-int +-pthread_barrier_wait ( +- pthread_barrier_t *barrier) +-{ +- union sparc_pthread_barrier *ibarrier +- = (union sparc_pthread_barrier *) barrier; +- int result = 0; +- int private = ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE; +- +- /* Make sure we are alone. */ +- lll_lock (ibarrier->b.lock, private); +- +- /* One more arrival. */ +- --ibarrier->b.left; +- +- /* Are these all? */ +- if (ibarrier->b.left == 0) +- { +- /* Yes. Increment the event counter to avoid invalid wake-ups and +- tell the current waiters that it is their turn. */ +- ++ibarrier->b.curr_event; +- +- /* Wake up everybody. */ +- lll_futex_wake (&ibarrier->b.curr_event, INT_MAX, private); +- +- /* This is the thread which finished the serialization. */ +- result = PTHREAD_BARRIER_SERIAL_THREAD; +- } +- else +- { +- /* The number of the event we are waiting for. The barrier's event +- number must be bumped before we continue. */ +- unsigned int event = ibarrier->b.curr_event; +- +- /* Before suspending, make the barrier available to others. */ +- lll_unlock (ibarrier->b.lock, private); +- +- /* Wait for the event counter of the barrier to change. */ +- do +- lll_futex_wait (&ibarrier->b.curr_event, event, private); +- while (event == ibarrier->b.curr_event); +- } +- +- /* Make sure the init_count is stored locally or in a register. */ +- unsigned int init_count = ibarrier->b.init_count; +- +- /* If this was the last woken thread, unlock. */ +- if (__atomic_is_v9 || ibarrier->s.pshared == 0) +- { +- if (atomic_increment_val (&ibarrier->b.left) == init_count) +- /* We are done. */ +- lll_unlock (ibarrier->b.lock, private); +- } +- else +- { +- unsigned int left; +- /* Slightly more complicated. On pre-v9 CPUs, atomic_increment_val +- is only atomic for threads within the same process, not for +- multiple processes. */ +- __sparc32_atomic_do_lock24 (&ibarrier->s.left_lock); +- left = ++ibarrier->b.left; +- __sparc32_atomic_do_unlock24 (&ibarrier->s.left_lock); +- if (left == init_count) +- /* We are done. */ +- lll_unlock (ibarrier->b.lock, private); +- } +- +- return result; +-} +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c +deleted file mode 100644 +index 8da4193..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c ++++ /dev/null +@@ -1,52 +0,0 @@ +-/* sem_post -- post to a POSIX semaphore. SPARC version. +- Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. +- +- 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 <errno.h> +-#include <sysdep.h> +-#include <lowlevellock.h> +-#include <internaltypes.h> +-#include <semaphore.h> +- +-int +-sem_post (sem_t *sem) +-{ +- struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; +- int nr; +- +- if (__atomic_is_v9) +- nr = atomic_increment_val (&isem->value); +- else +- { +- __sparc32_atomic_do_lock24 (&isem->lock); +- nr = ++(isem->value); +- __sparc32_atomic_do_unlock24 (&isem->lock); +- } +- atomic_full_barrier (); +- if (isem->nwaiters > 0) +- { +- int err = lll_futex_wake (&isem->value, 1, +- isem->private ^ FUTEX_PRIVATE_FLAG); +- if (__builtin_expect (err, 0) < 0) +- { +- __set_errno (-err); +- return -1; +- } +- } +- return 0; +-} +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c +deleted file mode 100644 +index 64c9abf..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c ++++ /dev/null +@@ -1,147 +0,0 @@ +-/* sem_timedwait -- wait on a semaphore. SPARC version. +- Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. +- +- 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 <errno.h> +-#include <sysdep.h> +-#include <lowlevellock.h> +-#include <internaltypes.h> +-#include <semaphore.h> +- +-#include <pthreadP.h> +- +- +-extern void __sem_wait_cleanup (void *arg) attribute_hidden; +- +- +-int +-sem_timedwait (sem_t *sem, const struct timespec *abstime) +-{ +- struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; +- int err; +- int val; +- +- if (__atomic_is_v9) +- val = atomic_decrement_if_positive (&isem->value); +- else +- { +- __sparc32_atomic_do_lock24 (&isem->lock); +- val = isem->value; +- if (val > 0) +- isem->value = val - 1; +- __sparc32_atomic_do_unlock24 (&isem->lock); +- } +- +- if (val > 0) +- return 0; +- +- if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) +- { +- __set_errno (EINVAL); +- return -1; +- } +- +- if (__atomic_is_v9) +- atomic_increment (&isem->nwaiters); +- else +- { +- __sparc32_atomic_do_lock24 (&isem->lock); +- isem->nwaiters++; +- __sparc32_atomic_do_unlock24 (&isem->lock); +- } +- +- pthread_cleanup_push (__sem_wait_cleanup, isem); +- +- while (1) +- { +- struct timeval tv; +- struct timespec rt; +- int sec, nsec; +- +- /* Get the current time. */ +- __gettimeofday (&tv, NULL); +- +- /* Compute relative timeout. */ +- sec = abstime->tv_sec - tv.tv_sec; +- nsec = abstime->tv_nsec - tv.tv_usec * 1000; +- if (nsec < 0) +- { +- nsec += 1000000000; +- --sec; +- } +- +- /* Already timed out? */ +- err = -ETIMEDOUT; +- if (sec < 0) +- { +- __set_errno (ETIMEDOUT); +- err = -1; +- break; +- } +- +- /* Do wait. */ +- rt.tv_sec = sec; +- rt.tv_nsec = nsec; +- +- /* Enable asynchronous cancellation. Required by the standard. */ +- int oldtype = __pthread_enable_asynccancel (); +- +- err = lll_futex_timed_wait (&isem->value, 0, &rt, +- isem->private ^ FUTEX_PRIVATE_FLAG); +- +- /* Disable asynchronous cancellation. */ +- __pthread_disable_asynccancel (oldtype); +- +- if (err != 0 && err != -EWOULDBLOCK) +- { +- __set_errno (-err); +- err = -1; +- break; +- } +- +- if (__atomic_is_v9) +- val = atomic_decrement_if_positive (&isem->value); +- else +- { +- __sparc32_atomic_do_lock24 (&isem->lock); +- val = isem->value; +- if (val > 0) +- isem->value = val - 1; +- __sparc32_atomic_do_unlock24 (&isem->lock); +- } +- +- if (val > 0) +- { +- err = 0; +- break; +- } +- } +- +- pthread_cleanup_pop (0); +- +- if (__atomic_is_v9) +- atomic_decrement (&isem->nwaiters); +- else +- { +- __sparc32_atomic_do_lock24 (&isem->lock); +- isem->nwaiters--; +- __sparc32_atomic_do_unlock24 (&isem->lock); +- } +- +- return err; +-} +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c +deleted file mode 100644 +index 36e859b..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c ++++ /dev/null +@@ -1,51 +0,0 @@ +-/* sem_trywait -- wait on a semaphore. SPARC version. +- Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. +- +- 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 <errno.h> +-#include <sysdep.h> +-#include <lowlevellock.h> +-#include <internaltypes.h> +-#include <semaphore.h> +- +- +-int +-sem_trywait (sem_t *sem) +-{ +- struct sparc_old_sem *isem = (struct sparc_old_sem *) sem; +- int val; +- +- if (isem->value > 0) +- { +- if (__atomic_is_v9) +- val = atomic_decrement_if_positive (&isem->value); +- else +- { +- __sparc32_atomic_do_lock24 (&isem->lock); +- val = isem->value; +- if (val > 0) +- isem->value = val - 1; +- __sparc32_atomic_do_unlock24 (&isem->lock); +- } +- if (val > 0) +- return 0; +- } +- +- __set_errno (EAGAIN); +- return -1; +-} +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c +deleted file mode 100644 +index 5d887ab..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c ++++ /dev/null +@@ -1,124 +0,0 @@ +-/* sem_wait -- wait on a semaphore. Generic futex-using version. +- Copyright (C) 2003, 2007 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. +- +- 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 <errno.h> +-#include <sysdep.h> +-#include <lowlevellock.h> +-#include <internaltypes.h> +-#include <semaphore.h> +- +-#include <pthreadP.h> +- +- +-void +-attribute_hidden +-__sem_wait_cleanup (void *arg) +-{ +- struct sparc_new_sem *isem = (struct sparc_new_sem *) arg; +- +- if (__atomic_is_v9) +- atomic_decrement (&isem->nwaiters); +- else +- { +- __sparc32_atomic_do_lock24 (&isem->lock); +- isem->nwaiters--; +- __sparc32_atomic_do_unlock24 (&isem->lock); +- } +-} +- +- +-int +-sem_wait (sem_t *sem) +-{ +- struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; +- int err; +- int val; +- +- if (__atomic_is_v9) +- val = atomic_decrement_if_positive (&isem->value); +- else +- { +- __sparc32_atomic_do_lock24 (&isem->lock); +- val = isem->value; +- if (val > 0) +- isem->value = val - 1; +- else +- isem->nwaiters++; +- __sparc32_atomic_do_unlock24 (&isem->lock); +- } +- +- if (val > 0) +- return 0; +- +- if (__atomic_is_v9) +- atomic_increment (&isem->nwaiters); +- else +- /* Already done above while still holding isem->lock. */; +- +- pthread_cleanup_push (__sem_wait_cleanup, isem); +- +- while (1) +- { +- /* Enable asynchronous cancellation. Required by the standard. */ +- int oldtype = __pthread_enable_asynccancel (); +- +- err = lll_futex_wait (&isem->value, 0, +- isem->private ^ FUTEX_PRIVATE_FLAG); +- +- /* Disable asynchronous cancellation. */ +- __pthread_disable_asynccancel (oldtype); +- +- if (err != 0 && err != -EWOULDBLOCK) +- { +- __set_errno (-err); +- err = -1; +- break; +- } +- +- if (__atomic_is_v9) +- val = atomic_decrement_if_positive (&isem->value); +- else +- { +- __sparc32_atomic_do_lock24 (&isem->lock); +- val = isem->value; +- if (val > 0) +- isem->value = val - 1; +- __sparc32_atomic_do_unlock24 (&isem->lock); +- } +- +- if (val > 0) +- { +- err = 0; +- break; +- } +- } +- +- pthread_cleanup_pop (0); +- +- if (__atomic_is_v9) +- atomic_decrement (&isem->nwaiters); +- else +- { +- __sparc32_atomic_do_lock24 (&isem->lock); +- isem->nwaiters--; +- __sparc32_atomic_do_unlock24 (&isem->lock); +- } +- +- return err; +-} +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h +deleted file mode 100644 +index b61ca7b..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h ++++ /dev/null +@@ -1,111 +0,0 @@ +-/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. +- +- 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 <tls.h> +-#include <sysdep.h> +-#ifndef __ASSEMBLER__ +-# include <pthreadP.h> +-#endif +- +-#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt +- +-# undef PSEUDO +-# define PSEUDO(name, syscall_name, args) \ +- .text; \ +- .globl __syscall_error; \ +-ENTRY(name) \ +- ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\ +- cmp %g1, 0; \ +- bne 1f; \ +-.type __##syscall_name##_nocancel,@function; \ +-.globl __##syscall_name##_nocancel; \ +-__##syscall_name##_nocancel: \ +- mov SYS_ify(syscall_name), %g1; \ +- ta 0x10; \ +- bcc 8f; \ +- mov %o7, %g1; \ +- call __syscall_error; \ +- mov %g1, %o7; \ +-8: jmpl %o7 + 8, %g0; \ +- nop; \ +-.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\ +-1: save %sp, -96, %sp; \ +- cfi_def_cfa_register(%fp); \ +- cfi_window_save; \ +- cfi_register(%o7, %i7); \ +- CENABLE; \ +- nop; \ +- mov %o0, %l0; \ +- COPY_ARGS_##args \ +- mov SYS_ify(syscall_name), %g1; \ +- ta 0x10; \ +- bcc 1f; \ +- mov %o0, %l1; \ +- CDISABLE; \ +- mov %l0, %o0; \ +- call __syscall_error; \ +- mov %l1, %o0; \ +- b 2f; \ +- mov -1, %l1; \ +-1: CDISABLE; \ +- mov %l0, %o0; \ +-2: jmpl %i7 + 8, %g0; \ +- restore %g0, %l1, %o0; +- +- +-# ifdef IS_IN_libpthread +-# define CENABLE call __pthread_enable_asynccancel +-# define CDISABLE call __pthread_disable_asynccancel +-# elif !defined NOT_IN_libc +-# define CENABLE call __libc_enable_asynccancel +-# define CDISABLE call __libc_disable_asynccancel +-# elif defined IS_IN_librt +-# define CENABLE call __librt_enable_asynccancel +-# define CDISABLE call __librt_disable_asynccancel +-# else +-# error Unsupported library +-# endif +- +-#define COPY_ARGS_0 /* Nothing */ +-#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0; +-#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1; +-#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2; +-#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3; +-#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4; +-#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5; +- +-# ifndef __ASSEMBLER__ +-# define SINGLE_THREAD_P \ +- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ +- header.multiple_threads) == 0, 1) +-# else +-# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1 +-# endif +- +-#elif !defined __ASSEMBLER__ +- +-# define SINGLE_THREAD_P (1) +-# define NO_CANCELLATION 1 +- +-#endif +- +-#ifndef __ASSEMBLER__ +-# define RTLD_SINGLE_THREAD_P \ +- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ +- header.multiple_threads) == 0, 1) +-#endif +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S +deleted file mode 100644 +index 71f0662..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S ++++ /dev/null +@@ -1,48 +0,0 @@ +-/* Copyright (C) 2004 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. +- +- 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> +-#include <tcb-offsets.h> +- +- .text +- .globl __syscall_error +-ENTRY(__vfork) +- ld [%g7 + PID], %o5 +- cmp %o5, 0 +- bne 1f +- sub %g0, %o5, %o4 +- sethi %hi(0x80000000), %o4 +-1: st %o4, [%g7 + PID] +- +- LOADSYSCALL(vfork) +- ta 0x10 +- bcc 2f +- mov %o7, %g1 +- st %o5, [%g7 + PID] +- call __syscall_error +- mov %g1, %o7 +-2: sub %o1, 1, %o1 +- andcc %o0, %o1, %o0 +- bne,a 1f +- st %o5, [%g7 + PID] +-1: retl +- nop +-END(__vfork) +- +-libc_hidden_def (vfork) +-weak_alias (__vfork, vfork) +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +deleted file mode 100644 +index 64e3bfc..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S ++++ /dev/null +@@ -1,2 +0,0 @@ +-#define RESET_PID +-#include <libc/sysdeps/linux/sparc/sparcv9/clone.S> +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S +deleted file mode 100644 +index a058d89..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S ++++ /dev/null +@@ -1,44 +0,0 @@ +-/* Copyright (C) 2004 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. +- +- 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> +-#include <tcb-offsets.h> +- +- .text +- .globl __syscall_error +-ENTRY(__vfork) +- ld [%g7 + PID], %o5 +- sub %g0, %o5, %o4 +- st %o4, [%g7 + PID] +- +- LOADSYSCALL(vfork) +- ta 0x6d +- bcc,pt %xcc, 2f +- mov %o7, %g1 +- st %o5, [%g7 + PID] +- call __syscall_error +- mov %g1, %o7 +-2: sub %o1, 1, %o1 +- andcc %o0, %o1, %o0 +- bne,a,pt %icc, 1f +- st %o5, [%g7 + PID] +-1: retl +- nop +-END(__vfork) +- +-weak_alias (__vfork, vfork) +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h +deleted file mode 100644 +index 0e9d263..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h ++++ /dev/null +@@ -1,109 +0,0 @@ +-/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. +- +- 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> +-#include <tls.h> +-#ifndef __ASSEMBLER__ +-# include <pthreadP.h> +-#endif +- +-#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt +- +-# undef PSEUDO +-# define PSEUDO(name, syscall_name, args) \ +- .text; \ +- .globl __syscall_error; \ +-ENTRY(name) \ +- ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\ +- brnz,pn %g1, 1f; \ +-.type __##syscall_name##_nocancel,@function; \ +-.globl __##syscall_name##_nocancel; \ +-__##syscall_name##_nocancel: \ +- mov SYS_ify(syscall_name), %g1; \ +- ta 0x6d; \ +- bcc,pt %xcc, 8f; \ +- mov %o7, %g1; \ +- call __syscall_error; \ +- mov %g1, %o7; \ +-8: jmpl %o7 + 8, %g0; \ +- nop; \ +-.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\ +-1: save %sp, -192, %sp; \ +- cfi_def_cfa_register(%fp); \ +- cfi_window_save; \ +- cfi_register(%o7, %i7); \ +- CENABLE; \ +- nop; \ +- mov %o0, %l0; \ +- COPY_ARGS_##args \ +- mov SYS_ify(syscall_name), %g1; \ +- ta 0x6d; \ +- bcc,pt %xcc, 1f; \ +- mov %o0, %l1; \ +- CDISABLE; \ +- mov %l0, %o0; \ +- call __syscall_error; \ +- mov %l1, %o0; \ +- ba,pt %xcc, 2f; \ +- mov -1, %l1; \ +-1: CDISABLE; \ +- mov %l0, %o0; \ +-2: jmpl %i7 + 8, %g0; \ +- restore %g0, %l1, %o0; +- +-# ifdef IS_IN_libpthread +-# define CENABLE call __pthread_enable_asynccancel +-# define CDISABLE call __pthread_disable_asynccancel +-# elif !defined NOT_IN_libc +-# define CENABLE call __libc_enable_asynccancel +-# define CDISABLE call __libc_disable_asynccancel +-# elif defined IS_IN_librt +-# define CENABLE call __librt_enable_asynccancel +-# define CDISABLE call __librt_disable_asynccancel +-# else +-# error Unsupported library +-# endif +- +-#define COPY_ARGS_0 /* Nothing */ +-#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0; +-#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1; +-#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2; +-#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3; +-#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4; +-#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5; +- +-# ifndef __ASSEMBLER__ +-# define SINGLE_THREAD_P \ +- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ +- header.multiple_threads) == 0, 1) +-# else +-# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1 +-# endif +- +-#elif !defined __ASSEMBLER__ +- +-# define SINGLE_THREAD_P (1) +-# define NO_CANCELLATION 1 +- +-#endif +- +-#ifndef __ASSEMBLER__ +-# define RTLD_SINGLE_THREAD_P \ +- __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ +- header.multiple_threads) == 0, 1) +-#endif +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c +deleted file mode 100644 +index 0a9c337..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_create.c ++++ /dev/null +@@ -1 +0,0 @@ +-#include "../../x86_64/timer_create.c" +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c +deleted file mode 100644 +index f0d4fd2..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_delete.c ++++ /dev/null +@@ -1 +0,0 @@ +-#include "../../x86_64/timer_delete.c" +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c +deleted file mode 100644 +index 82121a7..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_getoverr.c ++++ /dev/null +@@ -1 +0,0 @@ +-#include "../../x86_64/timer_getoverr.c" +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c +deleted file mode 100644 +index 313c05f..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_gettime.c ++++ /dev/null +@@ -1 +0,0 @@ +-#include "../../x86_64/timer_gettime.c" +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c +deleted file mode 100644 +index 76f549c..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/timer_settime.c ++++ /dev/null +@@ -1 +0,0 @@ +-#include "../../x86_64/timer_settime.c" +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S +deleted file mode 100644 +index bea4f2f..0000000 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S ++++ /dev/null +@@ -1,48 +0,0 @@ +-/* Copyright (C) 2004 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. +- +- 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> +-#include <tcb-offsets.h> +- +- .text +- .globl __syscall_error +-ENTRY(__vfork) +- ld [%g7 + PID], %o5 +- sethi %hi(0x80000000), %o3 +- cmp %o5, 0 +- sub %g0, %o5, %o4 +- move %icc, %o3, %o4 +- st %o4, [%g7 + PID] +- +- LOADSYSCALL(vfork) +- ta 0x6d +- bcc,pt %xcc, 2f +- mov %o7, %g1 +- st %o5, [%g7 + PID] +- call __syscall_error +- mov %g1, %o7 +-2: sub %o1, 1, %o1 +- andcc %o0, %o1, %o0 +- bne,a,pt %icc, 1f +- st %o5, [%g7 + PID] +-1: retl +- nop +-END(__vfork) +- +-hidden_def (vfork) +-weak_alias (__vfork, vfork) +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h +index 5be9beb..b61ca7b 100644 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h ++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h +@@ -1,5 +1,111 @@ +-#if defined(__arch64__) +-#include "sparc64/sysdep-cancel.h" +-#else +-#include "sparc32/sysdep-cancel.h" ++/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. ++ ++ 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 <tls.h> ++#include <sysdep.h> ++#ifndef __ASSEMBLER__ ++# include <pthreadP.h> ++#endif ++ ++#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt ++ ++# undef PSEUDO ++# define PSEUDO(name, syscall_name, args) \ ++ .text; \ ++ .globl __syscall_error; \ ++ENTRY(name) \ ++ ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\ ++ cmp %g1, 0; \ ++ bne 1f; \ ++.type __##syscall_name##_nocancel,@function; \ ++.globl __##syscall_name##_nocancel; \ ++__##syscall_name##_nocancel: \ ++ mov SYS_ify(syscall_name), %g1; \ ++ ta 0x10; \ ++ bcc 8f; \ ++ mov %o7, %g1; \ ++ call __syscall_error; \ ++ mov %g1, %o7; \ ++8: jmpl %o7 + 8, %g0; \ ++ nop; \ ++.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\ ++1: save %sp, -96, %sp; \ ++ cfi_def_cfa_register(%fp); \ ++ cfi_window_save; \ ++ cfi_register(%o7, %i7); \ ++ CENABLE; \ ++ nop; \ ++ mov %o0, %l0; \ ++ COPY_ARGS_##args \ ++ mov SYS_ify(syscall_name), %g1; \ ++ ta 0x10; \ ++ bcc 1f; \ ++ mov %o0, %l1; \ ++ CDISABLE; \ ++ mov %l0, %o0; \ ++ call __syscall_error; \ ++ mov %l1, %o0; \ ++ b 2f; \ ++ mov -1, %l1; \ ++1: CDISABLE; \ ++ mov %l0, %o0; \ ++2: jmpl %i7 + 8, %g0; \ ++ restore %g0, %l1, %o0; ++ ++ ++# ifdef IS_IN_libpthread ++# define CENABLE call __pthread_enable_asynccancel ++# define CDISABLE call __pthread_disable_asynccancel ++# elif !defined NOT_IN_libc ++# define CENABLE call __libc_enable_asynccancel ++# define CDISABLE call __libc_disable_asynccancel ++# elif defined IS_IN_librt ++# define CENABLE call __librt_enable_asynccancel ++# define CDISABLE call __librt_disable_asynccancel ++# else ++# error Unsupported library ++# endif ++ ++#define COPY_ARGS_0 /* Nothing */ ++#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0; ++#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1; ++#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2; ++#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3; ++#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4; ++#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5; ++ ++# ifndef __ASSEMBLER__ ++# define SINGLE_THREAD_P \ ++ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ ++ header.multiple_threads) == 0, 1) ++# else ++# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1 ++# endif ++ ++#elif !defined __ASSEMBLER__ ++ ++# define SINGLE_THREAD_P (1) ++# define NO_CANCELLATION 1 ++ ++#endif ++ ++#ifndef __ASSEMBLER__ ++# define RTLD_SINGLE_THREAD_P \ ++ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ ++ header.multiple_threads) == 0, 1) + #endif +diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/vfork.S +index 160cd0b..71f0662 100644 +--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/vfork.S ++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/vfork.S +@@ -1,5 +1,48 @@ +-#if defined(__arch64__) +-#include "sparc64/vfork.S" +-#else +-#include "sparc32/vfork.S" +-#endif ++/* Copyright (C) 2004 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. ++ ++ 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> ++#include <tcb-offsets.h> ++ ++ .text ++ .globl __syscall_error ++ENTRY(__vfork) ++ ld [%g7 + PID], %o5 ++ cmp %o5, 0 ++ bne 1f ++ sub %g0, %o5, %o4 ++ sethi %hi(0x80000000), %o4 ++1: st %o4, [%g7 + PID] ++ ++ LOADSYSCALL(vfork) ++ ta 0x10 ++ bcc 2f ++ mov %o7, %g1 ++ st %o5, [%g7 + PID] ++ call __syscall_error ++ mov %g1, %o7 ++2: sub %o1, 1, %o1 ++ andcc %o0, %o1, %o0 ++ bne,a 1f ++ st %o5, [%g7 + PID] ++1: retl ++ nop ++END(__vfork) ++ ++libc_hidden_def (vfork) ++weak_alias (__vfork, vfork) +-- +1.8.5.2 (Apple Git-48) + |