diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2014-09-04 15:24:47 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2014-09-04 15:24:47 +0200 |
commit | 98098a8d1fb9aafc55358e1252f3c8270c749d47 (patch) | |
tree | 685cd1c6de2d88154c0df005df41fe5b7608d03a /toolchain/uclibc | |
parent | 26acbf2f355f2ea8383a6dc2f1e2c314bf36b284 (diff) |
sync uClibc patchset with upstream accepted work
Diffstat (limited to 'toolchain/uclibc')
-rw-r--r-- | toolchain/uclibc/patches/0.9.34-git/0001-libpthread-modify-CFLAGS-pthread_once.c-to-avoid-ear.patch | 40 | ||||
-rw-r--r-- | toolchain/uclibc/patches/0.9.34-git/0001-test-disable-posix_fallocate64-for-small-embedded-sy.patch | 27 | ||||
-rw-r--r-- | toolchain/uclibc/patches/0.9.34-git/0001-test-disable-test-when-UCLIBC_HAS_XLOCALE-is-n.patch | 125 | ||||
-rw-r--r-- | toolchain/uclibc/patches/0.9.34-git/0002-nptl-remove-duplicate-vfork-in-libpthread.patch (renamed from toolchain/uclibc/patches/0.9.34-git/0005-nptl-remove-duplicate-vfork-in-libpthread.patch) | 6 | ||||
-rw-r--r-- | toolchain/uclibc/patches/0.9.34-git/0002-test-skip-test-for-non-mmu-case.patch | 44 | ||||
-rw-r--r-- | toolchain/uclibc/patches/0.9.34-git/0003-ldso-fix-compile-error-for-bfin-non-mmu.patch | 33 | ||||
-rw-r--r-- | toolchain/uclibc/patches/0.9.34-git/0004-sparc-remove-sparc64-sparcv9-code.patch | 8666 |
7 files changed, 30 insertions, 8911 deletions
diff --git a/toolchain/uclibc/patches/0.9.34-git/0001-libpthread-modify-CFLAGS-pthread_once.c-to-avoid-ear.patch b/toolchain/uclibc/patches/0.9.34-git/0001-libpthread-modify-CFLAGS-pthread_once.c-to-avoid-ear.patch deleted file mode 100644 index 66f12c751..000000000 --- a/toolchain/uclibc/patches/0.9.34-git/0001-libpthread-modify-CFLAGS-pthread_once.c-to-avoid-ear.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 82cc57d5a508dbd7a2f578dc13f91dafda4d6cd9 Mon Sep 17 00:00:00 2001 -From: Yang Yingliang <yangyingliang@huawei.com> -Date: Fri, 29 Aug 2014 11:21:30 +0800 -Subject: [PATCH] libpthread: modify CFLAGS-pthread_once.c to avoid earlier - setting being replaced - -I use uclibc in arch arm. The CFLAGS-pthread_once.c has been set -to -DNOT_IN_libc -DIS_IN_libpthread in -libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch. -But it will be replaced by -fexceptions -fasynchronous-unwind-tables in -libpthread/nptl/Makefile.in. - -If CFLAGS-pthread_once.c has no -DIS_IN_libpthread the testcase -tst-once3 in test/nptl/ will be failed. The reason is pthread_once -calls another pthread_cleanup_push() which is not under IS_IN_libpthread -so that clear_once_control do not be called when the thread is canceled. -So pthread_once will hang up when it's called second time. - -Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> -Signed-off-by: Waldemar Brodkorb <wbx@openadk.org> ---- - libpthread/nptl/Makefile.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libpthread/nptl/Makefile.in b/libpthread/nptl/Makefile.in -index 0008822..1b9ba8c 100644 ---- a/libpthread/nptl/Makefile.in -+++ b/libpthread/nptl/Makefile.in -@@ -186,7 +186,7 @@ CFLAGS-forward.c = -fexceptions - CFLAGS-pthread_testcancel.c = -fexceptions - CFLAGS-pthread_join.c = -fexceptions -fasynchronous-unwind-tables - CFLAGS-pthread_timedjoin.c = -fexceptions -fasynchronous-unwind-tables --CFLAGS-pthread_once.c = $(uses-callbacks) -fexceptions \ -+CFLAGS-pthread_once.c += $(uses-callbacks) -fexceptions \ - -fasynchronous-unwind-tables - CFLAGS-pthread_cond_wait.c = -fexceptions -fasynchronous-unwind-tables - CFLAGS-pthread_cond_timedwait.c = -fexceptions -fasynchronous-unwind-tables --- -2.0.1 - diff --git a/toolchain/uclibc/patches/0.9.34-git/0001-test-disable-posix_fallocate64-for-small-embedded-sy.patch b/toolchain/uclibc/patches/0.9.34-git/0001-test-disable-posix_fallocate64-for-small-embedded-sy.patch new file mode 100644 index 000000000..ce7ba02f7 --- /dev/null +++ b/toolchain/uclibc/patches/0.9.34-git/0001-test-disable-posix_fallocate64-for-small-embedded-sy.patch @@ -0,0 +1,27 @@ +From d167545f3578d560e0c3818ac9657a34fead9812 Mon Sep 17 00:00:00 2001 +From: Waldemar Brodkorb <wbx@openadk.org> +Date: Mon, 1 Sep 2014 21:02:19 +0200 +Subject: [PATCH 1/2] test: disable posix_fallocate64 for small embedded + systems + +Signed-off-by: Waldemar Brodkorb <wbx@openadk.org> +--- + test/unistd/Makefile.in | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/test/unistd/Makefile.in b/test/unistd/Makefile.in +index cfef22e..911c8e8 100644 +--- a/test/unistd/Makefile.in ++++ b/test/unistd/Makefile.in +@@ -15,6 +15,8 @@ else + # reordering is not supported, behaves as if POSIXLY_CORRECT would be set + OPTS_tstgetopt := -a -b -cfoobar --required foobar --optional=bazbug --none --colou --color --colour random + endif ++# for embedded systems 4 GB disk space is not available ++TESTS_DISABLED += tst-posix_fallocate64 + + # getconf.c lives in utils/ + # Testsuite cannot currently be built with O= anyway, so hardcode path here +-- +1.8.5.2 (Apple Git-48) + diff --git a/toolchain/uclibc/patches/0.9.34-git/0001-test-disable-test-when-UCLIBC_HAS_XLOCALE-is-n.patch b/toolchain/uclibc/patches/0.9.34-git/0001-test-disable-test-when-UCLIBC_HAS_XLOCALE-is-n.patch deleted file mode 100644 index a13769281..000000000 --- a/toolchain/uclibc/patches/0.9.34-git/0001-test-disable-test-when-UCLIBC_HAS_XLOCALE-is-n.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 7f42d10dfdfe506df0c6b4850a16da7d2ce8293a Mon Sep 17 00:00:00 2001 -From: Waldemar Brodkorb <wbx@openadk.org> -Date: Thu, 28 Aug 2014 14:09:51 +0200 -Subject: [PATCH 1/2] test: disable test when UCLIBC_HAS_XLOCALE is n - -wcsftime() is only implemented when locale support in uClibc -is activated. So test will always fail when locale is deactivated -by the user. Rename file name to be consistent with other test file -names. - -Signed-off-by: Waldemar Brodkorb <wbx@openadk.org> ---- - test/time/Makefile.in | 2 +- - test/time/tst-wcsftime.c | 39 +++++++++++++++++++++++++++++++++++++++ - test/time/tst_wcsftime.c | 39 --------------------------------------- - 3 files changed, 40 insertions(+), 40 deletions(-) - create mode 100644 test/time/tst-wcsftime.c - delete mode 100644 test/time/tst_wcsftime.c - -diff --git a/test/time/Makefile.in b/test/time/Makefile.in -index 05f73a4..3f1d1a1 100644 ---- a/test/time/Makefile.in -+++ b/test/time/Makefile.in -@@ -5,7 +5,7 @@ TESTS_DISABLED := bug-asctime bug-asctime_r time tst-mktime2 tst-posixtz \ - tst-strftime tst-strptime tst-timezone - - ifneq ($(UCLIBC_HAS_XLOCALE),y) --TESTS_DISABLED += tst-ftime_l -+TESTS_DISABLED += tst-ftime_l tst-wcsftime - endif - - CFLAGS_tst-strptime2 := -std=c99 -diff --git a/test/time/tst-wcsftime.c b/test/time/tst-wcsftime.c -new file mode 100644 -index 0000000..6e35f1e ---- /dev/null -+++ b/test/time/tst-wcsftime.c -@@ -0,0 +1,39 @@ -+#include <stdio.h> -+#include <time.h> -+#include <features.h> -+#ifdef __UCLIBC_HAS_WCHAR__ -+#include <wchar.h> -+ -+int -+main (int argc, char *argv[]) -+{ -+ wchar_t buf[200]; -+ time_t t; -+ struct tm *tp; -+ int result = 0; -+ size_t n; -+ -+ time (&t); -+ tp = gmtime (&t); -+ -+ n = wcsftime (buf, sizeof (buf) / sizeof (buf[0]), -+ L"%H:%M:%S %Y-%m-%d\n", tp); -+ if (n != 21) -+ result = 1; -+ -+ wprintf (L"It is now %ls", buf); -+ -+ wcsftime (buf, sizeof (buf) / sizeof (buf[0]), L"%A\n", tp); -+ -+ wprintf (L"The weekday is %ls", buf); -+ -+ return result; -+} -+ -+#else -+int main(void) -+{ -+ puts("Test requires WCHAR support; skipping"); -+ return 0; -+} -+#endif -diff --git a/test/time/tst_wcsftime.c b/test/time/tst_wcsftime.c -deleted file mode 100644 -index 6e35f1e..0000000 ---- a/test/time/tst_wcsftime.c -+++ /dev/null -@@ -1,39 +0,0 @@ --#include <stdio.h> --#include <time.h> --#include <features.h> --#ifdef __UCLIBC_HAS_WCHAR__ --#include <wchar.h> -- --int --main (int argc, char *argv[]) --{ -- wchar_t buf[200]; -- time_t t; -- struct tm *tp; -- int result = 0; -- size_t n; -- -- time (&t); -- tp = gmtime (&t); -- -- n = wcsftime (buf, sizeof (buf) / sizeof (buf[0]), -- L"%H:%M:%S %Y-%m-%d\n", tp); -- if (n != 21) -- result = 1; -- -- wprintf (L"It is now %ls", buf); -- -- wcsftime (buf, sizeof (buf) / sizeof (buf[0]), L"%A\n", tp); -- -- wprintf (L"The weekday is %ls", buf); -- -- return result; --} -- --#else --int main(void) --{ -- puts("Test requires WCHAR support; skipping"); -- return 0; --} --#endif --- -1.8.5.2 (Apple Git-48) - diff --git a/toolchain/uclibc/patches/0.9.34-git/0005-nptl-remove-duplicate-vfork-in-libpthread.patch b/toolchain/uclibc/patches/0.9.34-git/0002-nptl-remove-duplicate-vfork-in-libpthread.patch index 82e8fc5c8..85fb76650 100644 --- a/toolchain/uclibc/patches/0.9.34-git/0005-nptl-remove-duplicate-vfork-in-libpthread.patch +++ b/toolchain/uclibc/patches/0.9.34-git/0002-nptl-remove-duplicate-vfork-in-libpthread.patch @@ -1,7 +1,7 @@ -From b33ede9109b25a249bd2ba4b9c1d20eee90efdf7 Mon Sep 17 00:00:00 2001 +From 539fe3a7cc5439d01499765008751f8d17ca5ede Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb <wbx@openadk.org> -Date: Sun, 31 Aug 2014 11:03:20 +0200 -Subject: [PATCH 5/5] nptl: remove duplicate vfork() in libpthread +Date: Thu, 4 Sep 2014 15:23:36 +0200 +Subject: [PATCH 2/2] nptl: remove duplicate vfork() in libpthread Automatic patching via two oneliners by Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>: sed -i -e 's/[[:space:]]pt-vfork\.[csS]//' $(git grep -l pt-vfork libpthread/nptl/sysdeps) diff --git a/toolchain/uclibc/patches/0.9.34-git/0002-test-skip-test-for-non-mmu-case.patch b/toolchain/uclibc/patches/0.9.34-git/0002-test-skip-test-for-non-mmu-case.patch deleted file mode 100644 index 344aab57b..000000000 --- a/toolchain/uclibc/patches/0.9.34-git/0002-test-skip-test-for-non-mmu-case.patch +++ /dev/null @@ -1,44 +0,0 @@ -From fd8d6c5d6bebff0b3a106364e26e75399880b34b Mon Sep 17 00:00:00 2001 -From: Waldemar Brodkorb <wbx@openadk.org> -Date: Thu, 28 Aug 2014 22:49:10 +0200 -Subject: [PATCH 2/2] test: skip test for non-mmu case - -Non-mmu targets have no fork(). In the case of vfork(), -we can not test communication between parent and child -in this way. - -Signed-off-by: Waldemar Brodkorb <wbx@openadk.org> ---- - test/librt/shmtest.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/test/librt/shmtest.c b/test/librt/shmtest.c -index a14302d..2be09cc 100644 ---- a/test/librt/shmtest.c -+++ b/test/librt/shmtest.c -@@ -14,6 +14,8 @@ - #include <sys/stat.h> - #include <sys/wait.h> - -+#ifdef __ARCH_USE_MMU__ -+ - #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) - - char shared_name[] = "/sharetest"; -@@ -102,3 +104,13 @@ int main(void) { - } - return 0; - } -+ -+#else -+ -+int main(void) -+{ -+ printf("Skipping test on non-mmu host!\n"); -+ return EXIT_SUCCESS; -+} -+ -+#endif --- -1.8.5.2 (Apple Git-48) - diff --git a/toolchain/uclibc/patches/0.9.34-git/0003-ldso-fix-compile-error-for-bfin-non-mmu.patch b/toolchain/uclibc/patches/0.9.34-git/0003-ldso-fix-compile-error-for-bfin-non-mmu.patch deleted file mode 100644 index 30b6de741..000000000 --- a/toolchain/uclibc/patches/0.9.34-git/0003-ldso-fix-compile-error-for-bfin-non-mmu.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 23098cc9edbcc5aafb2692d83e7cae0b0f7887e5 Mon Sep 17 00:00:00 2001 -From: Waldemar Brodkorb <wbx@openadk.org> -Date: Sat, 30 Aug 2014 17:34:07 +0200 -Subject: [PATCH 3/3] ldso: fix compile error for bfin non-mmu - -When compiling for bfin non-mmu, you get following error: -ldso/ldso/dl-elf.c:731:18: error: '_dl_debug_file' undeclared (first use in this function) -_dl_debug_file is only available when __SUPPORT_LD_DEBUG__ is -defined. - -Signed-off-by: Waldemar Brodkorb <wbx@openadk.org> ---- - ldso/ldso/dl-elf.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c -index 1b06bc1..4c42fbc 100644 ---- a/ldso/ldso/dl-elf.c -+++ b/ldso/ldso/dl-elf.c -@@ -728,8 +728,10 @@ struct elf_resolve *_dl_load_elf_shared_library(unsigned rflags, - void *new_addr; - new_addr = map_writeable (infile, ppnt, piclib, flags, libaddr); - if (!new_addr) { -+#ifdef __SUPPORT_LD_DEBUG__ - _dl_dprintf(_dl_debug_file, "Can't modify %s's text section.", - libname); -+#endif - _dl_exit(1); - } - DL_UPDATE_LOADADDR_HDR(lib_loadaddr, --- -1.8.5.2 (Apple Git-48) - diff --git a/toolchain/uclibc/patches/0.9.34-git/0004-sparc-remove-sparc64-sparcv9-code.patch b/toolchain/uclibc/patches/0.9.34-git/0004-sparc-remove-sparc64-sparcv9-code.patch deleted file mode 100644 index ed23688a6..000000000 --- a/toolchain/uclibc/patches/0.9.34-git/0004-sparc-remove-sparc64-sparcv9-code.patch +++ /dev/null @@ -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) - |