|  | @@ -1,8666 +0,0 @@
 | 
	
		
			
				|  |  | -From b523318f205c88a1f9871b8acbda999150242e36 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/5] 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           |  25 +-
 | 
	
		
			
				|  |  | - 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, 1350 insertions(+), 6534 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..90efb77 100644
 | 
	
		
			
				|  |  | ---- a/libc/sysdeps/linux/sparc/jmpbuf-unwind.h
 | 
	
		
			
				|  |  | -+++ b/libc/sysdeps/linux/sparc/jmpbuf-unwind.h
 | 
	
		
			
				|  |  | -@@ -6,26 +6,19 @@
 | 
	
		
			
				|  |  | - #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
 | 
	
		
			
				|  |  | -+#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))
 | 
	
		
			
				|  |  | - #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)
 | 
	
		
			
				|  |  | -
 |