diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-01-27 21:03:22 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-01-27 21:03:22 +0000 |
commit | 62f29da7cbc527e8f8dda4f5101e6ac504c98505 (patch) | |
tree | d1f7d7ed70c131129214bc71441b1d8bbfc7268f /sysdeps/sparc/sparc32 | |
parent | e4e9446ba3c762d9bddd2718f889af545bf4e95c (diff) | |
download | glibc-62f29da7cbc527e8f8dda4f5101e6ac504c98505.tar.gz glibc-62f29da7cbc527e8f8dda4f5101e6ac504c98505.tar.xz glibc-62f29da7cbc527e8f8dda4f5101e6ac504c98505.zip |
Update.
2003-01-26 Andreas Schwab <schwab@suse.de> * sysdeps/wordsize-32/divdi3.c: Export the functions only as compatibility symbols. Remove INTDEF for __divdi3. * sysdeps/wordsize-32/lldiv.c: Don't use __divdi3_internal. * sysdeps/powerpc/powerpc32/divdi3.c: Remove. * sysdeps/powerpc/powerpc32/Makefile (CPPFLAGS-divdi3.c): Don't define. * sysdeps/powerpc/powerpc32/Dist: Remove divdi3.c. 2003-01-24 Jakub Jelinek <jakub@redhat.com> * elf/tls-macros.h: Add SPARC 32-bit definitions. * sysdeps/sparc/sparc32/elf/configure.in: Add TLS check. * sysdeps/sparc/sparc32/dl-machine.h: Add dl_machine_h guards for the first half of the header. Include tls.h. (elf_machine_type_class): Return ELF_RTYPE_CLASS_PLT for TLS relocs too. (elf_machine_rela): Handle TLS relocs. * sysdeps/sparc/dl-tls.h: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Add cancellation support. * sysdeps/sparc/sparc32/sparcv9/hp-timing.h: Use %g6 instead of %g7. * sysdeps/sparc/sparc32/memchr.S: Likewise. * sysdeps/sparc/sparc32/memcpy.S: Likewise. * sysdeps/sparc/sparc32/strcat.S: Likewise. * sysdeps/sparc/sparc32/strchr.S: Likewise. * sysdeps/sparc/sparc32/strcmp.S: Likewise. * sysdeps/sparc/sparc32/strcpy.S: Likewise. * sysdeps/sparc/sparc64/sparcv9b/memcpy.S: Likewise. * sysdeps/sparc/sparc64/hp-timing.h: Likewise. * sysdeps/sparc/sparc64/memcpy.S: Likewise. * sysdeps/sparc/sparc64/stpcpy.S: Likewise. * sysdeps/sparc/sparc64/stpncpy.S: Likewise. * sysdeps/sparc/sparc64/strcat.S: Likewise. * sysdeps/sparc/sparc64/strchr.S: Likewise. * sysdeps/sparc/sparc64/strcmp.S: Likewise. * sysdeps/sparc/sparc64/strcpy.S: Likewise. * sysdeps/sparc/sparc64/strncmp.S: Likewise. * sysdeps/sparc/sparc64/strncpy.S: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h: Likewise. 2003-01-24 Andreas Schwab <schwab@suse.de> * elf/dl-close.c (_dl_close): Don't relocate DT_FINI_ARRAY elements, and process them backwards. * elf/Makefile ($(objpfx)tst-array4): New target. ($(objpfx)tst-array4.out): Likewise. (tests) [$(have-initfini-array) = yes]: Add tst-array4. * elf/tst-array4.c: New file. * elf/tst-array4.exp: Likewise. 2003-01-24 Steven Munroe <sjmunroe@us.ibm.com> * sysdeps/unix/sysv/linux/powerpc/powerpc64/fe_nomask.c: New file. 2003-01-27 Guido Guenther <agx@sigxcpu.org> * sysdeps/unix/sysv/linux/mips/sysdep.h (SYSCALL_ERROR_LABEL): Define. * sysdeps/unix/sysv/linux/mips/pread.c: Add support for cancellation handling and handle both __NR_pread64 and __NR_pread. * sysdeps/unix/sysv/linux/mips/pread64.c: Likewise. * sysdeps/unix/sysv/linux/mips/pwrite.c: Add support for cancellation handling and handle both __NR_pwrite64 and __NR_pwrite. * sysdeps/unix/sysv/linux/mips/pwrite64.c: Likewise. * sysdeps/unix/mips/sysdep.S: Don't set errno in the _LIBC_REENTRANT case, use register names consistently. 2003-01-27 Wolfram Gloger <wg@malloc.de> * malloc/hooks.c (mem2chunk_check): Check alignment of mem pointer, not of the computed chunk. Bug report from Carlos O'Donell <carlos@baldric.uwo.ca>.
Diffstat (limited to 'sysdeps/sparc/sparc32')
-rw-r--r-- | sysdeps/sparc/sparc32/dl-machine.h | 72 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/elf/configure.in | 43 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/memchr.S | 14 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/memcpy.S | 138 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/sparcv9/hp-timing.h | 14 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/strcat.S | 14 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/strchr.S | 10 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/strcmp.S | 8 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/strcpy.S | 14 |
9 files changed, 217 insertions, 110 deletions
diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h index 51060b652a..8c821b9cc2 100644 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ b/sysdeps/sparc/sparc32/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. SPARC version. - Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1996-2002, 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 @@ -17,11 +17,15 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#ifndef dl_machine_h +#define dl_machine_h + #define ELF_MACHINE_NAME "sparc" #include <string.h> #include <sys/param.h> #include <ldsodefs.h> +#include <tls.h> #ifndef VALIDX # define VALIDX(tag) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM \ @@ -237,9 +241,17 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) PLT entries should not be allowed to define the value. ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one of the main executable's symbols, as for a COPY reloc. */ -#define elf_machine_type_class(type) \ - ((((type) == R_SPARC_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) \ +#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) +# define elf_machine_type_class(type) \ + ((((type) == R_SPARC_JMP_SLOT \ + || ((type) >= R_SPARC_TLS_GD_HI22 && (type) <= R_SPARC_TLS_TPOFF64)) \ + * ELF_RTYPE_CLASS_PLT) \ + | (((type) == R_SPARC_COPY) * ELF_RTYPE_CLASS_COPY)) +#else +# define elf_machine_type_class(type) \ + ((((type) == R_SPARC_JMP_SLOT) * ELF_RTYPE_CLASS_PLT) \ | (((type) == R_SPARC_COPY) * ELF_RTYPE_CLASS_COPY)) +#endif /* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ #define ELF_MACHINE_JMP_SLOT R_SPARC_JMP_SLOT @@ -413,6 +425,8 @@ elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, return value + reloc->r_addend; } +#endif /* dl_machine_h */ + #ifdef RESOLVE /* Perform the relocation specified by RELOC and SYM (which is fully resolved). @@ -448,16 +462,29 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, #if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP const Elf32_Sym *const refsym = sym; #endif +#if defined USE_TLS && !defined RTLD_BOOTSTRAP + struct link_map *sym_map; +#endif Elf32_Addr value; #ifndef RESOLVE_CONFLICT_FIND_MAP if (sym->st_shndx != SHN_UNDEF && ELF32_ST_BIND (sym->st_info) == STB_LOCAL) - value = map->l_addr; + { + value = map->l_addr; +# if defined USE_TLS && !defined RTLD_BOOTSTRAP + sym_map = map; +# endif + } else { +# if defined USE_TLS && !defined RTLD_BOOTSTRAP + sym_map = RESOLVE_MAP (&sym, version, r_type); + value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value; +# else value = RESOLVE (&sym, version, r_type); if (sym) value += sym->st_value; +# endif } #else value = 0; @@ -496,6 +523,43 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, so we can optimize the first instruction of .plt out. */ sparc_fixup_plt (reloc, reloc_addr, value, 0); break; +#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \ + && !defined RESOLVE_CONFLICT_FIND_MAP + case R_SPARC_TLS_DTPMOD32: + /* Get the information from the link map returned by the + resolv function. */ + if (sym_map != NULL) + *reloc_addr = sym_map->l_tls_modid; + break; + case R_SPARC_TLS_DTPOFF32: + /* During relocation all TLS symbols are defined and used. + Therefore the offset is already correct. */ + *reloc_addr = (sym == NULL ? 0 : sym->st_value) + reloc->r_addend; + break; + case R_SPARC_TLS_TPOFF32: + /* The offset is negative, forward from the thread pointer. */ + /* We know the offset of object the symbol is contained in. + It is a negative value which will be added to the + thread pointer. */ + CHECK_STATIC_TLS (map, sym_map); + *reloc_addr + = (sym == NULL ? 0 : sym->st_value - sym_map->l_tls_offset) + + reloc->r_addend; + break; +# ifndef RTLD_BOOTSTRAP + case R_SPARC_TLS_LE_HIX22: + case R_SPARC_TLS_LE_LOX10: + CHECK_STATIC_TLS (map, sym_map); + value = (sym == NULL ? 0 : sym->st_value - sym_map->l_tls_offset) + + reloc->r_addend; + if (r_type == R_SPARC_TLS_LE_HIX22) + *reloc_addr = (*reloc_addr & 0xffc00000) | ((~value) >> 10); + else + *reloc_addr = (*reloc_addr & 0xffffe000) | (value & 0x3ff) + | 0x1c00; + break; +# endif +#endif #ifndef RTLD_BOOTSTRAP case R_SPARC_8: *(char *) reloc_addr = value; diff --git a/sysdeps/sparc/sparc32/elf/configure.in b/sysdeps/sparc/sparc32/elf/configure.in new file mode 100644 index 0000000000..0c0b5121e5 --- /dev/null +++ b/sysdeps/sparc/sparc32/elf/configure.in @@ -0,0 +1,43 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/sparc/sparc32/elf. + +if test "$usetls" != no; then +# Check for support of thread-local storage handling in assembler and linker. +AC_CACHE_CHECK(for sparc32 TLS support, libc_cv_sparc32_tls, [dnl +cat > conftest.s <<\EOF + .section ".tdata", "awT", @progbits + .globl foo +foo: .word 1 + .section ".tbss", "awT", @nobits + .globl bar +bar: .skip 4 + .text +baz: sethi %tgd_hi22(foo), %l1 + add %l1, %tgd_lo10(foo), %l1 + add %l7, %l1, %o0, %tgd_add(foo) + call __tls_get_addr, %tgd_call(foo) + sethi %tldm_hi22(bar), %l1 + add %l1, %tldm_lo10(bar), %l1 + add %l7, %l1, %o0, %tldm_add(bar) + call __tls_get_addr, %tldm_call(bar) + sethi %tldo_hix22(bar), %l1 + xor %l1, %tldo_lox10(bar), %l1 + add %o0, %l1, %l1, %tldo_add(bar) + sethi %tie_hi22(foo), %l1 + add %l1, %tie_lo10(foo), %l1 + ld [%l7 + %l1], %l1, %tie_ld(foo) + add %g7, %l1, %l1, %tie_add(foo) + sethi %tle_hix22(foo), %l1 + xor %l1, %tle_lox10(foo), %l1 +EOF +dnl +if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then + libc_cv_sparc32_tls=yes +else + libc_cv_sparc32_tls=no +fi +rm -f conftest*]) +if test $libc_cv_sparc32_tls = yes; then + AC_DEFINE(HAVE_TLS_SUPPORT) +fi +fi diff --git a/sysdeps/sparc/sparc32/memchr.S b/sysdeps/sparc/sparc32/memchr.S index d742a07bd7..490c431358 100644 --- a/sysdeps/sparc/sparc32/memchr.S +++ b/sysdeps/sparc/sparc32/memchr.S @@ -1,7 +1,7 @@ /* memchr (str, ch, n) -- Return pointer to first occurrence of CH in STR less than N. For SPARC v7. - Copyright (C) 1996,1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996, 1999, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jj@ultra.linux.cz> and David S. Miller <davem@caip.rutgers.edu>. @@ -67,23 +67,23 @@ ENTRY(__memchr) andcc %o1, 0xff, %o1 - sll %o1, 8, %g7 + sll %o1, 8, %g6 andcc %o0, 3, %g0 - or %o1, %g7, %g7 - sll %g7, 16, %o3 + or %o1, %g6, %g6 + sll %g6, 16, %o3 bne 0b - or %o3, %g7, %g2 + or %o3, %g6, %g2 sethi %hi(0x80808080), %o4 or %o4, %lo(0x80808080), %o3 4: sethi %hi(0x01010101), %o5 5: and %o2, 3, %g1 7: andcc %o2, 0xfffffffc, %o2 be 0f - or %o5, %lo(0x01010101), %g7 + or %o5, %lo(0x01010101), %g6 ld [%o0], %g4 6: xor %g4, %g2, %g5 add %o0, 4, %o0 - sub %g5, %g7, %g5 + sub %g5, %g6, %g5 andcc %g5, %o3, %g0 bne 8f subcc %o2, 4, %o2 diff --git a/sysdeps/sparc/sparc32/memcpy.S b/sysdeps/sparc/sparc32/memcpy.S index f4252d0bf4..43e19b88b5 100644 --- a/sysdeps/sparc/sparc32/memcpy.S +++ b/sysdeps/sparc/sparc32/memcpy.S @@ -1,6 +1,6 @@ /* Copy SIZE bytes from SRC to DEST. For SPARC v7. - Copyright (C) 1996, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1999, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David S. Miller <davem@caip.rutgers.edu>, Eddie C. Dost <ecd@skynet.be> and @@ -196,7 +196,7 @@ ENTRY(memmove) st %o4, [%o0 - 4] sub %o1, 4, %o1 sub %o0, 4, %o0 -2: andcc %g1, 0xffffff80, %g7 +2: andcc %g1, 0xffffff80, %g6 be 3f andcc %o0, 4, %g0 @@ -205,23 +205,23 @@ ENTRY(memmove) RMOVE_BIGCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) RMOVE_BIGCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) RMOVE_BIGCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) - subcc %g7, 128, %g7 + subcc %g6, 128, %g6 sub %o1, 128, %o1 bne 5b sub %o0, 128, %o0 -3: andcc %g1, 0x70, %g7 +3: andcc %g1, 0x70, %g6 be 72f andcc %g1, 8, %g0 - srl %g7, 1, %o4 + srl %g6, 1, %o4 mov %o7, %g2 - add %g7, %o4, %o4 + add %g6, %o4, %o4 101: call 100f - sub %o1, %g7, %o1 + sub %o1, %g6, %o1 mov %g2, %o7 jmpl %o5 + (72f - 101b), %g0 - sub %o0, %g7, %o0 + sub %o0, %g6, %o0 71: RMOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g4, g5) RMOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g4, g5) @@ -264,23 +264,23 @@ ENTRY(memmove) RMOVE_BIGALIGNCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) RMOVE_BIGALIGNCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) RMOVE_BIGALIGNCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) - subcc %g7, 128, %g7 + subcc %g6, 128, %g6 sub %o1, 128, %o1 bne 74b sub %o0, 128, %o0 - andcc %g1, 0x70, %g7 + andcc %g1, 0x70, %g6 be 72b andcc %g1, 8, %g0 - srl %g7, 1, %o4 + srl %g6, 1, %o4 mov %o7, %g2 - add %g7, %o4, %o4 + add %g6, %o4, %o4 102: call 100f - sub %o1, %g7, %o1 + sub %o1, %g6, %o1 mov %g2, %o7 jmpl %o5 + (72b - 102b), %g0 - sub %o0, %g7, %o0 + sub %o0, %g6, %o0 75: and %o2, 0xe, %o3 mov %o7, %g2 @@ -351,7 +351,7 @@ ENTRY(memmove) sll %g2, 3, %g4 mov 32, %g2 be 4f - sub %g2, %g4, %g7 + sub %g2, %g4, %g6 blu 3f cmp %g3, 8 @@ -386,22 +386,22 @@ ENTRY(memmove) ld [%o1 + 12], %o3 5: sll %o5, %g4, %g2 - srl %g1, %g7, %g5 + srl %g1, %g6, %g5 or %g2, %g5, %g2 st %g2, [%o0 + 12] 6: ld [%o1 + 8], %o4 sll %o3, %g4, %g2 - srl %o5, %g7, %g5 + srl %o5, %g6, %g5 or %g2, %g5, %g2 st %g2, [%o0 + 8] 7: ld [%o1 + 4], %g1 sll %o4, %g4, %g2 - srl %o3, %g7, %g5 + srl %o3, %g6, %g5 or %g2, %g5, %g2 st %g2, [%o0 + 4] 8: ld [%o1], %o5 sll %g1, %g4, %g2 - srl %o4, %g7, %g5 + srl %o4, %g6, %g5 addcc %g3, -4, %g3 or %g2, %g5, %g2 add %o1, -16, %o1 @@ -410,7 +410,7 @@ ENTRY(memmove) bne,a 5b ld [%o1 + 12], %o3 sll %o5, %g4, %g2 - srl %g1, %g7, %g5 + srl %g1, %g6, %g5 srl %g4, 3, %g3 or %g2, %g5, %g2 add %o1, %g3, %o1 @@ -471,7 +471,7 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ st %o4, [%o0] add %o1, 4, %o1 add %o0, 4, %o0 -2: andcc %g1, 0xffffff80, %g7 +2: andcc %g1, 0xffffff80, %g6 be 3f andcc %o0, 4, %g0 @@ -480,20 +480,20 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ MOVE_BIGCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) - subcc %g7, 128, %g7 + subcc %g6, 128, %g6 add %o1, 128, %o1 bne 5b add %o0, 128, %o0 -3: andcc %g1, 0x70, %g7 +3: andcc %g1, 0x70, %g6 be 80f andcc %g1, 8, %g0 - srl %g7, 1, %o4 + srl %g6, 1, %o4 mov %o7, %g2 - add %g7, %o4, %o4 - add %o1, %g7, %o1 + add %g6, %o4, %o4 + add %o1, %g6, %o1 104: call 100f - add %o0, %g7, %o0 + add %o0, %g6, %o0 jmpl %o5 + (80f - 104b), %g0 mov %g2, %o7 @@ -541,21 +541,21 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ MOVE_BIGALIGNCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGALIGNCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGALIGNCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) - subcc %g7, 128, %g7 + subcc %g6, 128, %g6 add %o1, 128, %o1 bne 82b add %o0, 128, %o0 - andcc %g1, 0x70, %g7 + andcc %g1, 0x70, %g6 be 84f andcc %g1, 8, %g0 mov %o7, %g2 111: call 110f - add %o1, %g7, %o1 + add %o1, %g6, %o1 mov %g2, %o7 jmpl %o5 + (84f - 111b), %g0 - add %o0, %g7, %o0 + add %o0, %g6, %o0 83: MOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3, g4, g5) MOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3, g4, g5) @@ -626,7 +626,7 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ sll %g2, 3, %g4 mov 32, %g2 be 4f - sub %g2, %g4, %g7 + sub %g2, %g4, %g6 blu 3f cmp %g3, 0x8 @@ -661,22 +661,22 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ ld [%o1], %o3 add %g3, -1, %g3 5: sll %o5, %g4, %g2 - srl %g1, %g7, %g5 + srl %g1, %g6, %g5 or %g2, %g5, %g2 st %g2, [%o0] 7: ld [%o1 + 4], %o4 sll %g1, %g4, %g2 - srl %o3, %g7, %g5 + srl %o3, %g6, %g5 or %g2, %g5, %g2 st %g2, [%o0 + 4] 8: ld [%o1 + 8], %o5 sll %o3, %g4, %g2 - srl %o4, %g7, %g5 + srl %o4, %g6, %g5 or %g2, %g5, %g2 st %g2, [%o0 + 8] 9: ld [%o1 + 12], %g1 sll %o4, %g4, %g2 - srl %o5, %g7, %g5 + srl %o5, %g6, %g5 addcc %g3, -4, %g3 or %g2, %g5, %g2 add %o1, 16, %o1 @@ -685,8 +685,8 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ bne,a 5b ld [%o1], %o3 10: sll %o5, %g4, %g2 - srl %g1, %g7, %g5 - srl %g7, 3, %g3 + srl %g1, %g6, %g5 + srl %g6, 3, %g3 or %g2, %g5, %g2 sub %o1, %g3, %o1 andcc %o2, 2, %g0 @@ -758,10 +758,10 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ be 41f and %o2, 0xffffffc0, %o3 ld [%o0 - 7], %o4 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) - SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) - SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) - SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) +4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) + SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) + SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) + SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 4b @@ -770,7 +770,7 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ andcc %o2, 0x30, %o3 be,a 1f srl %g1, 16, %g2 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) +4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b @@ -793,10 +793,10 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ be 42f and %o2, 0xffffffc0, %o3 ld [%o0 - 6], %o4 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) - SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) - SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) - SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) +4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) + SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) + SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) + SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 4b @@ -805,7 +805,7 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ andcc %o2, 0x30, %o3 be,a 1f srl %g1, 16, %g2 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) +4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b @@ -830,10 +830,10 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ ld [%o0 - 1], %o4 add %o0, 4, %o0 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, -1) - SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, -1) - SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, -1) - SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, -1) +4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) + SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) + SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) + SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 4b @@ -842,7 +842,7 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ andcc %o2, 0x30, %o3 be,a 1f srl %g1, 24, %g2 -4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, -1) +4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b @@ -852,10 +852,10 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ 1: st %o4, [%o0 - 5] b 88f stb %g2, [%o0 - 1] -41: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) - SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) - SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) - SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) +41: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) + SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) + SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) + SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 41b @@ -864,7 +864,7 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ andcc %o2, 0x30, %o3 be,a 1f srl %g1, 16, %g2 -4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) +4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b @@ -875,10 +875,10 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ srl %g1, 8, %g4 b 88f stb %g4, [%o0 - 1] -43: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, 3) - SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, 3) - SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, 3) - SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, 3) +43: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) + SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) + SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) + SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 43b @@ -887,7 +887,7 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ andcc %o2, 0x30, %o3 be,a 1f srl %g1, 24, %g2 -4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, 3) +4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b @@ -897,10 +897,10 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ 1: stb %g2, [%o0 + 3] b 88f add %o0, 4, %o0 -42: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) - SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) - SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) - SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) +42: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) + SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) + SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) + SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 42b @@ -909,7 +909,7 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ andcc %o2, 0x30, %o3 be,a 1f srl %g1, 16, %g2 -4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) +4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b @@ -964,5 +964,5 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ 100: retl sub %o7, %o4, %o5 110: retl - sub %o7, %g7, %o5 + sub %o7, %g6, %o5 END(memcpy) diff --git a/sysdeps/sparc/sparc32/sparcv9/hp-timing.h b/sysdeps/sparc/sparc32/sparcv9/hp-timing.h index 65b9d1fb2c..cc262882ab 100644 --- a/sysdeps/sparc/sparc32/sparcv9/hp-timing.h +++ b/sysdeps/sparc/sparc32/sparcv9/hp-timing.h @@ -1,5 +1,5 @@ /* High precision, low overhead timing functions. sparcv9 version. - Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David S. Miller <davem@redhat.com>, 2001. @@ -58,17 +58,17 @@ typedef unsigned long long int hp_timing_t; do { \ hp_timing_t __diff = (Diff) - GL(dl_hp_timing_overhead); \ __asm__ __volatile__("srl %L0, 0, %%g1\n\t" \ - "sllx %H0, 32, %%g7\n\t" \ - "or %%g1, %%g7, %%g1\n\t" \ + "sllx %H0, 32, %%g6\n\t" \ + "or %%g1, %%g6, %%g1\n\t" \ "1: ldx [%1], %%g5\n\t" \ - "add %%g5, %%g1, %%g7\n\t" \ - "casx [%1], %%g5, %%g7\n\t" \ - "cmp %%g5, %%g7\n\t" \ + "add %%g5, %%g1, %%g6\n\t" \ + "casx [%1], %%g5, %%g6\n\t" \ + "cmp %%g5, %%g6\n\t" \ "bne,pn %%xcc, 1b\n\t" \ " nop" \ : /* no outputs */ \ : "r" (__diff), "r" (&(Sum)) \ - : "memory", "g1", "g5", "g7"); \ + : "memory", "g1", "g5", "g6"); \ } while(0) #define HP_TIMING_ACCUM_NT(Sum, Diff) (Sum) += (Diff) diff --git a/sysdeps/sparc/sparc32/strcat.S b/sysdeps/sparc/sparc32/strcat.S index 888fb54090..434d8d03c7 100644 --- a/sysdeps/sparc/sparc32/strcat.S +++ b/sysdeps/sparc/sparc32/strcat.S @@ -1,6 +1,6 @@ /* strcat (dest, src) -- Append SRC on the end of DEST. For SPARC v7. - Copyright (C) 1996, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1999, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jj@ultra.linux.cz>. @@ -183,7 +183,7 @@ ENTRY(strcat) srl %o5, 8, %g5 sth %g5, [%o0 + 2] 1: add %o0, 4, %o0 -4: sll %o5, 24, %g7 +4: sll %o5, 24, %g6 ld [%o1], %o5 add %o1, 4, %o1 srl %o5, 8, %g5 @@ -191,7 +191,7 @@ ENTRY(strcat) #ifdef EIGHTBIT_NOT_RARE andn %o4, %o5, %o4 #endif - or %g5, %g7, %g5 + or %g5, %g6, %g5 andcc %o4, %o3, %g0 be,a 1b st %g5, [%o0] @@ -249,7 +249,7 @@ ENTRY(strcat) sth %g5, [%o0] sub %o0, 2, %o0 1: add %o0, 4, %o0 -4: sll %o5, 16, %g7 +4: sll %o5, 16, %g6 ld [%o1], %o5 add %o1, 4, %o1 srl %o5, 16, %g5 @@ -257,7 +257,7 @@ ENTRY(strcat) #ifdef EIGHTBIT_NOT_RARE andn %o4, %o5, %o4 #endif - or %g5, %g7, %g5 + or %g5, %g6, %g5 andcc %o4, %o3, %g0 be,a 1b st %g5, [%o0] @@ -305,7 +305,7 @@ ENTRY(strcat) stb %g5, [%o0] sub %o0, 3, %o0 1: add %o0, 4, %o0 -4: sll %o5, 8, %g7 +4: sll %o5, 8, %g6 ld [%o1], %o5 add %o1, 4, %o1 srl %o5, 24, %g5 @@ -313,7 +313,7 @@ ENTRY(strcat) #ifdef EIGHTBIT_NOT_RARE andn %o4, %o5, %o4 #endif - or %g5, %g7, %g5 + or %g5, %g6, %g5 andcc %o4, %o3, %g0 be 1b st %g5, [%o0] diff --git a/sysdeps/sparc/sparc32/strchr.S b/sysdeps/sparc/sparc32/strchr.S index adfaa47371..931ea890cd 100644 --- a/sysdeps/sparc/sparc32/strchr.S +++ b/sysdeps/sparc/sparc32/strchr.S @@ -1,6 +1,6 @@ /* strchr (str, ch) -- Return pointer to first occurrence of CH in STR. For SPARC v7. - Copyright (C) 1996, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1999, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jj@ultra.linux.cz> and David S. Miller <davem@caip.rutgers.edu>. @@ -86,9 +86,9 @@ ENTRY(strchr) 6: xor %g4, %g2, %g5 sub %g4, %o2, %o4 #ifdef EIGHTBIT_NOT_RARE - sub %g5, %o2, %g7 + sub %g5, %o2, %g6 andn %o4, %g4, %o4 - andn %g7, %g5, %g5 + andn %g6, %g5, %g5 #else sub %g5, %o2, %g5 #endif @@ -237,9 +237,9 @@ ENTRY(strrchr) 7: xor %g4, %g2, %g5 sub %g4, %o2, %o4 #ifdef EIGHTBIT_NOT_RARE - sub %g5, %o2, %g7 + sub %g5, %o2, %g6 andn %o4, %g4, %o4 - andn %g7, %g5, %g5 + andn %g6, %g5, %g5 #else sub %g5, %o2, %g5 #endif diff --git a/sysdeps/sparc/sparc32/strcmp.S b/sysdeps/sparc/sparc32/strcmp.S index 265f18fb96..90e6f67085 100644 --- a/sysdeps/sparc/sparc32/strcmp.S +++ b/sysdeps/sparc/sparc32/strcmp.S @@ -1,6 +1,6 @@ /* Compare two strings for differences. For SPARC v7. - Copyright (C) 1996, 97, 99 Free Software Foundation, Inc. + Copyright (C) 1996, 97, 99, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jj@ultra.linux.cz>. @@ -144,13 +144,13 @@ ENTRY(strcmp) andn %i1, 3, %i1 mov 32, %l1 ld [%i1], %l2 - mov -1, %g7 + mov -1, %g6 add %i1, 4, %i1 sub %l1, %g3, %l1 - sll %g7, %g3, %g7 + sll %g6, %g3, %g6 1: sll %l2, %g3, %g5 - and %i4, %g7, %l3 + and %i4, %g6, %l3 sub %i4, %i2, %g1 #ifdef EIGHTBIT_NOT_RARE andn %g1, %i4, %g1 diff --git a/sysdeps/sparc/sparc32/strcpy.S b/sysdeps/sparc/sparc32/strcpy.S index 8ae6455e1d..c0572d9b50 100644 --- a/sysdeps/sparc/sparc32/strcpy.S +++ b/sysdeps/sparc/sparc32/strcpy.S @@ -1,6 +1,6 @@ /* Copy SRC to DEST returning DEST. For SPARC v7. - Copyright (C) 1996, 1999 Free Software Foundation, Inc. + Copyright (C) 1996, 1999, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jj@ultra.linux.cz>. @@ -125,12 +125,12 @@ ENTRY(strcpy) srl %o5, 8, %g5 sth %g5, [%o0 + 2] 1: add %o0, 4, %o0 -4: sll %o5, 24, %g7 +4: sll %o5, 24, %g6 ld [%o1], %o5 add %o1, 4, %o1 srl %o5, 8, %g5 sub %o5, %o2, %o4 - or %g5, %g7, %g5 + or %g5, %g6, %g5 andcc %o4, %o3, %g0 be,a 1b st %g5, [%o0] @@ -184,12 +184,12 @@ ENTRY(strcpy) sth %g5, [%o0] sub %o0, 2, %o0 1: add %o0, 4, %o0 -4: sll %o5, 16, %g7 +4: sll %o5, 16, %g6 ld [%o1], %o5 add %o1, 4, %o1 srl %o5, 16, %g5 sub %o5, %o2, %o4 - or %g5, %g7, %g5 + or %g5, %g6, %g5 andcc %o4, %o3, %g0 be,a 1b st %g5, [%o0] @@ -234,12 +234,12 @@ ENTRY(strcpy) stb %g5, [%o0] sub %o0, 3, %o0 1: add %o0, 4, %o0 -4: sll %o5, 8, %g7 +4: sll %o5, 8, %g6 ld [%o1], %o5 add %o1, 4, %o1 srl %o5, 24, %g5 sub %o5, %o2, %o4 - or %g5, %g7, %g5 + or %g5, %g6, %g5 andcc %o4, %o3, %g0 be 1b st %g5, [%o0] |