diff options
Diffstat (limited to 'sysdeps/sparc/sparc64')
184 files changed, 0 insertions, 14413 deletions
diff --git a/sysdeps/sparc/sparc64/Implies b/sysdeps/sparc/sparc64/Implies deleted file mode 100644 index 7abc50efcc..0000000000 --- a/sysdeps/sparc/sparc64/Implies +++ /dev/null @@ -1,7 +0,0 @@ -wordsize-64 -# SPARC uses IEEE 754 floating point. -ieee754/ldbl-128 -ieee754/dbl-64/wordsize-64 -ieee754/dbl-64 -ieee754/flt-32 -sparc/sparc64/soft-fp diff --git a/sysdeps/sparc/sparc64/Makefile b/sysdeps/sparc/sparc64/Makefile deleted file mode 100644 index a5e403630e..0000000000 --- a/sysdeps/sparc/sparc64/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -sysdep-CFLAGS += -Wa,-Av9a -mvis - -ifeq ($(subdir),string) -sysdep_routines += align-cpy -endif - -ifeq ($(have-as-vis3),yes) -ASFLAGS-.o += -Wa,-Av9d -ASFLAGS-.os += -Wa,-Av9d -ASFLAGS-.op += -Wa,-Av9d -ASFLAGS-.oS += -Wa,-Av9d -endif - -# nscd uses atomic_spin_nop which in turn requires cpu_relax -ifeq ($(subdir),nscd) -routines += cpu_relax -endif - -ifeq ($(subdir),nptl) -libpthread-routines += cpu_relax -endif diff --git a/sysdeps/sparc/sparc64/Versions b/sysdeps/sparc/sparc64/Versions deleted file mode 100644 index 4cef7bcc71..0000000000 --- a/sysdeps/sparc/sparc64/Versions +++ /dev/null @@ -1,14 +0,0 @@ -libc { - GLIBC_2.1.1 { - # SPARC v9 SYSV ABI helper functions - __align_cpy_1; __align_cpy_2; __align_cpy_4; - __align_cpy_8; __align_cpy_16; - } -} -libm { - GLIBC_2.1 { - # A generic bug got this omitted from other configurations' version - # sets, but we always had it. - exp2l; - } -} diff --git a/sysdeps/sparc/sparc64/add_n.S b/sysdeps/sparc/sparc64/add_n.S deleted file mode 100644 index e7f7c46c42..0000000000 --- a/sysdeps/sparc/sparc64/add_n.S +++ /dev/null @@ -1,57 +0,0 @@ -/* SPARC v9 __mpn_add_n -- Add two limb vectors of the same length > 0 and - store sum in a third limb vector. - - Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see <http://www.gnu.org/licenses/>. */ - - -#include <sysdep.h> - - -/* INPUT PARAMETERS - res_ptr %o0 - s1_ptr %o1 - s2_ptr %o2 - size %o3 */ - - -ENTRY(__mpn_add_n) - - sub %g0,%o3,%g5 - sllx %o3,3,%g1 - add %o1,%g1,%o1 ! make s1_ptr point at end - add %o2,%g1,%o2 ! make s2_ptr point at end - add %o0,%g1,%o0 ! make res_ptr point at end - mov 0,%o4 ! clear carry variable - sllx %g5,3,%o5 ! compute initial address index - -1: ldx [%o2+%o5],%g1 ! load s2 limb - add %g5,1,%g5 ! increment loop count - ldx [%o1+%o5],%o3 ! load s1 limb - addcc %g1,%o4,%g1 ! add s2 limb and carry variable - movcc %xcc,0,%o4 ! if carry-out, o4 was 1; clear it - addcc %g1,%o3,%g1 ! add s1 limb to sum - stx %g1,[%o0+%o5] ! store result - add %o5,8,%o5 ! increment address index - brnz,pt %g5,1b - movcs %xcc,1,%o4 ! if s1 add gave carry, record it - - retl - mov %o4,%o0 - -END(__mpn_add_n) diff --git a/sysdeps/sparc/sparc64/addmul_1.S b/sysdeps/sparc/sparc64/addmul_1.S deleted file mode 100644 index 96450cc4c8..0000000000 --- a/sysdeps/sparc/sparc64/addmul_1.S +++ /dev/null @@ -1,83 +0,0 @@ -/* SPARC v9 __mpn_addmul_1 -- Multiply a limb vector with a single limb and - add the product to a second limb vector. - - Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - - -/* INPUT PARAMETERS - res_ptr o0 - s1_ptr o1 - size o2 - s2_limb o3 */ - - -ENTRY(__mpn_addmul_1) - save %sp,-192,%sp - - sub %g0,%i2,%o7 - mov 0,%o0 ! zero cy_limb - sllx %o7,3,%o7 - sethi %hi(0x80000000),%o2 - srl %i3,0,%o1 ! extract low 32 bits of s2_limb - sub %i1,%o7,%o3 - srlx %i3,32,%i3 ! extract high 32 bits of s2_limb - sub %i0,%o7,%o4 - add %o2,%o2,%o2 ! o2 = 0x100000000 - - ! hi ! - ! mid-1 ! - ! mid-2 ! - ! lo ! -1: - ldx [%o3+%o7],%g5 - srl %g5,0,%i0 ! zero hi bits - ldx [%o4+%o7],%l1 - srlx %g5,32,%g5 - mulx %o1,%i0,%i4 ! lo product - mulx %i3,%i0,%i1 ! mid-1 product - mulx %o1,%g5,%l2 ! mid-2 product - mulx %i3,%g5,%i5 ! hi product - srlx %i4,32,%i0 ! extract high 32 bits of lo product... - add %i1,%i0,%i1 ! ...and add it to the mid-1 product - addcc %i1,%l2,%i1 ! add mid products - mov 0,%l0 ! we need the carry from that add... - movcs %xcc,%o2,%l0 ! ...compute it and... - sllx %i1,32,%i0 ! align low bits of mid product - add %i5,%l0,%i5 ! ...add to bit 32 of the hi product - srl %i4,0,%g5 ! zero high 32 bits of lo product - add %i0,%g5,%i0 ! combine into low 64 bits of result - srlx %i1,32,%i1 ! extract high bits of mid product... - addcc %i0,%o0,%i0 ! add cy_limb to low 64 bits of result - add %i5,%i1,%i1 ! ...and add them to the high result - mov 0,%g5 - movcs %xcc,1,%g5 - addcc %l1,%i0,%i0 - stx %i0,[%o4+%o7] - add %g5,1,%l1 - movcs %xcc,%l1,%g5 - addcc %o7,8,%o7 - bne,pt %xcc,1b - add %i1,%g5,%o0 ! compute new cy_limb - - jmpl %i7+8, %g0 - restore %o0,%g0,%o0 - -END(__mpn_addmul_1) diff --git a/sysdeps/sparc/sparc64/align-cpy.S b/sysdeps/sparc/sparc64/align-cpy.S deleted file mode 100644 index e36799a405..0000000000 --- a/sysdeps/sparc/sparc64/align-cpy.S +++ /dev/null @@ -1,84 +0,0 @@ -/* Aligned copy routines specified by Sparc V9 ABI. - For 64-bit sparc. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - 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> - - .text - .align 8 -ENTRY(__align_cpy_8) -10: cmp %o0, %o1 - be,pn %xcc, 9f - mov %o0, %o3 - subcc %o2, 0x08, %o2 - be,pn %xcc, 8f -1: ldx [%o1 + 0x00], %o5 - ldx [%o1 + 0x08], %o4 - subcc %o2, 0x10, %o2 - add %o1, 0x10, %o1 - stx %o5, [%o3 + 0x00] - stx %o4, [%o3 + 0x08] - bg,pt %xcc, 1b - add %o3, 0x10, %o3 - bne,pn %xcc, 9f - nop - ldx [%o1 + 0x00], %o5 -8: stx %o5, [%o3 + 0x00] -9: retl - nop -END(__align_cpy_8) - - .align 8 -ENTRY(__align_cpy_4) -20: cmp %o0, %o1 - be,pn %xcc, 9f - mov %o0, %o3 - subcc %o2, 0x04, %o2 - be,pn %xcc, 8f -1: lduw [%o1 + 0x00], %o5 - lduw [%o1 + 0x04], %o4 - subcc %o2, 0x08, %o2 - add %o1, 0x08, %o1 - stw %o5, [%o3 + 0x00] - stw %o4, [%o3 + 0x04] - bg,pt %xcc, 1b - add %o3, 0x08, %o3 - bne,pn %xcc, 9f - nop - lduw [%o1 + 0x00], %o5 -8: stw %o5, [%o3 + 0x00] -9: retl - nop -END(__align_cpy_4) - - .align 8 -ENTRY(__align_cpy_2) - or %o0, %o1, %o3 - or %o2, %o3, %o3 - andcc %o3, 0x7, %g0 - be,pt %xcc, 10b - andcc %o3, 0x3, %g0 - be,pt %xcc, 20b - mov %o7, %g1 - call HIDDEN_JUMPTARGET(memcpy) - mov %o7, %g1 -END(__align_cpy_2) - -weak_alias (__align_cpy_8, __align_cpy_16) -weak_alias (__align_cpy_2, __align_cpy_1) diff --git a/sysdeps/sparc/sparc64/atomic-machine.h b/sysdeps/sparc/sparc64/atomic-machine.h deleted file mode 100644 index 72009329c3..0000000000 --- a/sysdeps/sparc/sparc64/atomic-machine.h +++ /dev/null @@ -1,129 +0,0 @@ -/* Atomic operations. sparc64 version. - Copyright (C) 2003-2017 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 <stdint.h> - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int16_t atomic16_t; -typedef uint16_t uatomic16_t; -typedef int_fast16_t atomic_fast16_t; -typedef uint_fast16_t uatomic_fast16_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef int64_t atomic64_t; -typedef uint64_t uatomic64_t; -typedef int_fast64_t atomic_fast64_t; -typedef uint_fast64_t uatomic_fast64_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -#define __HAVE_64B_ATOMICS 1 -#define USE_ATOMIC_COMPILER_BUILTINS 0 - -/* XXX Is this actually correct? */ -#define ATOMIC_EXCHANGE_USES_CAS 1 - - -#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \ - (abort (), (__typeof (*mem)) 0) - -#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ -({ \ - __typeof (*(mem)) __acev_tmp; \ - __typeof (mem) __acev_mem = (mem); \ - if (__builtin_constant_p (oldval) && (oldval) == 0) \ - __asm __volatile ("cas [%3], %%g0, %0" \ - : "=r" (__acev_tmp), "=m" (*__acev_mem) \ - : "m" (*__acev_mem), "r" (__acev_mem), \ - "0" (newval) : "memory"); \ - else \ - __asm __volatile ("cas [%4], %2, %0" \ - : "=r" (__acev_tmp), "=m" (*__acev_mem) \ - : "r" (oldval), "m" (*__acev_mem), "r" (__acev_mem), \ - "0" (newval) : "memory"); \ - __acev_tmp; }) - -#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \ -({ \ - __typeof (*(mem)) __acev_tmp; \ - __typeof (mem) __acev_mem = (mem); \ - if (__builtin_constant_p (oldval) && (oldval) == 0) \ - __asm __volatile ("casx [%3], %%g0, %0" \ - : "=r" (__acev_tmp), "=m" (*__acev_mem) \ - : "m" (*__acev_mem), "r" (__acev_mem), \ - "0" ((long) (newval)) : "memory"); \ - else \ - __asm __volatile ("casx [%4], %2, %0" \ - : "=r" (__acev_tmp), "=m" (*__acev_mem) \ - : "r" ((long) (oldval)), "m" (*__acev_mem), \ - "r" (__acev_mem), "0" ((long) (newval)) : "memory"); \ - __acev_tmp; }) - -#define atomic_exchange_acq(mem, newvalue) \ - ({ __typeof (*(mem)) __oldval, __val; \ - __typeof (mem) __memp = (mem); \ - __typeof (*(mem)) __value = (newvalue); \ - \ - if (sizeof (*(mem)) == 4) \ - __asm ("swap %0, %1" \ - : "=m" (*__memp), "=r" (__oldval) \ - : "m" (*__memp), "1" (__value) : "memory"); \ - else \ - { \ - __val = *__memp; \ - do \ - { \ - __oldval = __val; \ - __val = atomic_compare_and_exchange_val_acq (__memp, __value, \ - __oldval); \ - } \ - while (__builtin_expect (__val != __oldval, 0)); \ - } \ - __oldval; }) - -#define atomic_compare_and_exchange_val_24_acq(mem, newval, oldval) \ - atomic_compare_and_exchange_val_acq (mem, newval, oldval) - -#define atomic_exchange_24_rel(mem, newval) \ - atomic_exchange_rel (mem, newval) - -#define atomic_full_barrier() \ - __asm __volatile ("membar #LoadLoad | #LoadStore" \ - " | #StoreLoad | #StoreStore" : : : "memory") -#define atomic_read_barrier() \ - __asm __volatile ("membar #LoadLoad | #LoadStore" : : : "memory") -#define atomic_write_barrier() \ - __asm __volatile ("membar #LoadStore | #StoreStore" : : : "memory") - -extern void __cpu_relax (void); -#define atomic_spin_nop() __cpu_relax () diff --git a/sysdeps/sparc/sparc64/backtrace.h b/sysdeps/sparc/sparc64/backtrace.h deleted file mode 100644 index b9c95c51cf..0000000000 --- a/sysdeps/sparc/sparc64/backtrace.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Private macros for guiding the backtrace implementation, sparc64 - version. */ - -#define backtrace_flush_register_windows() \ - asm volatile ("flushw") - -#define BACKTRACE_STACK_BIAS STACK_BIAS diff --git a/sysdeps/sparc/sparc64/bits/wordsize.h b/sysdeps/sparc/sparc64/bits/wordsize.h deleted file mode 100644 index 2f66f10d72..0000000000 --- a/sysdeps/sparc/sparc64/bits/wordsize.h +++ /dev/null @@ -1,11 +0,0 @@ -/* Determine the wordsize from the preprocessor defines. */ - -#if defined __arch64__ || defined __sparcv9 -# define __WORDSIZE 64 -# define __WORDSIZE_TIME64_COMPAT32 1 -#else -# define __WORDSIZE 32 -# define __WORDSIZE_TIME64_COMPAT32 0 -# define __WORDSIZE32_SIZE_ULONG 0 -# define __WORDSIZE32_PTRDIFF_LONG 0 -#endif diff --git a/sysdeps/sparc/sparc64/bzero.c b/sysdeps/sparc/sparc64/bzero.c deleted file mode 100644 index 37f0f6f993..0000000000 --- a/sysdeps/sparc/sparc64/bzero.c +++ /dev/null @@ -1 +0,0 @@ -/* bzero is in memset.S */ diff --git a/sysdeps/sparc/sparc64/cpu_relax.S b/sysdeps/sparc/sparc64/cpu_relax.S deleted file mode 100644 index 5271164607..0000000000 --- a/sysdeps/sparc/sparc64/cpu_relax.S +++ /dev/null @@ -1,67 +0,0 @@ -/* CPU strand yielding for busy loops. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - - .text -__cpu_relax_generic: - rd %ccr, %g0 - rd %ccr, %g0 - rd %ccr, %g0 - retl - nop - .size __cpu_relax_generic,.-__cpu_relax_generic - -__cpu_relax_pause: - wr %g0, 128, %asr27 - retl - nop - .size __cpu_relax_pause,.-__cpu_relax_pause - -ENTRY(__cpu_relax) - .type __cpu_relax, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_PAUSE, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__cpu_relax_pause), %o1 - xor %o1, %gdop_lox10(__cpu_relax_pause), %o1 -# else - set __cpu_relax_pause, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__cpu_relax_generic), %o1 - xor %o1, %gdop_lox10(__cpu_relax_generic), %o1 -# else - set __cpu_relax_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__cpu_relax) diff --git a/sysdeps/sparc/sparc64/dl-irel.h b/sysdeps/sparc/sparc64/dl-irel.h deleted file mode 100644 index dfd4637557..0000000000 --- a/sysdeps/sparc/sparc64/dl-irel.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - SPARC 64-bit version. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include <stdio.h> -#include <unistd.h> -#include <dl-plt.h> -#include <ldsodefs.h> - -#define ELF_MACHINE_IRELA 1 - -static inline Elf64_Addr -__attribute ((always_inline)) -elf_ifunc_invoke (Elf64_Addr addr) -{ - return ((Elf64_Addr (*) (int)) (addr)) (GLRO(dl_hwcap)); -} - -static inline void -__attribute ((always_inline)) -elf_irela (const Elf64_Rela *reloc) -{ - unsigned int r_type = (reloc->r_info & 0xff); - - if (__glibc_likely (r_type == R_SPARC_IRELATIVE)) - { - Elf64_Addr *const reloc_addr = (void *) reloc->r_offset; - Elf64_Addr value = elf_ifunc_invoke(reloc->r_addend); - *reloc_addr = value; - } - else if (__glibc_likely (r_type == R_SPARC_JMP_IREL)) - { - Elf64_Addr *const reloc_addr = (void *) reloc->r_offset; - Elf64_Addr value = elf_ifunc_invoke(reloc->r_addend); - struct link_map map = { .l_addr = 0 }; - - /* 'high' is always zero, for large PLT entries the linker - emits an R_SPARC_IRELATIVE. */ - sparc64_fixup_plt (&map, reloc, reloc_addr, value, 0, 0); - } - else if (r_type == R_SPARC_NONE) - ; - else - __libc_fatal ("unexpected reloc type in static binary"); -} - -#endif /* dl-irel.h */ diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h deleted file mode 100644 index 1b59d78a25..0000000000 --- a/sysdeps/sparc/sparc64/dl-machine.h +++ /dev/null @@ -1,685 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. Sparc64 version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef dl_machine_h -#define dl_machine_h - -#define ELF_MACHINE_NAME "sparc64" - -#include <string.h> -#include <sys/param.h> -#include <ldsodefs.h> -#include <sysdep.h> -#include <dl-plt.h> - -#define ELF64_R_TYPE_ID(info) ((info) & 0xff) -#define ELF64_R_TYPE_DATA(info) ((info) >> 8) - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf64_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_SPARCV9; -} - -/* We have to do this because elf_machine_{dynamic,load_address} can be - invoked from functions that have no GOT references, and thus the compiler - has no obligation to load the PIC register. */ -#define LOAD_PIC_REG(PIC_REG) \ -do { Elf64_Addr tmp; \ - __asm("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" \ - "rd %%pc, %0\n\t" \ - "add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t" \ - "add %0, %1, %0" \ - : "=r" (PIC_REG), "=r" (tmp)); \ -} while (0) - -/* Return the link-time address of _DYNAMIC. Conveniently, this is the - first element of the GOT. This must be inlined in a function which - uses global data. */ -static inline Elf64_Addr -elf_machine_dynamic (void) -{ - register Elf64_Addr *elf_pic_register __asm__("%l7"); - - LOAD_PIC_REG (elf_pic_register); - - return *elf_pic_register; -} - -/* Return the run-time load address of the shared object. */ -static inline Elf64_Addr -elf_machine_load_address (void) -{ - register Elf32_Addr *pc __asm ("%o7"); - register Elf64_Addr *got __asm ("%l7"); - - __asm ("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" - "call 1f\n\t" - " add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t" - "call _DYNAMIC\n\t" - "call _GLOBAL_OFFSET_TABLE_\n" - "1:\tadd %1, %0, %1\n\t" : "=r" (pc), "=r" (got)); - - /* got is now l_addr + _GLOBAL_OFFSET_TABLE_ - *got is _DYNAMIC - pc[2]*4 is l_addr + _DYNAMIC - (long)pc - 8 - pc[3]*4 is l_addr + _GLOBAL_OFFSET_TABLE_ - (long)pc - 12 */ - return (Elf64_Addr) got - *got + (Elf32_Sword) ((pc[2] - pc[3]) * 4) - 4; -} - -static inline Elf64_Addr __attribute__ ((always_inline)) -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf64_Rela *reloc, - Elf64_Addr *reloc_addr, Elf64_Addr value) -{ - sparc64_fixup_plt (map, reloc, reloc_addr, value + reloc->r_addend, - reloc->r_addend, 1); - return value; -} - -/* Return the final value of a plt relocation. */ -static inline Elf64_Addr -elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc, - Elf64_Addr value) -{ - /* Don't add addend here, but in elf_machine_fixup_plt instead. - value + reloc->r_addend is the value which should actually be - stored into .plt data slot. */ - return value; -} - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so - PLT entries should not be allowed to define the value. - ELF_RTYPE_CLASS_COPY 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 \ - || ((type) >= R_SPARC_TLS_GD_HI22 && (type) <= R_SPARC_TLS_TPOFF64)) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_SPARC_COPY) * ELF_RTYPE_CLASS_COPY)) - -/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ -#define ELF_MACHINE_JMP_SLOT R_SPARC_JMP_SLOT - -/* The SPARC never uses Elf64_Rel relocations. */ -#define ELF_MACHINE_NO_REL 1 -#define ELF_MACHINE_NO_RELA 0 - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - if (l->l_info[DT_JMPREL] && lazy) - { - extern void _dl_runtime_resolve_0 (void); - extern void _dl_runtime_resolve_1 (void); - extern void _dl_runtime_profile_0 (void); - extern void _dl_runtime_profile_1 (void); - Elf64_Addr res0_addr, res1_addr; - unsigned int *plt = (void *) D_PTR (l, l_info[DT_PLTGOT]); - - if (__builtin_expect(profile, 0)) - { - res0_addr = (Elf64_Addr) &_dl_runtime_profile_0; - res1_addr = (Elf64_Addr) &_dl_runtime_profile_1; - - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - GL(dl_profile_map) = l; - } - else - { - res0_addr = (Elf64_Addr) &_dl_runtime_resolve_0; - res1_addr = (Elf64_Addr) &_dl_runtime_resolve_1; - } - - /* PLT0 looks like: - - sethi %uhi(_dl_runtime_{resolve,profile}_0), %g4 - sethi %hi(_dl_runtime_{resolve,profile}_0), %g5 - or %g4, %ulo(_dl_runtime_{resolve,profile}_0), %g4 - or %g5, %lo(_dl_runtime_{resolve,profile}_0), %g5 - sllx %g4, 32, %g4 - add %g4, %g5, %g5 - jmpl %g5, %g4 - nop - */ - - plt[0] = 0x09000000 | (res0_addr >> (64 - 22)); - plt[1] = 0x0b000000 | ((res0_addr >> 10) & 0x003fffff); - plt[2] = 0x88112000 | ((res0_addr >> 32) & 0x3ff); - plt[3] = 0x8a116000 | (res0_addr & 0x3ff); - plt[4] = 0x89293020; - plt[5] = 0x8a010005; - plt[6] = 0x89c14000; - plt[7] = 0x01000000; - - /* PLT1 looks like: - - sethi %uhi(_dl_runtime_{resolve,profile}_1), %g4 - sethi %hi(_dl_runtime_{resolve,profile}_1), %g5 - or %g4, %ulo(_dl_runtime_{resolve,profile}_1), %g4 - or %g5, %lo(_dl_runtime_{resolve,profile}_1), %g5 - sllx %g4, 32, %g4 - add %g4, %g5, %g5 - jmpl %g5, %g4 - nop - */ - - plt[8] = 0x09000000 | (res1_addr >> (64 - 22)); - plt[9] = 0x0b000000 | ((res1_addr >> 10) & 0x003fffff); - plt[10] = 0x88112000 | ((res1_addr >> 32) & 0x3ff); - plt[11] = 0x8a116000 | (res1_addr & 0x3ff); - plt[12] = 0x89293020; - plt[13] = 0x8a010005; - plt[14] = 0x89c14000; - plt[15] = 0x01000000; - - /* Now put the magic cookie at the beginning of .PLT2 - Entry .PLT3 is unused by this implementation. */ - *((struct link_map **)(&plt[16])) = l; - - if (__builtin_expect (l->l_info[VALIDX(DT_GNU_PRELINKED)] != NULL, 0) - || __builtin_expect (l->l_info [VALIDX (DT_GNU_LIBLISTSZ)] != NULL, 0)) - { - /* Need to reinitialize .plt to undo prelinking. */ - Elf64_Rela *rela = (Elf64_Rela *) D_PTR (l, l_info[DT_JMPREL]); - Elf64_Rela *relaend - = (Elf64_Rela *) ((char *) rela - + l->l_info[DT_PLTRELSZ]->d_un.d_val); - - /* prelink must ensure there are no R_SPARC_NONE relocs left - in .rela.plt. */ - while (rela < relaend) - { - if (__builtin_expect (rela->r_addend, 0) != 0) - { - Elf64_Addr slot = ((rela->r_offset + l->l_addr + 0x400 - - (Elf64_Addr) plt) - / 0x1400) * 0x1400 - + (Elf64_Addr) plt - 0x400; - /* ldx [%o7 + X], %g1 */ - unsigned int first_ldx = *(unsigned int *)(slot + 12); - Elf64_Addr ptr = slot + (first_ldx & 0xfff) + 4; - - *(Elf64_Addr *) (rela->r_offset + l->l_addr) - = (Elf64_Addr) plt - - (slot + ((rela->r_offset + l->l_addr - ptr) / 8) * 24 - + 4); - ++rela; - continue; - } - - *(unsigned int *) (rela->r_offset + l->l_addr) - = 0x03000000 | (rela->r_offset + l->l_addr - (Elf64_Addr) plt); - *(unsigned int *) (rela->r_offset + l->l_addr + 4) - = 0x30680000 | ((((Elf64_Addr) plt + 32 - rela->r_offset - - l->l_addr - 4) >> 2) & 0x7ffff); - __asm __volatile ("flush %0" : : "r" (rela->r_offset - + l->l_addr)); - __asm __volatile ("flush %0+4" : : "r" (rela->r_offset - + l->l_addr)); - ++rela; - } - } - } - - return lazy; -} - -/* The PLT uses Elf64_Rela relocs. */ -#define elf_machine_relplt elf_machine_rela - -/* Undo the sub %sp, 6*8, %sp; add %sp, STACK_BIAS + 22*8, %o0 below - (but w/o STACK_BIAS) to get at the value we want in __libc_stack_end. */ -#define DL_STACK_END(cookie) \ - ((void *) (((long) (cookie)) - (22 - 6) * 8)) - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_GOT_ADDRESS(pic_reg, reg, symbol) \ - "sethi %gdop_hix22(" #symbol "), " #reg "\n\t" \ - "xor " #reg ", %gdop_lox10(" #symbol "), " #reg "\n\t" \ - "ldx [" #pic_reg " + " #reg "], " #reg ", %gdop(" #symbol ")\n" - -#define __S1(x) #x -#define __S(x) __S1(x) - -#define RTLD_START __asm__ ( "\n" \ -" .text\n" \ -" .global _start\n" \ -" .type _start, @function\n" \ -" .align 32\n" \ -"_start:\n" \ -" /* Make room for functions to drop their arguments on the stack. */\n" \ -" sub %sp, 6*8, %sp\n" \ -" /* Pass pointer to argument block to _dl_start. */\n" \ -" call _dl_start\n" \ -" add %sp," __S(STACK_BIAS) "+22*8,%o0\n" \ -" /* FALLTHRU */\n" \ -" .size _start, .-_start\n" \ -"\n" \ -" .global _dl_start_user\n" \ -" .type _dl_start_user, @function\n" \ -"_dl_start_user:\n" \ -" /* Load the GOT register. */\n" \ -"1: call 11f\n" \ -" sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n" \ -"11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n" \ -" add %l7, %o7, %l7\n" \ -" /* Save the user entry point address in %l0. */\n" \ -" mov %o0, %l0\n" \ -" /* See if we were run as a command with the executable file name as an\n" \ -" extra leading argument. If so, we must shift things around since we\n" \ -" must keep the stack doubleword aligned. */\n" \ - RTLD_GOT_ADDRESS(%l7, %g5, _dl_skip_args) \ -" ld [%g5], %i0\n" \ -" brz,pt %i0, 2f\n" \ -" ldx [%sp + " __S(STACK_BIAS) " + 22*8], %i5\n" \ -" /* Find out how far to shift. */\n" \ -" sub %i5, %i0, %i5\n" \ -" sllx %i0, 3, %l6\n" \ - RTLD_GOT_ADDRESS(%l7, %l4, _dl_argv) \ -" stx %i5, [%sp + " __S(STACK_BIAS) " + 22*8]\n" \ -" add %sp, " __S(STACK_BIAS) " + 23*8, %i1\n" \ -" add %i1, %l6, %i2\n" \ -" ldx [%l4], %l5\n" \ -" /* Copy down argv. */\n" \ -"12: ldx [%i2], %i3\n" \ -" add %i2, 8, %i2\n" \ -" stx %i3, [%i1]\n" \ -" brnz,pt %i3, 12b\n" \ -" add %i1, 8, %i1\n" \ -" sub %l5, %l6, %l5\n" \ -" /* Copy down envp. */\n" \ -"13: ldx [%i2], %i3\n" \ -" add %i2, 8, %i2\n" \ -" stx %i3, [%i1]\n" \ -" brnz,pt %i3, 13b\n" \ -" add %i1, 8, %i1\n" \ -" /* Copy down auxiliary table. */\n" \ -"14: ldx [%i2], %i3\n" \ -" ldx [%i2 + 8], %i4\n" \ -" add %i2, 16, %i2\n" \ -" stx %i3, [%i1]\n" \ -" stx %i4, [%i1 + 8]\n" \ -" brnz,pt %i3, 14b\n" \ -" add %i1, 16, %i1\n" \ -" stx %l5, [%l4]\n" \ -" /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */\n" \ -"2:\t" RTLD_GOT_ADDRESS(%l7, %o0, _rtld_local) \ -" sllx %i5, 3, %o3\n" \ -" add %sp, " __S(STACK_BIAS) " + 23*8, %o2\n" \ -" add %o3, 8, %o3\n" \ -" mov %i5, %o1\n" \ -" add %o2, %o3, %o3\n" \ -" call _dl_init\n" \ -" ldx [%o0], %o0\n" \ -" /* Pass our finalizer function to the user in %g1. */\n" \ - RTLD_GOT_ADDRESS(%l7, %g1, _dl_fini) \ -" /* Jump to the user's entry point and deallocate the extra stack we got. */\n" \ -" jmp %l0\n" \ -" add %sp, 6*8, %sp\n" \ -" .size _dl_start_user, . - _dl_start_user\n" \ -" .previous\n"); - -#endif /* dl_machine_h */ - -#define ARCH_LA_PLTENTER sparc64_gnu_pltenter -#define ARCH_LA_PLTEXIT sparc64_gnu_pltexit - -#ifdef RESOLVE_MAP - -/* Perform the relocation specified by RELOC and SYM (which is fully resolved). - MAP is the object containing the reloc. */ - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, - const Elf64_Sym *sym, const struct r_found_version *version, - void *const reloc_addr_arg, int skip_ifunc) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; -#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP - const Elf64_Sym *const refsym = sym; -#endif - Elf64_Addr value; - const unsigned long int r_type = ELF64_R_TYPE_ID (reloc->r_info); -#if !defined RESOLVE_CONFLICT_FIND_MAP - struct link_map *sym_map = NULL; -#endif - -#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (_dl_rtld_map); -#endif - - if (__glibc_unlikely (r_type == R_SPARC_NONE)) - return; - - if (__glibc_unlikely (r_type == R_SPARC_SIZE64)) - { - *reloc_addr = sym->st_size + reloc->r_addend; - return; - } - -#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC - if (__glibc_unlikely (r_type == R_SPARC_RELATIVE)) - { -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC - if (map != &_dl_rtld_map) /* Already done in rtld itself. */ -# endif - *reloc_addr += map->l_addr + reloc->r_addend; - return; - } -#endif - -#ifndef RESOLVE_CONFLICT_FIND_MAP - if (__builtin_expect (ELF64_ST_BIND (sym->st_info) == STB_LOCAL, 0) - && sym->st_shndx != SHN_UNDEF) - { - value = map->l_addr; - } - else - { - sym_map = RESOLVE_MAP (&sym, version, r_type); - value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; - } -#else - value = 0; -#endif - - value += reloc->r_addend; /* Assume copy relocs have zero addend. */ - - if (sym != NULL - && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) - && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) - && __builtin_expect (!skip_ifunc, 1)) - value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap)); - - switch (r_type) - { -#if !defined RTLD_BOOTSTRAP && !defined RESOLVE_CONFLICT_FIND_MAP - case R_SPARC_COPY: - if (sym == NULL) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (sym->st_size > refsym->st_size - || (GLRO(dl_verbose) && sym->st_size < refsym->st_size)) - { - const char *strtab; - - strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("\ -%s: Symbol `%s' has different size in shared object, consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - break; -#endif - case R_SPARC_64: - case R_SPARC_GLOB_DAT: - *reloc_addr = value; - break; - case R_SPARC_IRELATIVE: - value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap)); - *reloc_addr = value; - break; - case R_SPARC_JMP_IREL: - value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap)); - /* 'high' is always zero, for large PLT entries the linker - emits an R_SPARC_IRELATIVE. */ -#ifdef RESOLVE_CONFLICT_FIND_MAP - sparc64_fixup_plt (NULL, reloc, reloc_addr, value, 0, 0); -#else - sparc64_fixup_plt (map, reloc, reloc_addr, value, 0, 0); -#endif - break; - case R_SPARC_JMP_SLOT: -#ifdef RESOLVE_CONFLICT_FIND_MAP - /* R_SPARC_JMP_SLOT conflicts against .plt[32768+] - relocs should be turned into R_SPARC_64 relocs - in .gnu.conflict section. - r_addend non-zero does not mean it is a .plt[32768+] - reloc, instead it is the actual address of the function - to call. */ - sparc64_fixup_plt (NULL, reloc, reloc_addr, value, 0, 0); -#else - sparc64_fixup_plt (map, reloc, reloc_addr, value, reloc->r_addend, 0); -#endif - break; -#ifndef RESOLVE_CONFLICT_FIND_MAP - case R_SPARC_TLS_DTPMOD64: - /* 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_DTPOFF64: - /* 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_TPOFF64: - /* 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. */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - *reloc_addr = 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: - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - value = sym->st_value - sym_map->l_tls_offset - + reloc->r_addend; - if (r_type == R_SPARC_TLS_LE_HIX22) - *(unsigned int *)reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) - | (((~value) >> 10) & 0x3fffff)); - else - *(unsigned int *)reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffffe000) | (value & 0x3ff) - | 0x1c00); - } - break; -# endif -#endif -#ifndef RTLD_BOOTSTRAP - case R_SPARC_8: - *(char *) reloc_addr = value; - break; - case R_SPARC_16: - *(short *) reloc_addr = value; - break; - case R_SPARC_32: - *(unsigned int *) reloc_addr = value; - break; - case R_SPARC_DISP8: - *(char *) reloc_addr = (value - (Elf64_Addr) reloc_addr); - break; - case R_SPARC_DISP16: - *(short *) reloc_addr = (value - (Elf64_Addr) reloc_addr); - break; - case R_SPARC_DISP32: - *(unsigned int *) reloc_addr = (value - (Elf64_Addr) reloc_addr); - break; - case R_SPARC_DISP64: - *reloc_addr = (value - (Elf64_Addr) reloc_addr); - break; - case R_SPARC_REGISTER: - *reloc_addr = value; - break; - case R_SPARC_WDISP30: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xc0000000) | - (((value - (Elf64_Addr) reloc_addr) >> 2) & 0x3fffffff)); - break; - - /* MEDLOW code model relocs */ - case R_SPARC_LO10: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & ~0x3ff) | - (value & 0x3ff)); - break; - case R_SPARC_HI22: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) | - ((value >> 10) & 0x3fffff)); - break; - case R_SPARC_OLO10: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & ~0x1fff) | - (((value & 0x3ff) + ELF64_R_TYPE_DATA (reloc->r_info)) & 0x1fff)); - break; - - /* ABS34 code model reloc */ - case R_SPARC_H34: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) | - ((value >> 12) & 0x3fffff)); - - /* MEDMID code model relocs */ - case R_SPARC_H44: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) | - ((value >> 22) & 0x3fffff)); - break; - case R_SPARC_M44: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & ~0x3ff) | - ((value >> 12) & 0x3ff)); - break; - case R_SPARC_L44: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & ~0xfff) | - (value & 0xfff)); - break; - - /* MEDANY code model relocs */ - case R_SPARC_HH22: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) | - (value >> 42)); - break; - case R_SPARC_HM10: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & ~0x3ff) | - ((value >> 32) & 0x3ff)); - break; - case R_SPARC_LM22: - *(unsigned int *) reloc_addr = - ((*(unsigned int *)reloc_addr & 0xffc00000) | - ((value >> 10) & 0x003fffff)); - break; - case R_SPARC_UA16: - ((unsigned char *) reloc_addr_arg) [0] = value >> 8; - ((unsigned char *) reloc_addr_arg) [1] = value; - break; - case R_SPARC_UA32: - ((unsigned char *) reloc_addr_arg) [0] = value >> 24; - ((unsigned char *) reloc_addr_arg) [1] = value >> 16; - ((unsigned char *) reloc_addr_arg) [2] = value >> 8; - ((unsigned char *) reloc_addr_arg) [3] = value; - break; - case R_SPARC_UA64: - if (! ((long) reloc_addr_arg & 3)) - { - /* Common in .eh_frame */ - ((unsigned int *) reloc_addr_arg) [0] = value >> 32; - ((unsigned int *) reloc_addr_arg) [1] = value; - break; - } - ((unsigned char *) reloc_addr_arg) [0] = value >> 56; - ((unsigned char *) reloc_addr_arg) [1] = value >> 48; - ((unsigned char *) reloc_addr_arg) [2] = value >> 40; - ((unsigned char *) reloc_addr_arg) [3] = value >> 32; - ((unsigned char *) reloc_addr_arg) [4] = value >> 24; - ((unsigned char *) reloc_addr_arg) [5] = value >> 16; - ((unsigned char *) reloc_addr_arg) [6] = value >> 8; - ((unsigned char *) reloc_addr_arg) [7] = value; - break; -#endif -#if !defined RTLD_BOOTSTRAP || defined _NDEBUG - default: - _dl_reloc_bad_type (map, r_type, 0); - break; -#endif - } -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, - void *const reloc_addr_arg) -{ - Elf64_Addr *const reloc_addr = reloc_addr_arg; - *reloc_addr = l_addr + reloc->r_addend; -} - -auto inline void -__attribute__ ((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf64_Addr l_addr, const Elf64_Rela *reloc, - int skip_ifunc) -{ - Elf64_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); - const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); - - if (__glibc_likely (r_type == R_SPARC_JMP_SLOT)) - ; - else if (r_type == R_SPARC_JMP_IREL - || r_type == R_SPARC_IRELATIVE) - { - Elf64_Addr value = map->l_addr + reloc->r_addend; - if (__glibc_likely (!skip_ifunc)) - value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap)); - if (r_type == R_SPARC_JMP_IREL) - { - /* 'high' is always zero, for large PLT entries the linker - emits an R_SPARC_IRELATIVE. */ - sparc64_fixup_plt (map, reloc, reloc_addr, value, 0, 1); - } - else - *reloc_addr = value; - } - else if (r_type == R_SPARC_NONE) - ; - else - _dl_reloc_bad_type (map, r_type, 1); -} - -#endif /* RESOLVE_MAP */ diff --git a/sysdeps/sparc/sparc64/dl-plt.h b/sysdeps/sparc/sparc64/dl-plt.h deleted file mode 100644 index daad1063b3..0000000000 --- a/sysdeps/sparc/sparc64/dl-plt.h +++ /dev/null @@ -1,167 +0,0 @@ -/* PLT fixups. Sparc 64-bit version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _DL_PLT_H -#define _DL_PLT_H - -/* We have 4 cases to handle. And we code different code sequences - for each one. I love V9 code models... */ -static inline void __attribute__ ((always_inline)) -sparc64_fixup_plt (struct link_map *map, const Elf64_Rela *reloc, - Elf64_Addr *reloc_addr, Elf64_Addr value, - Elf64_Addr high, int t) -{ - unsigned int *insns = (unsigned int *) reloc_addr; - Elf64_Addr plt_vaddr = (Elf64_Addr) reloc_addr; - Elf64_Sxword disp = value - plt_vaddr; - - /* 't' is '0' if we are resolving this PLT entry for RTLD bootstrap, - in which case we'll be resolving all PLT entries and thus can - optimize by overwriting instructions starting at the first PLT entry - instruction and we need not be mindful of thread safety. - - Otherwise, 't' is '1'. - - Now move plt_vaddr up to the call instruction. */ - plt_vaddr += ((t + 1) * 4); - - /* PLT entries .PLT32768 and above look always the same. */ - if (__builtin_expect (high, 0) != 0) - { - *reloc_addr = value - map->l_addr; - } - /* Near destination. */ - else if (disp >= -0x800000 && disp < 0x800000) - { - unsigned int insn; - - /* ba,a */ - insn = 0x30800000 | ((disp >> 2) & 0x3fffff); - - if (disp >= -0x100000 && disp < 0x100000) - { - /* ba,a,pt %icc */ - insn = 0x30480000 | ((disp >> 2) & 0x07ffff); - } - - /* As this is just one instruction, it is thread safe and so we - can avoid the unnecessary sethi FOO, %g1. Each 64-bit PLT - entry is 8 instructions long, so we can't run into the 'jmp' - delay slot problems 32-bit PLTs can. */ - insns[0] = insn; - __asm __volatile ("flush %0" : : "r" (insns)); - } - /* 32-bit Sparc style, the target is in the lower 32-bits of - address space. */ - else if (insns += t, (value >> 32) == 0) - { - /* sethi %hi(target), %g1 - jmpl %g1 + %lo(target), %g0 */ - - insns[1] = 0x81c06000 | (value & 0x3ff); - __asm __volatile ("flush %0 + 4" : : "r" (insns)); - - insns[0] = 0x03000000 | ((unsigned int)(value >> 10)); - __asm __volatile ("flush %0" : : "r" (insns)); - } - /* We can also get somewhat simple sequences if the distance between - the target and the PLT entry is within +/- 2GB. */ - else if ((plt_vaddr > value - && ((plt_vaddr - value) >> 31) == 0) - || (value > plt_vaddr - && ((value - plt_vaddr) >> 31) == 0)) - { - unsigned int displacement; - - if (plt_vaddr > value) - displacement = (0 - (plt_vaddr - value)); - else - displacement = value - plt_vaddr; - - /* mov %o7, %g1 - call displacement - mov %g1, %o7 */ - - insns[2] = 0x9e100001; - __asm __volatile ("flush %0 + 8" : : "r" (insns)); - - insns[1] = 0x40000000 | (displacement >> 2); - __asm __volatile ("flush %0 + 4" : : "r" (insns)); - - insns[0] = 0x8210000f; - __asm __volatile ("flush %0" : : "r" (insns)); - } - /* Worst case, ho hum... */ - else - { - unsigned int high32 = (value >> 32); - unsigned int low32 = (unsigned int) value; - - /* ??? Some tricks can be stolen from the sparc64 egcs backend - constant formation code I wrote. -DaveM */ - - if (__glibc_unlikely (high32 & 0x3ff)) - { - /* sethi %hh(value), %g1 - sethi %lm(value), %g5 - or %g1, %hm(value), %g1 - or %g5, %lo(value), %g5 - sllx %g1, 32, %g1 - jmpl %g1 + %g5, %g0 - nop */ - - insns[5] = 0x81c04005; - __asm __volatile ("flush %0 + 20" : : "r" (insns)); - - insns[4] = 0x83287020; - __asm __volatile ("flush %0 + 16" : : "r" (insns)); - - insns[3] = 0x8a116000 | (low32 & 0x3ff); - __asm __volatile ("flush %0 + 12" : : "r" (insns)); - - insns[2] = 0x82106000 | (high32 & 0x3ff); - } - else - { - /* sethi %hh(value), %g1 - sethi %lm(value), %g5 - sllx %g1, 32, %g1 - or %g5, %lo(value), %g5 - jmpl %g1 + %g5, %g0 - nop */ - - insns[4] = 0x81c04005; - __asm __volatile ("flush %0 + 16" : : "r" (insns)); - - insns[3] = 0x8a116000 | (low32 & 0x3ff); - __asm __volatile ("flush %0 + 12" : : "r" (insns)); - - insns[2] = 0x83287020; - } - - __asm __volatile ("flush %0 + 8" : : "r" (insns)); - - insns[1] = 0x0b000000 | (low32 >> 10); - __asm __volatile ("flush %0 + 4" : : "r" (insns)); - - insns[0] = 0x03000000 | (high32 >> 10); - __asm __volatile ("flush %0" : : "r" (insns)); - } -} - -#endif /* dl-plt.h */ diff --git a/sysdeps/sparc/sparc64/dl-trampoline.S b/sysdeps/sparc/sparc64/dl-trampoline.S deleted file mode 100644 index 8e1a6efb13..0000000000 --- a/sysdeps/sparc/sparc64/dl-trampoline.S +++ /dev/null @@ -1,325 +0,0 @@ -/* PLT trampolines. Sparc 64-bit version. - Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - - .text - .align 32 - - /* %g1: PLT offset loaded by PLT entry - * %g4: callers PC, which is PLT0 + 24, therefore we - * add (32 + 8) to get the address of PLT2 which - * is where the magic cookie is stored - */ - .globl _dl_runtime_resolve_0 - .type _dl_runtime_resolve_0, @function -_dl_runtime_resolve_0: - cfi_startproc - - save %sp, -192, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - sethi %hi(1047552), %l2 - ldx [%g4 + 32 + 8], %o0 - sub %g1, %g4, %l0 - xor %l2, -1016, %l2 - sethi %hi(5120), %l3 /* 160 * 32 */ - add %l0, %l2, %l0 - sethi %hi(32768), %l4 - udivx %l0, %l3, %l3 - sllx %l3, 2, %l1 - add %l1, %l3, %l1 - sllx %l1, 10, %l2 - sub %l4, 4, %l4 - sllx %l1, 5, %l1 - sub %l0, %l2, %l0 - udivx %l0, 24, %l0 - add %l0, %l4, %l0 - add %l1, %l0, %l1 - add %l1, %l1, %l0 - add %l0, %l1, %l0 - call _dl_fixup - sllx %l0, 3, %o1 - jmp %o0 - restore - - cfi_endproc - - .size _dl_runtime_resolve_0, .-_dl_runtime_resolve_0 - - /* %g1: PLT offset loaded by PLT entry - * %g4: callers PC, which is PLT1 + 24, therefore we - * add 8 to get the address of PLT2 which - * is where the magic cookie is stored - */ - .globl _dl_runtime_resolve_1 - .type _dl_runtime_resolve_1, @function -_dl_runtime_resolve_1: - cfi_startproc - - save %sp, -192, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - srlx %g1, 12, %o1 - ldx [%g4 + 8], %o0 - add %o1, %o1, %o3 - sub %o1, 96, %o1 - call _dl_fixup - add %o1, %o3, %o1 - jmp %o0 - restore - - cfi_endproc - - .size _dl_runtime_resolve_1, .-_dl_runtime_resolve_1 - - /* For the profiling cases we pass in our stack frame - * as the base of the La_sparc64_regs, so it looks - * like: - * %l0 %sp - * ... - * %l7 %sp + (7 * 8) - * %i0 %sp + (8 * 8) - * ... - * %i7 %sp + (15 * 8) - * %f0 %sp + (16 * 8) - * %f16 %sp + (31 * 8) - * framesize %sp + (32 * 8) - */ - - .globl _dl_profile_save_regs - .type _dl_profile_save_regs, @function -_dl_profile_save_regs: - cfi_startproc - - stx %l0, [%sp + STACK_BIAS + ( 0 * 8)] - stx %l1, [%sp + STACK_BIAS + ( 1 * 8)] - stx %l2, [%sp + STACK_BIAS + ( 2 * 8)] - stx %l3, [%sp + STACK_BIAS + ( 3 * 8)] - stx %l4, [%sp + STACK_BIAS + ( 4 * 8)] - stx %l5, [%sp + STACK_BIAS + ( 5 * 8)] - stx %l6, [%sp + STACK_BIAS + ( 6 * 8)] - stx %l7, [%sp + STACK_BIAS + ( 7 * 8)] - stx %i0, [%sp + STACK_BIAS + ( 8 * 8)] - stx %i1, [%sp + STACK_BIAS + ( 9 * 8)] - stx %i2, [%sp + STACK_BIAS + (10 * 8)] - stx %i3, [%sp + STACK_BIAS + (11 * 8)] - stx %i4, [%sp + STACK_BIAS + (12 * 8)] - stx %i5, [%sp + STACK_BIAS + (13 * 8)] - stx %i6, [%sp + STACK_BIAS + (14 * 8)] - stx %i7, [%sp + STACK_BIAS + (15 * 8)] - std %f0, [%sp + STACK_BIAS + (16 * 8)] - std %f2, [%sp + STACK_BIAS + (17 * 8)] - std %f4, [%sp + STACK_BIAS + (18 * 8)] - std %f6, [%sp + STACK_BIAS + (19 * 8)] - std %f8, [%sp + STACK_BIAS + (20 * 8)] - std %f10, [%sp + STACK_BIAS + (21 * 8)] - std %f12, [%sp + STACK_BIAS + (22 * 8)] - std %f14, [%sp + STACK_BIAS + (23 * 8)] - std %f16, [%sp + STACK_BIAS + (24 * 8)] - std %f18, [%sp + STACK_BIAS + (25 * 8)] - std %f20, [%sp + STACK_BIAS + (26 * 8)] - std %f22, [%sp + STACK_BIAS + (27 * 8)] - std %f24, [%sp + STACK_BIAS + (28 * 8)] - std %f26, [%sp + STACK_BIAS + (29 * 8)] - std %f28, [%sp + STACK_BIAS + (30 * 8)] - retl - std %f30, [%sp + STACK_BIAS + (31 * 8)] - - cfi_endproc - - .size _dl_profile_save_regs, .-_dl_profile_save_regs - - /* If we are going to call pltexit, then we must replicate - * the caller's stack frame. - * %o0: PLT resolved function address - */ - .globl _dl_profile_invoke - .type _dl_profile_invoke, @function -_dl_profile_invoke: - cfi_startproc - - add %l0, 7, %l0 - andn %l0, 7, %l0 - add %l0, (8 * 8), %g1 - - sub %sp, %g1, %sp - srlx %l0, 3, %l7 - mov %o0, %l1 - mov %i0, %o0 - mov %i1, %o1 - mov %i2, %o2 - mov %i3, %o3 - mov %i4, %o4 - mov %i5, %o5 - add %fp, STACK_BIAS, %l2 - brz %l0, 2f - add %sp, STACK_BIAS, %l3 -1: ldx [%l2], %l4 - add %l2, 0x8, %l2 - subcc %l7, 1, %l7 - stx %l4, [%l3] - bne,pt %xcc, 1b - add %l3, 0x8, %l3 - -2: jmpl %l1, %o7 - nop - - stx %o0, [%sp + STACK_BIAS + (16 * 8)] - stx %o1, [%sp + STACK_BIAS + (17 * 8)] - stx %o2, [%sp + STACK_BIAS + (18 * 8)] - stx %o3, [%sp + STACK_BIAS + (19 * 8)] - std %f0, [%sp + STACK_BIAS + (20 * 8)] - std %f2, [%sp + STACK_BIAS + (21 * 8)] - std %f4, [%sp + STACK_BIAS + (22 * 8)] - std %f8, [%sp + STACK_BIAS + (23 * 8)] - - mov %l5, %o0 - mov %l6, %o1 - add %sp, STACK_BIAS + (24 * 8), %o2 - call _dl_call_pltexit - add %sp, STACK_BIAS + (16 * 8), %o3 - - ldx [%sp + STACK_BIAS + (16 * 8)], %i0 - ldx [%sp + STACK_BIAS + (17 * 8)], %i1 - ldx [%sp + STACK_BIAS + (18 * 8)], %i2 - ldx [%sp + STACK_BIAS + (19 * 8)], %i3 - ldd [%sp + STACK_BIAS + (20 * 8)], %f0 - ldd [%sp + STACK_BIAS + (21 * 8)], %f2 - ldd [%sp + STACK_BIAS + (22 * 8)], %f4 - ldd [%sp + STACK_BIAS + (23 * 8)], %f8 - - jmpl %i7 + 8, %g0 - restore - - cfi_endproc - - .size _dl_profile_invoke, .-_dl_profile_invoke - - /* %g1: PLT offset loaded by PLT entry - * %g4: callers PC, which is PLT0 + 24, therefore we - * add (32 + 8) to get the address of PLT2 which - * is where the magic cookie is stored - */ - .align 32 - .globl _dl_runtime_profile_0 - .type _dl_runtime_profile_0, @function -_dl_runtime_profile_0: - cfi_startproc - - save %sp, -336, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - sethi %hi(1047552), %l2 - ldx [%g4 + 32 + 8], %o0 - sub %g1, %g4, %l0 - xor %l2, -1016, %l2 - sethi %hi(5120), %l3 /* 160 * 32 */ - add %l0, %l2, %l0 - sethi %hi(32768), %l4 - udivx %l0, %l3, %l3 - sllx %l3, 2, %l1 - add %l1, %l3, %l1 - sllx %l1, 10, %l2 - sub %l4, 4, %l4 - sllx %l1, 5, %l1 - sub %l0, %l2, %l0 - udivx %l0, 24, %l0 - add %l0, %l4, %l0 - add %l1, %l0, %l1 - add %l1, %l1, %l0 - add %l0, %l1, %l0 - - mov %i7, %o2 - sllx %l0, 3, %o1 - - mov %o0, %l5 - mov %o1, %l6 - - call _dl_profile_save_regs - nop - - add %sp, STACK_BIAS, %o3 - call _dl_profile_fixup - add %sp, (STACK_BIAS + (32 * 8)), %o4 - - ldx [%sp + STACK_BIAS + (32 * 8)], %l0 - brlz,pt %l0, 1f - nop - - call _dl_profile_invoke - nop - -1: jmp %o0 - restore - - cfi_endproc - - .size _dl_runtime_profile_0, .-_dl_runtime_profile_0 - - /* %g1: PLT offset loaded by PLT entry - * %g4: callers PC, which is PLT1 + 24, therefore we - * add 8 to get the address of PLT2 which - * is where the magic cookie is stored - */ - .globl _dl_runtime_profile_1 - .type _dl_runtime_profile_1, @function -_dl_runtime_profile_1: - cfi_startproc - - save %sp, -336, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) - - srlx %g1, 12, %o1 - ldx [%g4 + 8], %o0 - add %o1, %o1, %o3 - sub %o1, 96, %o1 - mov %i7, %o2 - add %o1, %o3, %o1 - - mov %o0, %l5 - mov %o1, %l6 - - call _dl_profile_save_regs - nop - - add %sp, STACK_BIAS, %o3 - call _dl_profile_fixup - add %sp, (STACK_BIAS + (32 * 8)), %o4 - - ldx [%sp + STACK_BIAS + (32 * 8)], %l0 - brlz,pt %l0, 1f - nop - - call _dl_profile_invoke - nop - -1: jmp %o0 - restore - - cfi_endproc - - .size _dl_runtime_resolve_1, .-_dl_runtime_resolve_1 diff --git a/sysdeps/sparc/sparc64/fpu/e_sqrtl.c b/sysdeps/sparc/sparc64/fpu/e_sqrtl.c deleted file mode 100644 index c540d05841..0000000000 --- a/sysdeps/sparc/sparc64/fpu/e_sqrtl.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Long double square root, sparc64 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jakub@redhat.com>, 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <math.h> - -extern void _Qp_sqrt(long double *, const long double *); - -long double -__ieee754_sqrtl (long double x) -{ - long double ret; - _Qp_sqrt (&ret, &x); - return ret; -} -strong_alias (__ieee754_sqrtl, __sqrtl_finite) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/Makefile b/sysdeps/sparc/sparc64/fpu/multiarch/Makefile deleted file mode 100644 index 03a271dfa4..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -ifeq ($(subdir),math) -ifeq ($(have-as-vis3),yes) -libm-sysdep_routines += m_signbitf-vis3 m_signbit-vis3 m_finitef-vis3 \ - m_finite-vis3 m_isinff-vis3 m_isinf-vis3 \ - m_isnanf-vis3 m_isnan-vis3 s_lrintf-vis3 \ - s_lrint-vis3 s_rintf-vis3 s_rint-vis3 \ - s_fmaf-vis3 s_fma-vis3 \ - s_nearbyint-vis3 s_nearbyintf-vis3 \ - s_ceilf-vis3 s_ceil-vis3 s_floorf-vis3 \ - s_floor-vis3 s_truncf-vis3 s_trunc-vis3 -sysdep_routines += s_signbitf-vis3 s_signbit-vis3 s_finitef-vis3 \ - s_finite-vis3 s_isinff-vis3 s_isinf-vis3 \ - s_isnanf-vis3 s_isnan-vis3 - -CFLAGS-s_ceilf-vis3.c += -Wa,-Av9d -mvis3 -CFLAGS-s_ceil-vis3.c += -Wa,-Av9d -mvis3 -CFLAGS-s_floorf-vis3.c += -Wa,-Av9d -mvis3 -CFLAGS-s_floor-vis3.c += -Wa,-Av9d -mvis3 -CFLAGS-s_truncf-vis3.c += -Wa,-Av9d -mvis3 -CFLAGS-s_trunc-vis3.c += -Wa,-Av9d -mvis3 -endif -endif diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.c deleted file mode 100644 index fa9c5d33ea..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* ceil function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <math.h> - -#define __ceil __ceil_vis3 - -#include <sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.c deleted file mode 100644 index efa05e94df..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceil.c +++ /dev/null @@ -1,32 +0,0 @@ -/* ceil function, sparc64 version. - Copyright (C) 2016-2017 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/>. */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include <sparc-ifunc.h> -# include <math.h> - -extern double __ceil_vis3 (double); -extern double __ceil_generic (double); - -sparc_libm_ifunc(__ceil, hwcap & HWCAP_SPARC_VIS3 ? __ceil_vis3 : __ceil_generic); -weak_alias (__ceil, ceil) - -# define __ceil __ceil_generic -#endif - -#include <sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.c deleted file mode 100644 index 1d918de7af..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Float ceil function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <math.h> - -#define __ceilf __ceilf_vis3 - -#include <sysdeps/ieee754/flt-32/s_ceilf.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.c deleted file mode 100644 index 62ada7fd2a..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_ceilf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Float ceil function, sparc64 version. - Copyright (C) 2016-2017 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/>. */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include <sparc-ifunc.h> -# include <math.h> - -extern float __ceilf_vis3 (float); -extern float __ceilf_generic (float); - -sparc_libm_ifunc(__ceilf, hwcap & HWCAP_SPARC_VIS3 ? __ceilf_vis3 : __ceilf_generic); -weak_alias (__ceilf, ceilf) - -# define __ceilf __ceilf_generic -#endif - -#include <sysdeps/ieee754/flt-32/s_ceilf.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S deleted file mode 100644 index 0e2b5f6b00..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_finite-vis3.S +++ /dev/null @@ -1,28 +0,0 @@ -/* finite(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__finite_vis3) - fabsd %f0, %f0 - movstouw %f0, %o0 - sethi %hi(0x7ff00000), %o2 - sub %o0, %o2, %o0 - retl - srl %o0, 31, %o0 -END (__finite_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S deleted file mode 100644 index 78406a62b1..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_finite.S +++ /dev/null @@ -1,15 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(finite) - -hidden_def (__finite) -weak_alias (__finite, finite) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __finite __finite_generic - -#include "../s_finite.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S deleted file mode 100644 index 59e17bc75c..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef-vis3.S +++ /dev/null @@ -1,28 +0,0 @@ -/* finitef(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__finitef_vis3) - fabss %f1, %f0 - movstouw %f0, %o0 - sethi %hi(0x7f800000), %o2 - sub %o0, %o2, %o0 - retl - srl %o0, 31, %o0 -END (__finitef_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S deleted file mode 100644 index cafd41fd92..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_finitef.S +++ /dev/null @@ -1,15 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(finitef) - -hidden_def (__finitef) -weak_alias (__finitef, finitef) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __finitef __finitef_generic - -#include "../s_finitef.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.c deleted file mode 100644 index 04f6183664..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_floor-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* floor function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <math.h> - -#define __floor __floor_vis3 - -#include <sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floor.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_floor.c deleted file mode 100644 index d097f68866..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_floor.c +++ /dev/null @@ -1,32 +0,0 @@ -/* floor function, sparc64 version. - Copyright (C) 2016-2017 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/>. */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include <sparc-ifunc.h> -# include <math.h> - -extern double __floor_vis3 (double); -extern double __floor_generic (double); - -sparc_libm_ifunc(__floor, hwcap & HWCAP_SPARC_VIS3 ? __floor_vis3 : __floor_generic); -weak_alias (__floor, floor) - -# define __floor __floor_generic -#endif - -#include <sysdeps/ieee754/dbl-64/wordsize-64/s_floor.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.c deleted file mode 100644 index 0ff49e6802..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Float floor function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <math.h> - -#define __floorf __floorf_vis3 - -#include <sysdeps/ieee754/flt-32/s_floorf.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.c deleted file mode 100644 index 2a6c710349..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_floorf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Float floor function, sparc64 version. - Copyright (C) 2016-2017 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/>. */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include <sparc-ifunc.h> -# include <math.h> - -extern float __floorf_vis3 (float); -extern float __floorf_generic (float); - -sparc_libm_ifunc(__floorf, hwcap & HWCAP_SPARC_VIS3 ? __floorf_vis3 : __floorf_generic); -weak_alias (__floorf, floorf) - -# define __floorf __floorf_generic -#endif - -#include <sysdeps/ieee754/flt-32/s_floorf.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S deleted file mode 100644 index 343ce37de9..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_fma-vis3.S +++ /dev/null @@ -1,25 +0,0 @@ -/* fma function, sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - -ENTRY (__fma_vis3) - retl - fmaddd %f0, %f2, %f4, %f0 -END (__fma_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c deleted file mode 100644 index 3f2f1622c8..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_fma.c +++ /dev/null @@ -1,14 +0,0 @@ -#ifdef HAVE_AS_VIS3_SUPPORT -# include <sparc-ifunc.h> -# include <math.h> - -extern double __fma_vis3 (double, double, double); -extern double __fma_generic (double, double, double); - -sparc_libm_ifunc(__fma, hwcap & HWCAP_SPARC_FMAF ? __fma_vis3 : __fma_generic); -weak_alias (__fma, fma) - -# define __fma __fma_generic -#endif - -#include <sysdeps/ieee754/dbl-64/s_fma.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S deleted file mode 100644 index c2fa72a211..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf-vis3.S +++ /dev/null @@ -1,25 +0,0 @@ -/* fmaf function, sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - -ENTRY (__fmaf_vis3) - retl - fmadds %f1, %f3, %f5, %f0 -END (__fmaf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c deleted file mode 100644 index 7a273a3b13..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_fmaf.c +++ /dev/null @@ -1,14 +0,0 @@ -#ifdef HAVE_AS_VIS3_SUPPORT -# include <sparc-ifunc.h> -# include <math.h> - -extern float __fmaf_vis3 (float, float, float); -extern float __fmaf_generic (float, float, float); - -sparc_libm_ifunc(__fmaf, hwcap & HWCAP_SPARC_FMAF ? __fmaf_vis3 : __fmaf_generic); -weak_alias (__fmaf, fmaf) - -# define __fmaf __fmaf_generic -#endif - -#include <sysdeps/ieee754/dbl-64/s_fmaf.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S deleted file mode 100644 index 54ff556eb8..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf-vis3.S +++ /dev/null @@ -1,31 +0,0 @@ -/* isinf(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__isinf_vis3) - movdtox %f0, %g1 - sethi %hi(0x7ff00000), %o2 - sllx %o2, 32, %o2 - sllx %g1, 1, %o4 - srlx %o4, 1, %o5 - srax %g1, 62, %o0 - xor %o5, %o2, %o3 - retl - movrne %o3, %g0, %o0 -END (__isinf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S deleted file mode 100644 index ed9b62640d..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinf.S +++ /dev/null @@ -1,15 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(isinf) - -hidden_def (__isinf) -weak_alias (__isinf, isinf) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __isinf __isinf_generic - -#include "../s_isinf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S deleted file mode 100644 index 853bfc64e4..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff-vis3.S +++ /dev/null @@ -1,30 +0,0 @@ -/* isinff(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__isinff_vis3) - movstouw %f1, %g1 - sethi %hi(0x7f800000), %o2 - sll %g1, 1, %o4 - srl %o4, 1, %o5 - sra %g1, 30, %o0 - xor %o5, %o2, %o3 - retl - movrne %o3, %g0, %o0 -END (__isinff_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S deleted file mode 100644 index 04517398f8..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isinff.S +++ /dev/null @@ -1,15 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(isinff) - -hidden_def (__isinff) -weak_alias (__isinff, isinff) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __isinff __isinff_generic - -#include "../s_isinff.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S deleted file mode 100644 index 6dbb8dee2c..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan-vis3.S +++ /dev/null @@ -1,30 +0,0 @@ -/* isnan(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__isnan_vis3) - movdtox %f0, %o0 - sethi %hi(0x7ff00000), %g1 - sllx %g1, 32, %g1 - sllx %o0, 1, %o0 - srlx %o0, 1, %o0 - sub %g1, %o0, %o0 - retl - srlx %o0, 63, %o0 -END (__isnan_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S deleted file mode 100644 index 40e985a5d4..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnan.S +++ /dev/null @@ -1,15 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(isnan) - -hidden_def (__isnan) -weak_alias (__isnan, isnan) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __isnan __isnan_generic - -#include "../s_isnan.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S deleted file mode 100644 index 46fbf6de9f..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf-vis3.S +++ /dev/null @@ -1,29 +0,0 @@ -/* isnanf(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__isnanf_vis3) - movstouw %f1, %o0 - sethi %hi(0x7f800000), %g1 - sll %o0, 1, %o0 - srl %o0, 1, %o0 - sub %g1, %o0, %o0 - retl - srl %o0, 31, %o0 -END (__isnanf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S deleted file mode 100644 index 6b53b69d2e..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_isnanf.S +++ /dev/null @@ -1,15 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(isnanf) - -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) - -# undef weak_alias -# define weak_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __isnanf __isnanf_generic - -#include "../s_isnanf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S deleted file mode 100644 index 87895371dd..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint-vis3.S +++ /dev/null @@ -1,52 +0,0 @@ -/* lrint(), sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__lrint_vis3) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - fzero ZERO - - fnegd ZERO, SIGN_BIT - movxtod %o2, %f16 - fabsd %f0, %f14 - - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - fdtox %f0, %f4 - retl - movdtox %f4, %o0 -END (__lrint_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S deleted file mode 100644 index 94af8f028c..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrint.S +++ /dev/null @@ -1,17 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(lrint) - -weak_alias (__lrint, lrint) - -strong_alias (__lrint, __llrint) -weak_alias (__llrint, llrint) - -# undef weak_alias -# define weak_alias(a, b) -# undef strong_alias -# define strong_alias(a, b) - -#define __lrint __lrint_generic - -#include "../s_lrint.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S deleted file mode 100644 index 3ef005d433..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf-vis3.S +++ /dev/null @@ -1,51 +0,0 @@ -/* lrintf(), sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__lrintf_vis3) - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - fnegs ZERO, SIGN_BIT - movwtos %o2, %f16 - fabss %f1, %f14 - - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - fstox %f0, %f4 - retl - movdtox %f4, %o0 -END (__lrintf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S deleted file mode 100644 index e6ea4061c3..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_lrintf.S +++ /dev/null @@ -1,17 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(lrintf) - -weak_alias (__lrintf, lrintf) - -strong_alias (__lrintf, __llrintf) -weak_alias (__llrintf, llrintf) - -# undef weak_alias -# define weak_alias(a, b) -# undef strong_alias -# define strong_alias(a, b) - -#define __lrintf __lrintf_generic - -#include "../s_lrintf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint-vis3.S deleted file mode 100644 index 67e570a800..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint-vis3.S +++ /dev/null @@ -1,62 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc64 vis3 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2013. - - 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> - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyint_vis3) - fcmpd %fcc3, %f0, %f0 /* Check for sNaN */ - stx %fsr, [%sp + STACK_BIAS + 144] - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - ldx [%sp + STACK_BIAS + 144], %o4 - sethi %hi(0xf8003e0), %o5 - fzero ZERO - or %o5, %lo(0xf8003e0), %o5 - fnegd ZERO, SIGN_BIT - andn %o4, %o5, %o4 - movxtod %o2, %f16 - stx %o4, [%sp + STACK_BIAS + 136] - ldx [%sp + STACK_BIAS + 136], %fsr - fabsd %f0, %f14 - fcmpd %fcc3, %f14, %f16 - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - retl - ldx [%sp + STACK_BIAS + 144], %fsr -END (__nearbyint_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint.S deleted file mode 100644 index bb75ab3606..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyint.S +++ /dev/null @@ -1,12 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(nearbyint) - -weak_alias (__nearbyint, nearbyint) - -# undef weak_alias -# define weak_alias(a, b) - -#define __nearbyint __nearbyint_generic - -#include "../s_nearbyint.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf-vis3.S deleted file mode 100644 index 208af37d0d..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf-vis3.S +++ /dev/null @@ -1,61 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc64 vis3 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2013. - - 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> - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyintf_vis3) - fcmps %fcc3, %f1, %f1 /* Check for sNaN */ - stx %fsr, [%sp + STACK_BIAS + 144] - sethi %hi(0xf8003e0), %o5 - sethi %hi(TWO_TWENTYTHREE), %o2 - ldx [%sp + STACK_BIAS + 144], %o4 - or %o5, %lo(0xf8003e0), %o5 - fzeros ZERO - andn %o4, %o5, %o4 - fnegs ZERO, SIGN_BIT - movwtos %o2, %f16 - stx %o4, [%sp + STACK_BIAS + 136] - ldx [%sp + STACK_BIAS + 136], %fsr - fabss %f1, %f14 - fcmps %fcc3, %f14, %f16 - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - retl - ldx [%sp + STACK_BIAS + 144], %fsr -END (__nearbyintf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf.S deleted file mode 100644 index 95100c1bfc..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_nearbyintf.S +++ /dev/null @@ -1,12 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(nearbyintf) - -weak_alias (__nearbyintf, nearbyintf) - -# undef weak_alias -# define weak_alias(a, b) - -#define __nearbyintf __nearbyintf_generic - -#include "../s_nearbyintf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S deleted file mode 100644 index 495a02222e..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_rint-vis3.S +++ /dev/null @@ -1,50 +0,0 @@ -/* Round float to int floating-point values, sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rint_vis3) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - fzero ZERO - - fnegd ZERO, SIGN_BIT - movxtod %o2, %f16 - fabsd %f0, %f14 - - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - retl - for %f0, SIGN_BIT, %f0 -END (__rint_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S deleted file mode 100644 index cc980eb8c7..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_rint.S +++ /dev/null @@ -1,12 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(rint) - -weak_alias (__rint, rint) - -# undef weak_alias -# define weak_alias(a, b) - -#define __rint __rint_generic - -#include "../s_rint.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S deleted file mode 100644 index 521c0b21ec..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf-vis3.S +++ /dev/null @@ -1,49 +0,0 @@ -/* Round float to int floating-point values, sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - - /* VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rintf_vis3) - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - fnegs ZERO, SIGN_BIT - movwtos %o2, %f16 - fabss %f1, %f14 - - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - retl - fors %f0, SIGN_BIT, %f0 -END (__rintf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S deleted file mode 100644 index 38fd936086..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_rintf.S +++ /dev/null @@ -1,12 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(rintf) - -weak_alias (__rintf, rintf) - -# undef weak_alias -# define weak_alias(a, b) - -#define __rintf __rintf_generic - -#include "../s_rintf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S deleted file mode 100644 index bce7c9795a..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit-vis3.S +++ /dev/null @@ -1,25 +0,0 @@ -/* signbit(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__signbit_vis3) - movdtox %f0, %o0 - retl - srlx %o0, 63, %o0 -END (__signbit_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S deleted file mode 100644 index b8ff64a547..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbit.S +++ /dev/null @@ -1,20 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(signbit) - -/* On 64-bit the double version will also always work for - long-double-precision since in both cases the word with the - sign bit in it is passed always in register %f0. */ -strong_alias (__signbit, __signbitl) -hidden_def (__signbitl) - -# undef weak_alias -# define weak_alias(a, b) -# undef strong_alias -# define strong_alias(a, b) -# undef hidden_def -# define hidden_def(a) - -#define __signbit __signbit_generic - -#include "../s_signbit.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S deleted file mode 100644 index 7833e725e6..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf-vis3.S +++ /dev/null @@ -1,25 +0,0 @@ -/* signbitf(). sparc64 vis3 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__signbitf_vis3) - movstouw %f1, %o0 - retl - srl %o0, 31, %o0 -END (__signbitf_vis3) diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S b/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S deleted file mode 100644 index d57e999b90..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_signbitf.S +++ /dev/null @@ -1,10 +0,0 @@ -#include <sparc-ifunc.h> - -SPARC_ASM_VIS3_IFUNC(signbitf) - -# undef weak_alias -# define weak_alias(a, b) - -#define __signbitf __signbitf_generic - -#include "../s_signbitf.S" diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.c deleted file mode 100644 index 38ee29a8d3..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* trunc function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <math.h> - -#define __trunc __trunc_vis3 - -#include <sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.c deleted file mode 100644 index dc67f423f1..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_trunc.c +++ /dev/null @@ -1,32 +0,0 @@ -/* trunc function, sparc64 version. - Copyright (C) 2016-2017 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/>. */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include <sparc-ifunc.h> -# include <math.h> - -extern double __trunc_vis3 (double); -extern double __trunc_generic (double); - -sparc_libm_ifunc(__trunc, hwcap & HWCAP_SPARC_VIS3 ? __trunc_vis3 : __trunc_generic); -weak_alias (__trunc, trunc) - -# define __trunc __trunc_generic -#endif - -#include <sysdeps/ieee754/dbl-64/wordsize-64/s_trunc.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.c deleted file mode 100644 index 302aa56047..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf-vis3.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Float trunc function, sparc64 vis3 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <math.h> - -#define __truncf __truncf_vis3 - -#include <sysdeps/ieee754/flt-32/s_truncf.c> diff --git a/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.c b/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.c deleted file mode 100644 index 980a313ae1..0000000000 --- a/sysdeps/sparc/sparc64/fpu/multiarch/s_truncf.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Float trunc function, sparc64 version. - Copyright (C) 2016-2017 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/>. */ - -#ifdef HAVE_AS_VIS3_SUPPORT -# include <sparc-ifunc.h> -# include <math.h> - -extern float __truncf_vis3 (float); -extern float __truncf_generic (float); - -sparc_libm_ifunc(__truncf, hwcap & HWCAP_SPARC_VIS3 ? __truncf_vis3 : __truncf_generic); -weak_alias (__truncf, truncf) - -# define __truncf __truncf_generic -#endif - -#include <sysdeps/ieee754/flt-32/s_truncf.c> diff --git a/sysdeps/sparc/sparc64/fpu/s_copysign.S b/sysdeps/sparc/sparc64/fpu/s_copysign.S deleted file mode 100644 index e50d8cd246..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_copysign.S +++ /dev/null @@ -1,30 +0,0 @@ -/* copysign function, sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - -ENTRY (__copysign) - fzeros %f7 - fnegs %f7, %f7 - fands %f2, %f7, %f9 - fandnot2s %f0, %f7, %f0 - retl - fors %f0, %f9, %f0 -END (__copysign) -weak_alias (__copysign, copysign)
\ No newline at end of file diff --git a/sysdeps/sparc/sparc64/fpu/s_copysignf.S b/sysdeps/sparc/sparc64/fpu/s_copysignf.S deleted file mode 100644 index 2f24217274..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_copysignf.S +++ /dev/null @@ -1,30 +0,0 @@ -/* float copysign function, sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - -ENTRY (__copysignf) - fzeros %f7 - fnegs %f7, %f7 - fands %f3, %f7, %f9 - fandnot2s %f1, %f7, %f1 - retl - fors %f1, %f9, %f0 -END (__copysignf) -weak_alias (__copysignf, copysignf)
\ No newline at end of file diff --git a/sysdeps/sparc/sparc64/fpu/s_fabs.c b/sysdeps/sparc/sparc64/fpu/s_fabs.c deleted file mode 100644 index db5ecf2162..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_fabs.c +++ /dev/null @@ -1,5 +0,0 @@ -double __fabs (double x) -{ - return __builtin_fabs (x); -} -weak_alias (__fabs, fabs) diff --git a/sysdeps/sparc/sparc64/fpu/s_fabsf.c b/sysdeps/sparc/sparc64/fpu/s_fabsf.c deleted file mode 100644 index 8a218e4942..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_fabsf.c +++ /dev/null @@ -1,5 +0,0 @@ -float __fabsf (float x) -{ - return __builtin_fabsf (x); -} -weak_alias (__fabsf, fabsf) diff --git a/sysdeps/sparc/sparc64/fpu/s_fabsl.c b/sysdeps/sparc/sparc64/fpu/s_fabsl.c deleted file mode 100644 index 67e9f47071..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_fabsl.c +++ /dev/null @@ -1,5 +0,0 @@ -long double __fabsl (long double x) -{ - return __builtin_fabsl (x); -} -weak_alias (__fabsl, fabsl) diff --git a/sysdeps/sparc/sparc64/fpu/s_finite.S b/sysdeps/sparc/sparc64/fpu/s_finite.S deleted file mode 100644 index 28ee074c1d..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_finite.S +++ /dev/null @@ -1,31 +0,0 @@ -/* finite(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__finite) - fabsd %f0, %f0 - st %f0, [%sp + STACK_BIAS + 128] - sethi %hi(0x7ff00000), %o2 - ld [%sp + STACK_BIAS + 128], %o0 - sub %o0, %o2, %o0 - retl - srl %o0, 31, %o0 -END (__finite) -hidden_def (__finite) -weak_alias (__finite, finite) diff --git a/sysdeps/sparc/sparc64/fpu/s_finitef.S b/sysdeps/sparc/sparc64/fpu/s_finitef.S deleted file mode 100644 index f3edca3c57..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_finitef.S +++ /dev/null @@ -1,31 +0,0 @@ -/* finitef(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__finitef) - fabss %f1, %f0 - st %f0, [%sp + STACK_BIAS + 128] - sethi %hi(0x7f800000), %o2 - ld [%sp + STACK_BIAS + 128], %o0 - sub %o0, %o2, %o0 - retl - srl %o0, 31, %o0 -END (__finitef) -hidden_def (__finitef) -weak_alias (__finitef, finitef) diff --git a/sysdeps/sparc/sparc64/fpu/s_fma.c b/sysdeps/sparc/sparc64/fpu/s_fma.c deleted file mode 100644 index 8f62605870..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_fma.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Always use dbl-64 version because long double is emulated in software. */ -#include <sysdeps/ieee754/dbl-64/s_fma.c> diff --git a/sysdeps/sparc/sparc64/fpu/s_isinf.S b/sysdeps/sparc/sparc64/fpu/s_isinf.S deleted file mode 100644 index b333a99f54..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_isinf.S +++ /dev/null @@ -1,34 +0,0 @@ -/* isinf(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__isinf) - std %f0, [%sp + STACK_BIAS + 128] - sethi %hi(0x7ff00000), %o2 - ldx [%sp + STACK_BIAS + 128], %g1 - sllx %o2, 32, %o2 - sllx %g1, 1, %o4 - srlx %o4, 1, %o5 - srax %g1, 62, %o0 - xor %o5, %o2, %o3 - retl - movrne %o3, %g0, %o0 -END (__isinf) -hidden_def (__isinf) -weak_alias (__isinf, isinf) diff --git a/sysdeps/sparc/sparc64/fpu/s_isinff.S b/sysdeps/sparc/sparc64/fpu/s_isinff.S deleted file mode 100644 index a5ecf15a9f..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_isinff.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isinff(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__isinff) - st %f1, [%sp + STACK_BIAS + 128] - sethi %hi(0x7f800000), %o2 - lduw [%sp + STACK_BIAS + 128], %g1 - sll %g1, 1, %o4 - srl %o4, 1, %o5 - sra %g1, 30, %o0 - xor %o5, %o2, %o3 - retl - movrne %o3, %g0, %o0 -END (__isinff) -hidden_def (__isinff) -weak_alias (__isinff, isinff) diff --git a/sysdeps/sparc/sparc64/fpu/s_isnan.S b/sysdeps/sparc/sparc64/fpu/s_isnan.S deleted file mode 100644 index 21084ce379..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_isnan.S +++ /dev/null @@ -1,33 +0,0 @@ -/* isnan(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__isnan) - std %f0, [%sp + STACK_BIAS + 128] - sethi %hi(0x7ff00000), %g1 - ldx [%sp + STACK_BIAS + 128], %o0 - sllx %g1, 32, %g1 - sllx %o0, 1, %o0 - srlx %o0, 1, %o0 - sub %g1, %o0, %o0 - retl - srlx %o0, 63, %o0 -END (__isnan) -hidden_def (__isnan) -weak_alias (__isnan, isnan) diff --git a/sysdeps/sparc/sparc64/fpu/s_isnanf.S b/sysdeps/sparc/sparc64/fpu/s_isnanf.S deleted file mode 100644 index a012f42746..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_isnanf.S +++ /dev/null @@ -1,32 +0,0 @@ -/* isnanf(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__isnanf) - st %f1, [%sp + STACK_BIAS + 128] - sethi %hi(0x7f800000), %g1 - lduw [%sp + STACK_BIAS + 128], %o0 - sll %o0, 1, %o0 - srl %o0, 1, %o0 - sub %g1, %o0, %o0 - retl - srl %o0, 31, %o0 -END (__isnanf) -hidden_def (__isnanf) -weak_alias (__isnanf, isnanf) diff --git a/sysdeps/sparc/sparc64/fpu/s_llrint.S b/sysdeps/sparc/sparc64/fpu/s_llrint.S deleted file mode 100644 index 7c8e941b77..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_llrint.S +++ /dev/null @@ -1 +0,0 @@ -/* llrint is implemented in s_lrint.S */ diff --git a/sysdeps/sparc/sparc64/fpu/s_llrintf.S b/sysdeps/sparc/sparc64/fpu/s_llrintf.S deleted file mode 100644 index abab3b9a2b..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_llrintf.S +++ /dev/null @@ -1 +0,0 @@ -/* llrintf is implemented in s_lrint.S */ diff --git a/sysdeps/sparc/sparc64/fpu/s_lrint.S b/sysdeps/sparc/sparc64/fpu/s_lrint.S deleted file mode 100644 index 0a3162f947..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_lrint.S +++ /dev/null @@ -1,63 +0,0 @@ -/* lrint(), sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__lrint) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - fzero ZERO - - fnegd ZERO, SIGN_BIT - stx %o2, [%sp + STACK_BIAS + 128] - fabsd %f0, %f14 - - ldd [%sp + STACK_BIAS + 128], %f16 - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - fdtox %f0, %f4 - std %f4, [%sp + STACK_BIAS + 128] - retl - ldx [%sp + STACK_BIAS + 128], %o0 -END (__lrint) -weak_alias (__lrint, lrint) - -strong_alias (__lrint, __llrint) -weak_alias (__llrint, llrint) diff --git a/sysdeps/sparc/sparc64/fpu/s_lrintf.S b/sysdeps/sparc/sparc64/fpu/s_lrintf.S deleted file mode 100644 index 5f2405ad9e..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_lrintf.S +++ /dev/null @@ -1,62 +0,0 @@ -/* lrintf(), sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__lrintf) - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - fnegs ZERO, SIGN_BIT - st %o2, [%sp + STACK_BIAS + 128] - fabss %f1, %f14 - - ld [%sp + STACK_BIAS + 128], %f16 - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - fstox %f0, %f4 - std %f4, [%sp + STACK_BIAS + 128] - retl - ldx [%sp + STACK_BIAS + 128], %o0 -END (__lrintf) -weak_alias (__lrintf, lrintf) - -strong_alias (__lrintf, __llrintf) -weak_alias (__llrintf, llrintf) diff --git a/sysdeps/sparc/sparc64/fpu/s_nearbyint.S b/sysdeps/sparc/sparc64/fpu/s_nearbyint.S deleted file mode 100644 index 05ed2bce40..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_nearbyint.S +++ /dev/null @@ -1,64 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc64 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2013. - - 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> - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyint) - fcmpd %fcc3, %f0, %f0 /* Check for sNaN */ - stx %fsr, [%sp + STACK_BIAS + 144] - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - ldx [%sp + STACK_BIAS + 144], %o4 - sethi %hi(0xf8003e0), %o5 - fzero ZERO - or %o5, %lo(0xf8003e0), %o5 - fnegd ZERO, SIGN_BIT - andn %o4, %o5, %o4 - stx %o2, [%sp + STACK_BIAS + 128] - stx %o4, [%sp + STACK_BIAS + 136] - ldx [%sp + STACK_BIAS + 136], %fsr - fabsd %f0, %f14 - ldd [%sp + STACK_BIAS + 128], %f16 - fcmpd %fcc3, %f14, %f16 - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - for %f0, SIGN_BIT, %f0 - retl - ldx [%sp + STACK_BIAS + 144], %fsr -END (__nearbyint) -weak_alias (__nearbyint, nearbyint) diff --git a/sysdeps/sparc/sparc64/fpu/s_nearbyintf.S b/sysdeps/sparc/sparc64/fpu/s_nearbyintf.S deleted file mode 100644 index 55e3639a87..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_nearbyintf.S +++ /dev/null @@ -1,63 +0,0 @@ -/* Round float to int floating-point values without generating - an inexact exception, sparc64 version. - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2013. - - 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> - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__nearbyintf) - fcmps %fcc3, %f1, %f1 /* Check for sNaN */ - stx %fsr, [%sp + STACK_BIAS + 144] - sethi %hi(0xf8003e0), %o5 - sethi %hi(TWO_TWENTYTHREE), %o2 - ldx [%sp + STACK_BIAS + 144], %o4 - or %o5, %lo(0xf8003e0), %o5 - fzeros ZERO - andn %o4, %o5, %o4 - fnegs ZERO, SIGN_BIT - st %o2, [%sp + STACK_BIAS + 128] - stx %o4, [%sp + STACK_BIAS + 136] - ldx [%sp + STACK_BIAS + 136], %fsr - fabss %f1, %f14 - ld [%sp + STACK_BIAS + 128], %f16 - fcmps %fcc3, %f14, %f16 - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - fors %f0, SIGN_BIT, %f0 - retl - ldx [%sp + STACK_BIAS + 144], %fsr -END (__nearbyintf) -weak_alias (__nearbyintf, nearbyintf) diff --git a/sysdeps/sparc/sparc64/fpu/s_rint.S b/sysdeps/sparc/sparc64/fpu/s_rint.S deleted file mode 100644 index 8d0134c90c..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_rint.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Round float to int floating-point values, sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_FIFTYTWO 0x43300000 /* 2**52 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rint) - sethi %hi(TWO_FIFTYTWO), %o2 - sllx %o2, 32, %o2 - fzero ZERO - - fnegd ZERO, SIGN_BIT - stx %o2, [%sp + STACK_BIAS + 128] - fabsd %f0, %f14 - - ldd [%sp + STACK_BIAS + 128], %f16 - fcmpd %fcc3, %f14, %f16 - - fmovduge %fcc3, ZERO, %f16 - fand %f0, SIGN_BIT, SIGN_BIT - - for %f16, SIGN_BIT, %f16 - faddd %f0, %f16, %f6 - fsubd %f6, %f16, %f0 - fabsd %f0, %f0 - retl - for %f0, SIGN_BIT, %f0 -END (__rint) -weak_alias (__rint, rint) diff --git a/sysdeps/sparc/sparc64/fpu/s_rintf.S b/sysdeps/sparc/sparc64/fpu/s_rintf.S deleted file mode 100644 index a2f9261382..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_rintf.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Round float to int floating-point values, sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2012. - - 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> - - /* We pop constants into the FPU registers using the incoming - argument stack slots, since this avoid having to use any PIC - references. We also thus avoid having to allocate a register - window. - - VIS instructions are used to facilitate the formation of - easier constants, and the propagation of the sign bit. */ - -#define TWO_TWENTYTHREE 0x4b000000 /* 2**23 */ - -#define ZERO %f10 /* 0.0 */ -#define SIGN_BIT %f12 /* -0.0 */ - -ENTRY (__rintf) - sethi %hi(TWO_TWENTYTHREE), %o2 - fzeros ZERO - - fnegs ZERO, SIGN_BIT - st %o2, [%sp + STACK_BIAS + 128] - fabss %f1, %f14 - - ld [%sp + STACK_BIAS + 128], %f16 - fcmps %fcc3, %f14, %f16 - - fmovsuge %fcc3, ZERO, %f16 - fands %f1, SIGN_BIT, SIGN_BIT - - fors %f16, SIGN_BIT, %f16 - fadds %f1, %f16, %f5 - fsubs %f5, %f16, %f0 - fabss %f0, %f0 - retl - fors %f0, SIGN_BIT, %f0 -END (__rintf) -weak_alias (__rintf, rintf) diff --git a/sysdeps/sparc/sparc64/fpu/s_signbit.S b/sysdeps/sparc/sparc64/fpu/s_signbit.S deleted file mode 100644 index 979917b5d0..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_signbit.S +++ /dev/null @@ -1,32 +0,0 @@ -/* signbit(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__signbit) - st %f0, [%sp + STACK_BIAS + 128] - ld [%sp + STACK_BIAS + 128], %o0 - retl - srl %o0, 31, %o0 -END (__signbit) - -/* On 64-bit the double version will also always work for - long-double-precision since in both cases the word with the - sign bit in it is passed always in register %f0. */ -strong_alias (__signbit, __signbitl) -hidden_def (__signbitl) diff --git a/sysdeps/sparc/sparc64/fpu/s_signbitf.S b/sysdeps/sparc/sparc64/fpu/s_signbitf.S deleted file mode 100644 index cb96983868..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_signbitf.S +++ /dev/null @@ -1,26 +0,0 @@ -/* signbitf(). sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__signbitf) - st %f1, [%sp + STACK_BIAS + 128] - ld [%sp + STACK_BIAS + 128], %o0 - retl - srl %o0, 31, %o0 -END (__signbitf) diff --git a/sysdeps/sparc/sparc64/fpu/s_signbitl.S b/sysdeps/sparc/sparc64/fpu/s_signbitl.S deleted file mode 100644 index f5e5fb9253..0000000000 --- a/sysdeps/sparc/sparc64/fpu/s_signbitl.S +++ /dev/null @@ -1 +0,0 @@ -/* signbitl is implemented in s_signbit.S */ diff --git a/sysdeps/sparc/sparc64/fpu/w_sqrt_compat.S b/sysdeps/sparc/sparc64/fpu/w_sqrt_compat.S deleted file mode 100644 index de95e52e8e..0000000000 --- a/sysdeps/sparc/sparc64/fpu/w_sqrt_compat.S +++ /dev/null @@ -1,48 +0,0 @@ -/* sqrt function. sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__sqrt) - fzero %f8 - fcmpd %fcc2, %f0, %f8 - fbl,pn %fcc2, 1f - nop -8: retl - fsqrtd %f0, %f0 -1: -#ifdef SHARED - SETUP_PIC_REG_LEAF(o5, g1) - sethi %gdop_hix22(_LIB_VERSION), %g1 - xor %g1, %gdop_lox10(_LIB_VERSION), %g1 - ldx [%o5 + %g1], %g1, %gdop(_LIB_VERSION) -#else - sethi %hi(_LIB_VERSION), %g1 - or %g1, %lo(_LIB_VERSION), %g1 -#endif - ld [%g1], %g1 - cmp %g1, -1 - be,pt %icc, 8b - fmovd %f0, %f2 - mov 26, %o2 - mov %o7, %g1 - call __kernel_standard - mov %g1, %o7 -END (__sqrt) - -weak_alias (__sqrt, sqrt) diff --git a/sysdeps/sparc/sparc64/fpu/w_sqrtf_compat.S b/sysdeps/sparc/sparc64/fpu/w_sqrtf_compat.S deleted file mode 100644 index 0c253fe43a..0000000000 --- a/sysdeps/sparc/sparc64/fpu/w_sqrtf_compat.S +++ /dev/null @@ -1,48 +0,0 @@ -/* sqrtf function. sparc64 version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY (__sqrtf) - fzeros %f8 - fcmps %fcc2, %f1, %f8 - fbl,pn %fcc2, 1f - nop -8: retl - fsqrts %f1, %f0 -1: -#ifdef SHARED - SETUP_PIC_REG_LEAF(o5, g1) - sethi %gdop_hix22(_LIB_VERSION), %g1 - xor %g1, %gdop_lox10(_LIB_VERSION), %g1 - ldx [%o5 + %g1], %g1, %gdop(_LIB_VERSION) -#else - sethi %hi(_LIB_VERSION), %g1 - or %g1, %lo(_LIB_VERSION), %g1 -#endif - ld [%g1], %g1 - cmp %g1, -1 - be,pt %icc, 8b - fmovs %f1, %f3 - mov 126, %o2 - mov %o7, %g1 - call __kernel_standard_f - mov %g1, %o7 -END (__sqrtf) - -weak_alias (__sqrtf, sqrtf) diff --git a/sysdeps/sparc/sparc64/hp-timing.h b/sysdeps/sparc/sparc64/hp-timing.h deleted file mode 100644 index 433dd28d06..0000000000 --- a/sysdeps/sparc/sparc64/hp-timing.h +++ /dev/null @@ -1,33 +0,0 @@ -/* High precision, low overhead timing functions. sparc64 version. - Copyright (C) 2001-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@redhat.com>, 2001. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _HP_TIMING_H -#define _HP_TIMING_H 1 - -#define HP_TIMING_AVAIL (1) -#define HP_SMALL_TIMING_AVAIL (1) -#define HP_TIMING_INLINE (1) - -typedef unsigned long int hp_timing_t; - -#define HP_TIMING_NOW(Var) __asm__ __volatile__ ("rd %%tick, %0" : "=r" (Var)) - -#include <hp-timing-common.h> - -#endif /* hp-timing.h */ diff --git a/sysdeps/sparc/sparc64/jmpbuf-unwind.h b/sysdeps/sparc/sparc64/jmpbuf-unwind.h deleted file mode 100644 index eb2e2e2fb4..0000000000 --- a/sysdeps/sparc/sparc64/jmpbuf-unwind.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 2005-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net>, 2005. - - 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> - -/* Test if longjmp to JMPBUF would unwind the frame - containing a local variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((unsigned long int) (address) \ - < (jmpbuf)->__uc_mcontext.__mc_gregs[MC_O6] + 2047) - -#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)[0].__uc_mcontext.__mc_gregs[MC_O6] + 2047 - (_adj)) - -/* We use the normal lobngjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/sparc/sparc64/lshift.S b/sysdeps/sparc/sparc64/lshift.S deleted file mode 100644 index 74ce43bb01..0000000000 --- a/sysdeps/sparc/sparc64/lshift.S +++ /dev/null @@ -1,95 +0,0 @@ -/* SPARC v9 __mpn_lshift -- - - Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* INPUT PARAMETERS - res_ptr %o0 - src_ptr %o1 - size %o2 - cnt %o3 */ - - .register %g2, #scratch - .register %g3, #scratch - -ENTRY(__mpn_lshift) - sllx %o2,3,%g1 - add %o1,%g1,%o1 ! make %o1 point at end of src - ldx [%o1-8],%g2 ! load first limb - sub %g0,%o3,%o5 ! negate shift count - add %o0,%g1,%o0 ! make %o0 point at end of res - add %o2,-1,%o2 - andcc %o2,4-1,%g4 ! number of limbs in first loop - srlx %g2,%o5,%g1 ! compute function result - be,pn %xcc,.L0 ! if multiple of 4 limbs, skip first loop - mov %g1,%g5 - - sub %o2,%g4,%o2 ! adjust count for main loop - -.Loop0: ldx [%o1-16],%g3 - add %o0,-8,%o0 - add %o1,-8,%o1 - sllx %g2,%o3,%o4 - addcc %g4,-1,%g4 - srlx %g3,%o5,%g1 - mov %g3,%g2 - or %o4,%g1,%o4 - bne,pt %xcc,.Loop0 - stx %o4,[%o0+0] - -.L0: brz,pn %o2,.Lend - nop - -.Loop: ldx [%o1-16],%g3 - add %o0,-32,%o0 - sllx %g2,%o3,%o4 - addcc %o2,-4,%o2 - srlx %g3,%o5,%g1 - - ldx [%o1-24],%g2 - sllx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0+24] - srlx %g2,%o5,%g1 - - ldx [%o1-32],%g3 - sllx %g2,%o3,%o4 - or %g4,%g1,%g4 - stx %g4,[%o0+16] - srlx %g3,%o5,%g1 - - ldx [%o1-40],%g2 - sllx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0+8] - srlx %g2,%o5,%g1 - - add %o1,-32,%o1 - or %g4,%g1,%g4 - bne,pt %xcc,.Loop - stx %g4,[%o0+0] - -.Lend: sllx %g2,%o3,%g2 - stx %g2,[%o0-8] - - jmpl %o7+8, %g0 - mov %g5,%o0 - -END(__mpn_lshift) diff --git a/sysdeps/sparc/sparc64/memchr.S b/sysdeps/sparc/sparc64/memchr.S deleted file mode 100644 index e82075510b..0000000000 --- a/sysdeps/sparc/sparc64/memchr.S +++ /dev/null @@ -1,260 +0,0 @@ -/* memchr (str, ch, n) -- Return pointer to first occurrence of CH in STR less - than N. - For SPARC v9. - Copyright (C) 1998-2017 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 <sysdep.h> -#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 */ - addcc %o0, %o2, %o2 /* IEU1 */ - movcs %XCC, -1, %o2 /* IEU0 Group */ - - 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 */ - - bgu,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) - -weak_alias (__memchr, memchr) -libc_hidden_builtin_def (memchr) diff --git a/sysdeps/sparc/sparc64/memcmp.S b/sysdeps/sparc/sparc64/memcmp.S deleted file mode 100644 index 00ff2eec6b..0000000000 --- a/sysdeps/sparc/sparc64/memcmp.S +++ /dev/null @@ -1,142 +0,0 @@ -/* Compare two memory blocks for differences in the first COUNT bytes. - For SPARC v9. - Copyright (C) 1998-2017 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 <sysdep.h> -#include <asm/asi.h> -#ifndef XCC -#define XCC xcc -#define USE_BPR - .register %g2, #scratch - .register %g3, #scratch -#endif - - .text - .align 32 -ENTRY(memcmp) -#ifdef USE_BPR - brz,pn %o2, 3f /* CTI+IEU1 Group */ -#else - tst %o2 /* IEU1 Group */ - be,pn %XCC, 3f /* CTI */ -#endif - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,pn %icc, 8f /* CTI */ -1: andcc %o1, 7, %g1 /* IEU1 Group */ - - bne,pn %icc, 10f /* CTI */ - mov 64, %g3 /* IEU0 */ - ldx [%o0], %g1 /* Load Group */ - sub %o1, %o0, %o1 /* IEU0 */ - - ldx [%o0 + %o1], %g2 /* Load Group */ - add %o0, 8, %o0 /* IEU0 */ -2: mov %g1, %o3 /* IEU0 Group */ - subcc %o2, 8, %o2 /* IEU1 */ - - bcs,pn %XCC, 5f /* CTI */ - ldxa [%o0] ASI_PNF, %g1 /* Load Group */ - mov %g2, %o4 /* IEU0 */ - ldxa [%o0 + %o1] ASI_PNF, %g2 /* Load Group */ - - cmp %o3, %o4 /* IEU1 */ - be,pt %xcc, 2b /* CTI */ - add %o0, 8, %o0 /* IEU0 */ -7: mov -1, %o0 /* IEU1 */ - - retl /* CTI+IEU1 Group */ - movgu %xcc, 1, %o0 /* Single Group */ -3: retl /* CTI+IEU1 Group */ - clr %o0 /* IEU0 */ - - .align 16 -5: mov %g2, %o4 /* IEU0 */ -6: cmp %o2, -8 /* IEU1 */ - be,pn %XCC, 3b /* CTI */ - sub %g0, %o2, %o2 /* IEU0 Group */ - - sllx %o2, 3, %o2 /* IEU0 Group */ - srlx %o3, %o2, %o3 /* IEU0 Group */ - srlx %o4, %o2, %o4 /* IEU0 Group */ - clr %o0 /* IEU1 */ - - cmp %o3, %o4 /* IEU1 Group */ - movgu %xcc, 1, %o0 /* Single Group */ - retl /* CTI+IEU1 Group */ - movlu %xcc, -1, %o0 /* Single Group */ - -8: ldub [%o0], %o3 /* Load */ - add %o0, 1, %o0 /* IEU0 */ - ldub [%o1], %o4 /* Load Group */ - add %o1, 1, %o1 /* IEU0 */ - -9: cmp %o3, %o4 /* IEU1 Group */ - bne,pn %xcc, 12f /* CTI */ - subcc %o2, 1, %o2 /* IEU1 Group */ - be,pn %XCC, 3b /* CTI */ - - lduba [%o0] ASI_PNF, %o3 /* Load */ - andcc %o0, 7, %g0 /* IEU1 Group */ - be,pn %icc, 1b /* CTI */ - lduba [%o1] ASI_PNF, %o4 /* Load */ - - add %o0, 1, %o0 /* IEU0 Group */ - ba,pt %xcc, 9b /* CTI */ - add %o1, 1, %o1 /* IEU1 */ - - .align 16 -12: mov -1, %o0 /* IEU0 Group */ - cmp %o3, %o4 /* IEU1 */ - retl /* CTI+IEU1 Group */ - movgu %xcc, 1, %o0 /* Single Group */ - - .align 16 - nop /* Stub */ -10: sllx %g1, 3, %g2 /* IEU0 Group */ - sub %o1, %g1, %o1 /* IEU1 */ - sub %g3, %g2, %g3 /* IEU0 Group */ - - ldxa [%o0] ASI_PNF, %g5 /* Load */ - sub %o1, %o0, %o1 /* IEU1 */ - ldxa [%o0 + %o1] ASI_PNF, %g4 /* Load Group */ - add %o0, 8, %o0 /* IEU0 */ - -11: sllx %g4, %g2, %o4 /* IEU0 Group */ - ldxa [%o0 + %o1] ASI_PNF, %g4 /* Load */ - srlx %g4, %g3, %o5 /* IEU0 Group */ - mov %g5, %o3 /* IEU1 */ - - ldxa [%o0] ASI_PNF, %g5 /* Load */ - subcc %o2, 8, %o2 /* IEU1 Group */ - bcs,pn %XCC, 6b /* CTI */ - or %o4, %o5, %o4 /* IEU0 */ - - cmp %o3, %o4 /* IEU1 Group */ - be,pt %xcc, 11b /* CTI */ - add %o0, 8, %o0 /* IEU0 */ - mov -1, %o0 /* IEU0 */ - - retl /* CTI+IEU1 Group */ - movgu %xcc, 1, %o0 /* Single Group */ -END(memcmp) - -#undef bcmp -weak_alias (memcmp, bcmp) -libc_hidden_builtin_def (memcmp) diff --git a/sysdeps/sparc/sparc64/memcpy.S b/sysdeps/sparc/sparc64/memcpy.S deleted file mode 100644 index c1c0bf64d1..0000000000 --- a/sysdeps/sparc/sparc64/memcpy.S +++ /dev/null @@ -1,580 +0,0 @@ -/* Copy SIZE bytes from SRC to DEST. - For UltraSPARC. - Copyright (C) 1996-2017 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 <sysdep.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; \ - fsrc2 %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]; - - .text - .align 32 -ENTRY(__memcpy_large) -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 */ - fsrc2 %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 */ - fsrc2 %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 -END(__memcpy_large) - -ENTRY(__mempcpy) - ba,pt %xcc, 210f - add %o0, %o2, %g4 -END(__mempcpy) - - .align 32 -ENTRY(memcpy) - mov %o0, %g4 /* IEU0 Group */ -210: -#ifndef USE_BPR - srl %o2, 0, %o2 /* IEU1 */ -#endif - brz,pn %o2, 209b /* CTI Group */ -218: cmp %o2, 15 /* IEU1 */ - bleu,pn %xcc, 208b /* CTI Group */ - cmp %o2, (64 * 6) /* IEU1 */ - bgeu,pn %xcc, 200b /* CTI Group */ - andcc %o0, 7, %g2 /* IEU1 */ - 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 */ - fsrc2 %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_builtin_def (memcpy) - -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) diff --git a/sysdeps/sparc/sparc64/memset.S b/sysdeps/sparc/sparc64/memset.S deleted file mode 100644 index 5664436a51..0000000000 --- a/sysdeps/sparc/sparc64/memset.S +++ /dev/null @@ -1,314 +0,0 @@ -/* Set a block of memory to some byte value. - For UltraSPARC. - Copyright (C) 1996-2017 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 <sysdep.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 - fsrc2 %f0, %f2 - fsrc2 %f0, %f4 - andn %o3, 0xff, %o3 - fsrc2 %f0, %f6 - cmp %g5, 64 - fsrc2 %f0, %f8 - fsrc2 %f0, %f10 - fsrc2 %f0, %f12 - brz,pn %g5, 10f - fsrc2 %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_builtin_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 -ENTRY(__bzero) -#ifndef USE_BPR - srl %o1, 0, %o1 -#endif - mov %o0, %o5 -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 -END(__bzero) - -weak_alias (__bzero, bzero) diff --git a/sysdeps/sparc/sparc64/mul_1.S b/sysdeps/sparc/sparc64/mul_1.S deleted file mode 100644 index 0a32882c1c..0000000000 --- a/sysdeps/sparc/sparc64/mul_1.S +++ /dev/null @@ -1,82 +0,0 @@ -/* SPARC v9 __mpn_mul_1 -- Multiply a limb vector with a single limb and - store the product in a second limb vector. - - Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - - -/* INPUT PARAMETERS - res_ptr o0 - s1_ptr o1 - size o2 - s2_limb o3 */ - -ENTRY(__mpn_mul_1) - !#PROLOGUE# 0 - save %sp,-192,%sp - !#PROLOGUE# 1 - - sub %g0,%i2,%o7 - sllx %o7,3,%g5 - sub %i1,%g5,%o3 - sub %i0,%g5,%o4 - mov 0,%o0 ! zero cy_limb - - srl %i3,0,%o1 ! extract low 32 bits of s2_limb - srlx %i3,32,%i3 ! extract high 32 bits of s2_limb - mov 1,%o2 - sllx %o2,32,%o2 ! o2 = 0x100000000 - - ! hi ! - ! mid-1 ! - ! mid-2 ! - ! lo ! -.Loop: - sllx %o7,3,%g1 - ldx [%o3+%g1],%g5 - srl %g5,0,%i0 ! zero hi bits - srlx %g5,32,%g5 - mulx %o1,%i0,%i4 ! lo product - mulx %i3,%i0,%i1 ! mid-1 product - mulx %o1,%g5,%l2 ! mid-2 product - mulx %i3,%g5,%i5 ! hi product - srlx %i4,32,%i0 ! extract high 32 bits of lo product... - add %i1,%i0,%i1 ! ...and add it to the mid-1 product - addcc %i1,%l2,%i1 ! add mid products - mov 0,%l0 ! we need the carry from that add... - movcs %xcc,%o2,%l0 ! ...compute it and... - add %i5,%l0,%i5 ! ...add to bit 32 of the hi product - sllx %i1,32,%i0 ! align low bits of mid product - srl %i4,0,%g5 ! zero high 32 bits of lo product - add %i0,%g5,%i0 ! combine into low 64 bits of result - srlx %i1,32,%i1 ! extract high bits of mid product... - add %i5,%i1,%i1 ! ...and add them to the high result - addcc %i0,%o0,%i0 ! add cy_limb to low 64 bits of result - mov 0,%g5 - movcs %xcc,1,%g5 - addcc %o7,1,%o7 - stx %i0,[%o4+%g1] - bne,pt %xcc,.Loop - add %i1,%g5,%o0 ! compute new cy_limb - - jmpl %i7+8,%g0 - restore %o0,%g0,%o0 - -END(__mpn_mul_1) diff --git a/sysdeps/sparc/sparc64/multiarch/Makefile b/sysdeps/sparc/sparc64/multiarch/Makefile deleted file mode 100644 index 55b757f9ad..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -ifeq ($(subdir),crypt) -libcrypt-sysdep_routines += md5-crop sha256-crop sha512-crop -endif - -ifeq ($(subdir),locale) -localedef-aux += md5-crop -endif - -ifeq ($(subdir),string) -sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \ - memset-niagara1 memcpy-niagara4 memset-niagara4 -endif - -ifeq ($(subdir),stdlib) -sysdep_routines += mul_1-vis3 addmul_1-vis3 submul_1-vis3 add_n-vis3 sub_n-vis3 -endif - -ifeq ($(subdir),math) -gmp-sysdep_routines = mul_1-vis3 addmul_1-vis3 submul_1-vis3 add_n-vis3 \ - sub_n-vis3 -endif diff --git a/sysdeps/sparc/sparc64/multiarch/add_n-vis3.S b/sysdeps/sparc/sparc64/multiarch/add_n-vis3.S deleted file mode 100644 index c038bcbd6e..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/add_n-vis3.S +++ /dev/null @@ -1,67 +0,0 @@ -! SPARC v9 64-bit VIS3 __mpn_add_n -- Add two limb vectors of the same length > 0 and -! store sum in a third limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller <davem@davemloft.net> -! -! 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> - -#define res_ptr %o0 -#define s1_ptr %o1 -#define s2_ptr %o2 -#define sz %o3 -#define tmp1 %g1 -#define tmp2 %g2 -#define tmp3 %g3 -#define tmp4 %o4 - - .register %g2,#scratch - .register %g3,#scratch -ENTRY(__mpn_add_n_vis3) - subcc sz, 1, sz - be .Lfinal_limb - cmp %g0, 0 - -.Lloop: - ldx [s2_ptr + 0x00], tmp1 - add s2_ptr, 0x10, s2_ptr - ldx [s1_ptr + 0x00], tmp2 - add s1_ptr, 0x10, s1_ptr - ldx [s2_ptr - 0x08], tmp3 - add res_ptr, 0x10, res_ptr - ldx [s1_ptr - 0x08], tmp4 - sub sz, 2, sz - addxccc tmp1, tmp2, tmp1 - stx tmp1, [res_ptr - 0x10] - addxccc tmp3, tmp4, tmp3 - brgz sz, .Lloop - stx tmp3, [res_ptr - 0x08] - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - ldx [s2_ptr + 0x00], tmp1 - ldx [s1_ptr + 0x00], tmp2 - addxccc tmp1, tmp2, tmp1 - stx tmp1, [res_ptr + 0x00] - -.Lfinish: - retl - addxc %g0, %g0, %o0 -END(__mpn_add_n_vis3) diff --git a/sysdeps/sparc/sparc64/multiarch/add_n.S b/sysdeps/sparc/sparc64/multiarch/add_n.S deleted file mode 100644 index 9ffaf7865b..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/add_n.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of add_n - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY(__mpn_add_n) - .type __mpn_add_n, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_VIS3, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__mpn_add_n_vis3), %o1 - xor %o1, %gdop_lox10(__mpn_add_n_vis3), %o1 -# else - set __mpn_add_n_vis3, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__mpn_add_n_generic), %o1 - xor %o1, %gdop_lox10(__mpn_add_n_generic), %o1 -# else - set __mpn_add_n_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mpn_add_n) - -#define __mpn_add_n __mpn_add_n_generic -#include "../add_n.S" diff --git a/sysdeps/sparc/sparc64/multiarch/addmul_1-vis3.S b/sysdeps/sparc/sparc64/multiarch/addmul_1-vis3.S deleted file mode 100644 index 64671f5079..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/addmul_1-vis3.S +++ /dev/null @@ -1,87 +0,0 @@ -! SPARC v9 64-bit VIS3 __mpn_addmul_1 -- Multiply a limb vector with a -! limb and add the result to a second limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller <davem@davemloft.net> -! -! 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> - -#define res_ptr %i0 -#define s1_ptr %i1 -#define sz %i2 -#define s2_limb %i3 -#define carry %o5 -#define tmp1 %g1 -#define tmp2 %g2 -#define tmp3 %g3 -#define tmp4 %o4 -#define tmp5 %l0 -#define tmp6 %l1 -#define tmp7 %l2 -#define tmp8 %l3 - - .register %g2,#scratch - .register %g3,#scratch -ENTRY(__mpn_addmul_1_vis3) - save %sp, -176, %sp - subcc sz, 1, sz - be .Lfinal_limb - clr carry - -.Lloop: - ldx [s1_ptr + 0x00], tmp1 - ldx [res_ptr + 0x00], tmp3 - ldx [s1_ptr + 0x08], tmp2 - ldx [res_ptr + 0x08], tmp4 - mulx tmp1, s2_limb, tmp5 - add s1_ptr, 0x10, s1_ptr - umulxhi tmp1, s2_limb, tmp6 - add res_ptr, 0x10, res_ptr - mulx tmp2, s2_limb, tmp7 - sub sz, 2, sz - umulxhi tmp2, s2_limb, tmp8 - addcc carry, tmp5, tmp5 - addxc %g0, tmp6, carry - addcc tmp3, tmp5, tmp5 - addxc %g0, carry, carry - stx tmp5, [res_ptr - 0x10] - addcc carry, tmp7, tmp7 - addxc %g0, tmp8, carry - addcc tmp4, tmp7, tmp7 - addxc %g0, carry, carry - brgz sz, .Lloop - stx tmp7, [res_ptr - 0x08] - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - ldx [s1_ptr + 0x00], tmp1 - ldx [res_ptr + 0x00], tmp3 - mulx tmp1, s2_limb, tmp5 - umulxhi tmp1, s2_limb, tmp6 - addcc carry, tmp5, tmp5 - addxc %g0, tmp6, carry - addcc tmp3, tmp5, tmp5 - addxc %g0, carry, carry - stx tmp5, [res_ptr + 0x00] - -.Lfinish: - jmpl %i7 + 8, %g0 - restore carry, 0, %o0 -END(__mpn_addmul_1_vis3) diff --git a/sysdeps/sparc/sparc64/multiarch/addmul_1.S b/sysdeps/sparc/sparc64/multiarch/addmul_1.S deleted file mode 100644 index dcb1da184c..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/addmul_1.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of addmul_1 - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY(__mpn_addmul_1) - .type __mpn_addmul_1, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_VIS3, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__mpn_addmul_1_vis3), %o1 - xor %o1, %gdop_lox10(__mpn_addmul_1_vis3), %o1 -# else - set __mpn_addmul_1_vis3, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__mpn_addmul_1_generic), %o1 - xor %o1, %gdop_lox10(__mpn_addmul_1_generic), %o1 -# else - set __mpn_addmul_1_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mpn_addmul_1) - -#define __mpn_addmul_1 __mpn_addmul_1_generic -#include "../addmul_1.S" diff --git a/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c b/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c deleted file mode 100644 index a97bc455a8..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Enumerate available IFUNC implementations of a function. sparc version. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <assert.h> -#include <string.h> -#include <wchar.h> -#include <ldsodefs.h> -#include <sysdep.h> -#include <ifunc-impl-list.h> - -/* Fill ARRAY of MAX elements with IFUNC implementations for function - NAME and return the number of valid entries. */ - -size_t -__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, - size_t max) -{ - size_t i = 0; - int hwcap; - - hwcap = GLRO(dl_hwcap); - - IFUNC_IMPL (i, name, memcpy, - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_CRYPTO, - __memcpy_niagara4) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_N2, - __memcpy_niagara2) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_BLKINIT, - __memcpy_niagara1) - IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_ULTRA3, - __memcpy_ultra3) - IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_ultra1)); - - IFUNC_IMPL (i, name, mempcpy, - IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_CRYPTO, - __mempcpy_niagara4) - IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_N2, - __mempcpy_niagara2) - IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_BLKINIT, - __mempcpy_niagara1) - IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_ULTRA3, - __mempcpy_ultra3) - IFUNC_IMPL_ADD (array, i, mempcpy, 1, __mempcpy_ultra1)); - - IFUNC_IMPL (i, name, bzero, - IFUNC_IMPL_ADD (array, i, bzero, hwcap & HWCAP_SPARC_CRYPTO, - __bzero_niagara4) - IFUNC_IMPL_ADD (array, i, bzero, hwcap & HWCAP_SPARC_BLKINIT, - __bzero_niagara1) - IFUNC_IMPL_ADD (array, i, bzero, 1, __bzero_ultra1)); - - IFUNC_IMPL (i, name, memset, - IFUNC_IMPL_ADD (array, i, memset, hwcap & HWCAP_SPARC_CRYPTO, - __memset_niagara4) - IFUNC_IMPL_ADD (array, i, memset, hwcap & HWCAP_SPARC_BLKINIT, - __memset_niagara1) - IFUNC_IMPL_ADD (array, i, memset, 1, __memset_ultra1)); - - return i; -} diff --git a/sysdeps/sparc/sparc64/multiarch/md5-block.c b/sysdeps/sparc/sparc64/multiarch/md5-block.c deleted file mode 100644 index 7c1a3a368f..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/md5-block.c +++ /dev/null @@ -1,29 +0,0 @@ -#include <sparc-ifunc.h> - -#define __md5_process_block __md5_process_block_generic -extern void __md5_process_block_generic (const void *buffer, size_t len, - struct md5_ctx *ctx); - -#include <crypt/md5-block.c> - -#undef __md5_process_block - -extern void __md5_process_block_crop (const void *buffer, size_t len, - struct md5_ctx *ctx); -static bool cpu_supports_md5(int hwcap) -{ - unsigned long cfr; - - if (!(hwcap & HWCAP_SPARC_CRYPTO)) - return false; - - __asm__ ("rd %%asr26, %0" : "=r" (cfr)); - if (cfr & (1 << 4)) - return true; - - return false; -} - -extern void __md5_process_block (const void *buffer, size_t len, - struct md5_ctx *ctx); -sparc_libc_ifunc(__md5_process_block, cpu_supports_md5(hwcap) ? __md5_process_block_crop : __md5_process_block_generic); diff --git a/sysdeps/sparc/sparc64/multiarch/md5-crop.S b/sysdeps/sparc/sparc64/multiarch/md5-crop.S deleted file mode 100644 index e8810da83e..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/md5-crop.S +++ /dev/null @@ -1,110 +0,0 @@ -/* MD5 using sparc crypto opcodes. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - 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> - -#define ASI_PL 0x88 - -#define MD5 \ - .word 0x81b02800; - - .text - .align 32 -ENTRY(__md5_process_block_crop) - /* %o0=buffer, %o1=len, %o2=CTX */ - ld [%o2 + 0x10], %g1 - add %g1, %o1, %o4 - st %o4, [%o2 + 0x10] - clr %o5 - cmp %o4, %g1 - movlu %icc, 1, %o5 -#ifdef __arch64__ - srlx %o1, 32, %o4 - add %o5, %o4, %o5 -#endif - ld [%o2 + 0x14], %o4 - add %o4, %o5, %o4 - st %o4, [%o2 + 0x14] - lda [%o2] ASI_PL, %f0 - add %o2, 0x4, %g1 - lda [%g1] ASI_PL, %f1 - add %o2, 0x8, %g1 - andcc %o0, 0x7, %g0 - lda [%g1] ASI_PL, %f2 - add %o2, 0xc, %g1 - bne,pn %xcc, 10f - lda [%g1] ASI_PL, %f3 - -1: - ldd [%o0 + 0x00], %f8 - ldd [%o0 + 0x08], %f10 - ldd [%o0 + 0x10], %f12 - ldd [%o0 + 0x18], %f14 - ldd [%o0 + 0x20], %f16 - ldd [%o0 + 0x28], %f18 - ldd [%o0 + 0x30], %f20 - ldd [%o0 + 0x38], %f22 - - MD5 - - subcc %o1, 64, %o1 - bne,pt %xcc, 1b - add %o0, 0x40, %o0 - -5: - sta %f0, [%o2] ASI_PL - add %o2, 0x4, %g1 - sta %f1, [%g1] ASI_PL - add %o2, 0x8, %g1 - sta %f2, [%g1] ASI_PL - add %o2, 0xc, %g1 - retl - sta %f3, [%g1] ASI_PL -10: - alignaddr %o0, %g0, %o0 - - ldd [%o0 + 0x00], %f10 -1: - ldd [%o0 + 0x08], %f12 - ldd [%o0 + 0x10], %f14 - ldd [%o0 + 0x18], %f16 - ldd [%o0 + 0x20], %f18 - ldd [%o0 + 0x28], %f20 - ldd [%o0 + 0x30], %f22 - ldd [%o0 + 0x38], %f24 - ldd [%o0 + 0x40], %f26 - - faligndata %f10, %f12, %f8 - faligndata %f12, %f14, %f10 - faligndata %f14, %f16, %f12 - faligndata %f16, %f18, %f14 - faligndata %f18, %f20, %f16 - faligndata %f20, %f22, %f18 - faligndata %f22, %f24, %f20 - faligndata %f24, %f26, %f22 - - MD5 - - subcc %o1, 64, %o1 - fsrc2 %f26, %f10 - bne,pt %xcc, 1b - add %o0, 0x40, %o0 - - ba,a,pt %xcc, 5b -END(__md5_process_block_crop) diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S deleted file mode 100644 index ccf42446e8..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S +++ /dev/null @@ -1,347 +0,0 @@ -/* Copy SIZE bytes from SRC to DEST. For SUN4V Niagara. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - 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> - -#define ASI_BLK_INIT_QUAD_LDD_P 0xe2 -#define ASI_P 0x80 -#define ASI_PNF 0x82 - -#define LOAD(type,addr,dest) type##a [addr] ASI_P, dest -#define LOAD_TWIN(addr_reg,dest0,dest1) \ - ldda [addr_reg] ASI_BLK_INIT_QUAD_LDD_P, dest0 - -#define STORE(type,src,addr) type src, [addr] -#define STORE_INIT(src,addr) stxa src, [addr] %asi - -#ifndef XCC -#define USE_BPR -#define XCC xcc -#endif - -#if IS_IN (libc) - - .register %g2,#scratch - .register %g3,#scratch - .register %g6,#scratch - - .text - -ENTRY(__mempcpy_niagara1) - ba,pt %XCC, 101f - add %o0, %o2, %g5 -END(__mempcpy_niagara1) - - .align 32 -ENTRY(__memcpy_niagara1) -100: /* %o0=dst, %o1=src, %o2=len */ - mov %o0, %g5 -101: -# ifndef USE_BPR - srl %o2, 0, %o2 -# endif - cmp %o2, 0 - be,pn %XCC, 85f -218: or %o0, %o1, %o3 - cmp %o2, 16 - blu,a,pn %XCC, 80f - or %o3, %o2, %o3 - - /* 2 blocks (128 bytes) is the minimum we can do the block - * copy with. We need to ensure that we'll iterate at least - * once in the block copy loop. At worst we'll need to align - * the destination to a 64-byte boundary which can chew up - * to (64 - 1) bytes from the length before we perform the - * block copy loop. - */ - cmp %o2, (2 * 64) - blu,pt %XCC, 70f - andcc %o3, 0x7, %g0 - - /* %o0: dst - * %o1: src - * %o2: len (known to be >= 128) - * - * The block copy loops will use %o4/%o5,%g2/%g3 as - * temporaries while copying the data. - */ - - LOAD(prefetch, %o1, #one_read) - wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi - - /* Align destination on 64-byte boundary. */ - andcc %o0, (64 - 1), %o4 - be,pt %XCC, 2f - sub %o4, 64, %o4 - sub %g0, %o4, %o4 ! bytes to align dst - sub %o2, %o4, %o2 -1: subcc %o4, 1, %o4 - LOAD(ldub, %o1, %g1) - STORE(stb, %g1, %o0) - add %o1, 1, %o1 - bne,pt %XCC, 1b - add %o0, 1, %o0 - - /* If the source is on a 16-byte boundary we can do - * the direct block copy loop. If it is 8-byte aligned - * we can do the 16-byte loads offset by -8 bytes and the - * init stores offset by one register. - * - * If the source is not even 8-byte aligned, we need to do - * shifting and masking (basically integer faligndata). - * - * The careful bit with init stores is that if we store - * to any part of the cache line we have to store the whole - * cacheline else we can end up with corrupt L2 cache line - * contents. Since the loop works on 64-bytes of 64-byte - * aligned store data at a time, this is easy to ensure. - */ -2: - andcc %o1, (16 - 1), %o4 - andn %o2, (64 - 1), %g1 ! block copy loop iterator - sub %o2, %g1, %o2 ! final sub-block copy bytes - be,pt %XCC, 50f - cmp %o4, 8 - be,a,pt %XCC, 10f - sub %o1, 0x8, %o1 - - /* Neither 8-byte nor 16-byte aligned, shift and mask. */ - mov %g1, %o4 - and %o1, 0x7, %g1 - sll %g1, 3, %g1 - mov 64, %o3 - andn %o1, 0x7, %o1 - LOAD(ldx, %o1, %g2) - sub %o3, %g1, %o3 - sllx %g2, %g1, %g2 - -#define SWIVEL_ONE_DWORD(SRC, TMP1, TMP2, PRE_VAL, PRE_SHIFT, POST_SHIFT, DST)\ - LOAD(ldx, SRC, TMP1); \ - srlx TMP1, PRE_SHIFT, TMP2; \ - or TMP2, PRE_VAL, TMP2; \ - STORE_INIT(TMP2, DST); \ - sllx TMP1, POST_SHIFT, PRE_VAL; - -1: add %o1, 0x8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x00) - add %o1, 0x8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x08) - add %o1, 0x8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x10) - add %o1, 0x8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x18) - add %o1, 32, %o1 - LOAD(prefetch, %o1, #one_read) - sub %o1, 32 - 8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x20) - add %o1, 8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x28) - add %o1, 8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x30) - add %o1, 8, %o1 - SWIVEL_ONE_DWORD(%o1, %g3, %o5, %g2, %o3, %g1, %o0 + 0x38) - subcc %o4, 64, %o4 - bne,pt %XCC, 1b - add %o0, 64, %o0 - -#undef SWIVEL_ONE_DWORD - - srl %g1, 3, %g1 - ba,pt %XCC, 60f - add %o1, %g1, %o1 - -10: /* Destination is 64-byte aligned, source was only 8-byte - * aligned but it has been subtracted by 8 and we perform - * one twin load ahead, then add 8 back into source when - * we finish the loop. - */ - LOAD_TWIN(%o1, %o4, %o5) -1: add %o1, 16, %o1 - LOAD_TWIN(%o1, %g2, %g3) - add %o1, 16 + 32, %o1 - LOAD(prefetch, %o1, #one_read) - sub %o1, 32, %o1 - STORE_INIT(%o5, %o0 + 0x00) ! initializes cache line - STORE_INIT(%g2, %o0 + 0x08) - LOAD_TWIN(%o1, %o4, %o5) - add %o1, 16, %o1 - STORE_INIT(%g3, %o0 + 0x10) - STORE_INIT(%o4, %o0 + 0x18) - LOAD_TWIN(%o1, %g2, %g3) - add %o1, 16, %o1 - STORE_INIT(%o5, %o0 + 0x20) - STORE_INIT(%g2, %o0 + 0x28) - LOAD_TWIN(%o1, %o4, %o5) - STORE_INIT(%g3, %o0 + 0x30) - STORE_INIT(%o4, %o0 + 0x38) - subcc %g1, 64, %g1 - bne,pt %XCC, 1b - add %o0, 64, %o0 - - ba,pt %XCC, 60f - add %o1, 0x8, %o1 - -50: /* Destination is 64-byte aligned, and source is 16-byte - * aligned. - */ -1: LOAD_TWIN(%o1, %o4, %o5) - add %o1, 16, %o1 - LOAD_TWIN(%o1, %g2, %g3) - add %o1, 16 + 32, %o1 - LOAD(prefetch, %o1, #one_read) - sub %o1, 32, %o1 - STORE_INIT(%o4, %o0 + 0x00) ! initializes cache line - STORE_INIT(%o5, %o0 + 0x08) - LOAD_TWIN(%o1, %o4, %o5) - add %o1, 16, %o1 - STORE_INIT(%g2, %o0 + 0x10) - STORE_INIT(%g3, %o0 + 0x18) - LOAD_TWIN(%o1, %g2, %g3) - add %o1, 16, %o1 - STORE_INIT(%o4, %o0 + 0x20) - STORE_INIT(%o5, %o0 + 0x28) - STORE_INIT(%g2, %o0 + 0x30) - STORE_INIT(%g3, %o0 + 0x38) - subcc %g1, 64, %g1 - bne,pt %XCC, 1b - add %o0, 64, %o0 - /* fall through */ - -60: - /* %o2 contains any final bytes still needed to be copied - * over. If anything is left, we copy it one byte at a time. - */ - wr %g0, ASI_PNF, %asi - brz,pt %o2, 85f - sub %o0, %o1, %o3 - ba,a,pt %XCC, 90f - - .align 64 -70: /* 16 < len <= 64 */ - bne,pn %XCC, 75f - sub %o0, %o1, %o3 - -72: - andn %o2, 0xf, %o4 - and %o2, 0xf, %o2 -1: subcc %o4, 0x10, %o4 - LOAD(ldx, %o1, %o5) - add %o1, 0x08, %o1 - LOAD(ldx, %o1, %g1) - sub %o1, 0x08, %o1 - STORE(stx, %o5, %o1 + %o3) - add %o1, 0x8, %o1 - STORE(stx, %g1, %o1 + %o3) - bgu,pt %XCC, 1b - add %o1, 0x8, %o1 -73: andcc %o2, 0x8, %g0 - be,pt %XCC, 1f - nop - sub %o2, 0x8, %o2 - LOAD(ldx, %o1, %o5) - STORE(stx, %o5, %o1 + %o3) - add %o1, 0x8, %o1 -1: andcc %o2, 0x4, %g0 - be,pt %XCC, 1f - nop - sub %o2, 0x4, %o2 - LOAD(lduw, %o1, %o5) - STORE(stw, %o5, %o1 + %o3) - add %o1, 0x4, %o1 -1: cmp %o2, 0 - be,pt %XCC, 85f - nop - ba,pt %XCC, 90f - nop - -75: - andcc %o0, 0x7, %g1 - sub %g1, 0x8, %g1 - be,pn %icc, 2f - sub %g0, %g1, %g1 - sub %o2, %g1, %o2 - -1: subcc %g1, 1, %g1 - LOAD(ldub, %o1, %o5) - STORE(stb, %o5, %o1 + %o3) - bgu,pt %icc, 1b - add %o1, 1, %o1 - -2: add %o1, %o3, %o0 - andcc %o1, 0x7, %g1 - bne,pt %icc, 8f - sll %g1, 3, %g1 - - cmp %o2, 16 - bgeu,pt %icc, 72b - nop - ba,a,pt %XCC, 73b - -8: mov 64, %o3 - andn %o1, 0x7, %o1 - LOAD(ldx, %o1, %g2) - sub %o3, %g1, %o3 - andn %o2, 0x7, %o4 - sllx %g2, %g1, %g2 -1: add %o1, 0x8, %o1 - LOAD(ldx, %o1, %g3) - subcc %o4, 0x8, %o4 - srlx %g3, %o3, %o5 - or %o5, %g2, %o5 - STORE(stx, %o5, %o0) - add %o0, 0x8, %o0 - bgu,pt %icc, 1b - sllx %g3, %g1, %g2 - - srl %g1, 3, %g1 - andcc %o2, 0x7, %o2 - be,pn %icc, 85f - add %o1, %g1, %o1 - ba,pt %XCC, 90f - sub %o0, %o1, %o3 - - .align 64 -80: /* 0 < len <= 16 */ - andcc %o3, 0x3, %g0 - bne,pn %XCC, 90f - sub %o0, %o1, %o3 - -1: - subcc %o2, 4, %o2 - LOAD(lduw, %o1, %g1) - STORE(stw, %g1, %o1 + %o3) - bgu,pt %XCC, 1b - add %o1, 4, %o1 - -85: retl - mov %g5, %o0 - - .align 32 -90: - subcc %o2, 1, %o2 - LOAD(ldub, %o1, %g1) - STORE(stb, %g1, %o1 + %o3) - bgu,pt %XCC, 90b - add %o1, 1, %o1 - retl - mov %g5, %o0 - -END(__memcpy_niagara1) - -#endif diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S deleted file mode 100644 index 798b3c80fe..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S +++ /dev/null @@ -1,498 +0,0 @@ -/* Copy SIZE bytes from SRC to DEST. For SUN4V Niagara-2. - Copyright (C) 2007-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - 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> - -#define ASI_BLK_INIT_QUAD_LDD_P 0xe2 -#define ASI_BLK_P 0xf0 -#define ASI_P 0x80 -#define ASI_PNF 0x82 - -#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 - -#define STORE_ASI ASI_BLK_INIT_QUAD_LDD_P - -#define LOAD(type,addr,dest) type [addr], dest -#define LOAD_BLK(addr,dest) ldda [addr] ASI_BLK_P, dest -#define STORE(type,src,addr) type src, [addr] -#define STORE_BLK(src,addr) stda src, [addr] ASI_BLK_P -#define STORE_INIT(src,addr) stxa src, [addr] STORE_ASI - -#ifndef XCC -#define USE_BPR -#define XCC xcc -#endif - -#define FREG_FROB(x0, x1, x2, x3, x4, x5, x6, x7, x8) \ - faligndata %x0, %x1, %f0; \ - faligndata %x1, %x2, %f2; \ - faligndata %x2, %x3, %f4; \ - faligndata %x3, %x4, %f6; \ - faligndata %x4, %x5, %f8; \ - faligndata %x5, %x6, %f10; \ - faligndata %x6, %x7, %f12; \ - faligndata %x7, %x8, %f14; - -#define FREG_MOVE_1(x0) \ - fsrc2 %x0, %f0; -#define FREG_MOVE_2(x0, x1) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; -#define FREG_MOVE_3(x0, x1, x2) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; -#define FREG_MOVE_4(x0, x1, x2, x3) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; \ - fsrc2 %x3, %f6; -#define FREG_MOVE_5(x0, x1, x2, x3, x4) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; \ - fsrc2 %x3, %f6; \ - fsrc2 %x4, %f8; -#define FREG_MOVE_6(x0, x1, x2, x3, x4, x5) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; \ - fsrc2 %x3, %f6; \ - fsrc2 %x4, %f8; \ - fsrc2 %x5, %f10; -#define FREG_MOVE_7(x0, x1, x2, x3, x4, x5, x6) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; \ - fsrc2 %x3, %f6; \ - fsrc2 %x4, %f8; \ - fsrc2 %x5, %f10; \ - fsrc2 %x6, %f12; -#define FREG_MOVE_8(x0, x1, x2, x3, x4, x5, x6, x7) \ - fsrc2 %x0, %f0; \ - fsrc2 %x1, %f2; \ - fsrc2 %x2, %f4; \ - fsrc2 %x3, %f6; \ - fsrc2 %x4, %f8; \ - fsrc2 %x5, %f10; \ - fsrc2 %x6, %f12; \ - fsrc2 %x7, %f14; -#define FREG_LOAD_1(base, x0) \ - LOAD(ldd, base + 0x00, %x0) -#define FREG_LOAD_2(base, x0, x1) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); -#define FREG_LOAD_3(base, x0, x1, x2) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); \ - LOAD(ldd, base + 0x10, %x2); -#define FREG_LOAD_4(base, x0, x1, x2, x3) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); \ - LOAD(ldd, base + 0x10, %x2); \ - LOAD(ldd, base + 0x18, %x3); -#define FREG_LOAD_5(base, x0, x1, x2, x3, x4) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); \ - LOAD(ldd, base + 0x10, %x2); \ - LOAD(ldd, base + 0x18, %x3); \ - LOAD(ldd, base + 0x20, %x4); -#define FREG_LOAD_6(base, x0, x1, x2, x3, x4, x5) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); \ - LOAD(ldd, base + 0x10, %x2); \ - LOAD(ldd, base + 0x18, %x3); \ - LOAD(ldd, base + 0x20, %x4); \ - LOAD(ldd, base + 0x28, %x5); -#define FREG_LOAD_7(base, x0, x1, x2, x3, x4, x5, x6) \ - LOAD(ldd, base + 0x00, %x0); \ - LOAD(ldd, base + 0x08, %x1); \ - LOAD(ldd, base + 0x10, %x2); \ - LOAD(ldd, base + 0x18, %x3); \ - LOAD(ldd, base + 0x20, %x4); \ - LOAD(ldd, base + 0x28, %x5); \ - LOAD(ldd, base + 0x30, %x6); - -#if IS_IN (libc) - - .register %g2,#scratch - .register %g3,#scratch - .register %g6,#scratch - - .text - -ENTRY(__mempcpy_niagara2) - ba,pt %XCC, 101f - add %o0, %o2, %g5 -END(__mempcpy_niagara2) - - .align 32 -ENTRY(__memcpy_niagara2) -100: /* %o0=dst, %o1=src, %o2=len */ - mov %o0, %g5 -101: -# ifndef USE_BPR - srl %o2, 0, %o2 -# endif - cmp %o2, 0 - be,pn %XCC, 85f -218: or %o0, %o1, %o3 - cmp %o2, 16 - blu,a,pn %XCC, 80f - or %o3, %o2, %o3 - - /* 2 blocks (128 bytes) is the minimum we can do the block - * copy with. We need to ensure that we'll iterate at least - * once in the block copy loop. At worst we'll need to align - * the destination to a 64-byte boundary which can chew up - * to (64 - 1) bytes from the length before we perform the - * block copy loop. - * - * However, the cut-off point, performance wise, is around - * 4 64-byte blocks. - */ - cmp %o2, (4 * 64) - blu,pt %XCC, 75f - andcc %o3, 0x7, %g0 - - /* %o0: dst - * %o1: src - * %o2: len (known to be >= 128) - * - * The block copy loops can use %o4, %g2, %g3 as - * temporaries while copying the data. %o5 must - * be preserved between VISEntryHalf and VISExitHalf - */ - - LOAD(prefetch, %o1 + 0x000, #one_read) - LOAD(prefetch, %o1 + 0x040, #one_read) - LOAD(prefetch, %o1 + 0x080, #one_read) - - /* Align destination on 64-byte boundary. */ - andcc %o0, (64 - 1), %o4 - be,pt %XCC, 2f - sub %o4, 64, %o4 - sub %g0, %o4, %o4 ! bytes to align dst - sub %o2, %o4, %o2 -1: subcc %o4, 1, %o4 - LOAD(ldub, %o1, %g1) - STORE(stb, %g1, %o0) - add %o1, 1, %o1 - bne,pt %XCC, 1b - add %o0, 1, %o0 - -2: - /* Clobbers o5/g1/g2/g3/g7/icc/xcc. We must preserve - * o5 from here until we hit VISExitHalf. - */ - VISEntryHalf - - membar #Sync - alignaddr %o1, %g0, %g0 - - add %o1, (64 - 1), %o4 - andn %o4, (64 - 1), %o4 - andn %o2, (64 - 1), %g1 - sub %o2, %g1, %o2 - - and %o1, (64 - 1), %g2 - add %o1, %g1, %o1 - sub %o0, %o4, %g3 - brz,pt %g2, 190f - cmp %g2, 32 - blu,a 5f - cmp %g2, 16 - cmp %g2, 48 - blu,a 4f - cmp %g2, 40 - cmp %g2, 56 - blu 170f - nop - ba,a,pt %xcc, 180f - -4: /* 32 <= low bits < 48 */ - blu 150f - nop - ba,a,pt %xcc, 160f -5: /* 0 < low bits < 32 */ - blu,a 6f - cmp %g2, 8 - cmp %g2, 24 - blu 130f - nop - ba,a,pt %xcc, 140f -6: /* 0 < low bits < 16 */ - bgeu 120f - nop - /* fall through for 0 < low bits < 8 */ -110: sub %o4, 64, %g2 - LOAD_BLK(%g2, %f0) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f6, f8, f10, f12, f14, f16) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_8(f16, f18, f20, f22, f24, f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -120: sub %o4, 56, %g2 - FREG_LOAD_7(%g2, f0, f2, f4, f6, f8, f10, f12) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f6, f8, f10, f12, f16, f18) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_7(f18, f20, f22, f24, f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -130: sub %o4, 48, %g2 - FREG_LOAD_6(%g2, f0, f2, f4, f6, f8, f10) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f6, f8, f10, f16, f18, f20) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_6(f20, f22, f24, f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -140: sub %o4, 40, %g2 - FREG_LOAD_5(%g2, f0, f2, f4, f6, f8) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f6, f8, f16, f18, f20, f22) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_5(f22, f24, f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -150: sub %o4, 32, %g2 - FREG_LOAD_4(%g2, f0, f2, f4, f6) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f6, f16, f18, f20, f22, f24) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_4(f24, f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -160: sub %o4, 24, %g2 - FREG_LOAD_3(%g2, f0, f2, f4) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f4, f16, f18, f20, f22, f24, f26) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_3(f26, f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -170: sub %o4, 16, %g2 - FREG_LOAD_2(%g2, f0, f2) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f2, f16, f18, f20, f22, f24, f26, f28) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_2(f28, f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -180: sub %o4, 8, %g2 - FREG_LOAD_1(%g2, f0) -1: STORE_INIT(%g0, %o4 + %g3) - LOAD_BLK(%o4, %f16) - FREG_FROB(f0, f16, f18, f20, f22, f24, f26, f28, f30) - STORE_BLK(%f0, %o4 + %g3) - FREG_MOVE_1(f30) - subcc %g1, 64, %g1 - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - ba,pt %xcc, 195f - nop - -190: -1: STORE_INIT(%g0, %o4 + %g3) - subcc %g1, 64, %g1 - LOAD_BLK(%o4, %f0) - STORE_BLK(%f0, %o4 + %g3) - add %o4, 64, %o4 - bne,pt %XCC, 1b - LOAD(prefetch, %o4 + 64, #one_read) - -195: - add %o4, %g3, %o0 - membar #Sync - - VISExitHalf - - /* %o2 contains any final bytes still needed to be copied - * over. If anything is left, we copy it one byte at a time. - */ - brz,pt %o2, 85f - sub %o0, %o1, %o3 - ba,a,pt %XCC, 90f - - .align 64 -75: /* 16 < len <= 64 */ - bne,pn %XCC, 75f - sub %o0, %o1, %o3 - -72: - andn %o2, 0xf, %o4 - and %o2, 0xf, %o2 -1: subcc %o4, 0x10, %o4 - LOAD(ldx, %o1, %o5) - add %o1, 0x08, %o1 - LOAD(ldx, %o1, %g1) - sub %o1, 0x08, %o1 - STORE(stx, %o5, %o1 + %o3) - add %o1, 0x8, %o1 - STORE(stx, %g1, %o1 + %o3) - bgu,pt %XCC, 1b - add %o1, 0x8, %o1 -73: andcc %o2, 0x8, %g0 - be,pt %XCC, 1f - nop - sub %o2, 0x8, %o2 - LOAD(ldx, %o1, %o5) - STORE(stx, %o5, %o1 + %o3) - add %o1, 0x8, %o1 -1: andcc %o2, 0x4, %g0 - be,pt %XCC, 1f - nop - sub %o2, 0x4, %o2 - LOAD(lduw, %o1, %o5) - STORE(stw, %o5, %o1 + %o3) - add %o1, 0x4, %o1 -1: cmp %o2, 0 - be,pt %XCC, 85f - nop - ba,pt %xcc, 90f - nop - -75: - andcc %o0, 0x7, %g1 - sub %g1, 0x8, %g1 - be,pn %icc, 2f - sub %g0, %g1, %g1 - sub %o2, %g1, %o2 - -1: subcc %g1, 1, %g1 - LOAD(ldub, %o1, %o5) - STORE(stb, %o5, %o1 + %o3) - bgu,pt %icc, 1b - add %o1, 1, %o1 - -2: add %o1, %o3, %o0 - andcc %o1, 0x7, %g1 - bne,pt %icc, 8f - sll %g1, 3, %g1 - - cmp %o2, 16 - bgeu,pt %icc, 72b - nop - ba,a,pt %xcc, 73b - -8: mov 64, %o3 - andn %o1, 0x7, %o1 - LOAD(ldx, %o1, %g2) - sub %o3, %g1, %o3 - andn %o2, 0x7, %o4 - sllx %g2, %g1, %g2 -1: add %o1, 0x8, %o1 - LOAD(ldx, %o1, %g3) - subcc %o4, 0x8, %o4 - srlx %g3, %o3, %o5 - or %o5, %g2, %o5 - STORE(stx, %o5, %o0) - add %o0, 0x8, %o0 - bgu,pt %icc, 1b - sllx %g3, %g1, %g2 - - srl %g1, 3, %g1 - andcc %o2, 0x7, %o2 - be,pn %icc, 85f - add %o1, %g1, %o1 - ba,pt %xcc, 90f - sub %o0, %o1, %o3 - - .align 64 -80: /* 0 < len <= 16 */ - andcc %o3, 0x3, %g0 - bne,pn %XCC, 90f - sub %o0, %o1, %o3 - -1: - subcc %o2, 4, %o2 - LOAD(lduw, %o1, %g1) - STORE(stw, %g1, %o1 + %o3) - bgu,pt %XCC, 1b - add %o1, 4, %o1 - -85: retl - mov %g5, %o0 - - .align 32 -90: - subcc %o2, 1, %o2 - LOAD(ldub, %o1, %g1) - STORE(stb, %g1, %o1 + %o3) - bgu,pt %XCC, 90b - add %o1, 1, %o1 - retl - mov %g5, %o0 - -END(__memcpy_niagara2) - -#endif diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara4.S b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara4.S deleted file mode 100644 index 709b398364..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara4.S +++ /dev/null @@ -1,332 +0,0 @@ -/* Copy SIZE bytes from SRC to DEST. For SUN4V Niagara-4. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - 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> - -#define ASI_BLK_INIT_QUAD_LDD_P 0xe2 - -#define FPRS_FEF 0x04 - -/* On T4 it is very expensive to access ASRs like %fprs and - * %asi, avoiding a read or a write can save ~50 cycles. - */ -#define FPU_ENTER \ - rd %fprs, %o5; \ - andcc %o5, FPRS_FEF, %g0; \ - be,a,pn %icc, 999f; \ - wr %g0, FPRS_FEF, %fprs; \ - 999: - -#define VISEntryHalf FPU_ENTER -#define VISExitHalf and %o5, FPRS_FEF, %o5; wr %o5, 0x0, %fprs - -#define GLOBAL_SPARE %g5 - -#define STORE_ASI ASI_BLK_INIT_QUAD_LDD_P -#define EX_LD(x) x -#define EX_ST(x) x -#define EX_RETVAL(x) x -#define LOAD(type,addr,dest) type [addr], dest -#define STORE(type,src,addr) type src, [addr] -#define STORE_INIT(src,addr) stxa src, [addr] STORE_ASI - -#if IS_IN (libc) - - .register %g2,#scratch - .register %g3,#scratch - .register %g6,#scratch - - .text - -ENTRY(__mempcpy_niagara4) - ba,pt %icc, 101f - add %o0, %o2, %o3 -END(__mempcpy_niagara4) - - .align 32 -ENTRY(__memcpy_niagara4) -100: /* %o0=dst, %o1=src, %o2=len */ - mov %o0, %o3 -101: -#ifndef __arch64__ - srl %o2, 0, %o2 -#endif - brz,pn %o2, .Lexit - cmp %o2, 3 - ble,pn %icc, .Ltiny - cmp %o2, 19 - ble,pn %icc, .Lsmall - or %o0, %o1, %g2 - cmp %o2, 128 - bl,pn %icc, .Lmedium - nop - -.Llarge:/* len >= 0x80 */ - /* First get dest 8 byte aligned. */ - sub %g0, %o0, %g1 - and %g1, 0x7, %g1 - brz,pt %g1, 51f - sub %o2, %g1, %o2 - -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2)) - add %o1, 1, %o1 - subcc %g1, 1, %g1 - add %o0, 1, %o0 - bne,pt %icc, 1b - EX_ST(STORE(stb, %g2, %o0 - 0x01)) - -51: LOAD(prefetch, %o1 + 0x040, #n_reads_strong) - LOAD(prefetch, %o1 + 0x080, #n_reads_strong) - LOAD(prefetch, %o1 + 0x0c0, #n_reads_strong) - LOAD(prefetch, %o1 + 0x100, #n_reads_strong) - LOAD(prefetch, %o1 + 0x140, #n_reads_strong) - LOAD(prefetch, %o1 + 0x180, #n_reads_strong) - LOAD(prefetch, %o1 + 0x1c0, #n_reads_strong) - LOAD(prefetch, %o1 + 0x200, #n_reads_strong) - - /* Check if we can use the straight fully aligned - * loop, or we require the alignaddr/faligndata variant. - */ - andcc %o1, 0x7, %o5 - bne,pn %icc, .Llarge_src_unaligned - sub %g0, %o0, %g1 - - /* Legitimize the use of initializing stores by getting dest - * to be 64-byte aligned. - */ - and %g1, 0x3f, %g1 - brz,pt %g1, .Llarge_aligned - sub %o2, %g1, %o2 - -1: EX_LD(LOAD(ldx, %o1 + 0x00, %g2)) - add %o1, 8, %o1 - subcc %g1, 8, %g1 - add %o0, 8, %o0 - bne,pt %icc, 1b - EX_ST(STORE(stx, %g2, %o0 - 0x08)) - -.Llarge_aligned: - /* len >= 0x80 && src 8-byte aligned && dest 8-byte aligned */ - andn %o2, 0x3f, %o4 - sub %o2, %o4, %o2 - -1: EX_LD(LOAD(ldx, %o1 + 0x00, %g1)) - add %o1, 0x40, %o1 - EX_LD(LOAD(ldx, %o1 - 0x38, %g2)) - subcc %o4, 0x40, %o4 - EX_LD(LOAD(ldx, %o1 - 0x30, %g3)) - EX_LD(LOAD(ldx, %o1 - 0x28, GLOBAL_SPARE)) - EX_LD(LOAD(ldx, %o1 - 0x20, %o5)) - EX_ST(STORE_INIT(%g1, %o0)) - add %o0, 0x08, %o0 - EX_ST(STORE_INIT(%g2, %o0)) - add %o0, 0x08, %o0 - EX_LD(LOAD(ldx, %o1 - 0x18, %g2)) - EX_ST(STORE_INIT(%g3, %o0)) - add %o0, 0x08, %o0 - EX_LD(LOAD(ldx, %o1 - 0x10, %g3)) - EX_ST(STORE_INIT(GLOBAL_SPARE, %o0)) - add %o0, 0x08, %o0 - EX_LD(LOAD(ldx, %o1 - 0x08, GLOBAL_SPARE)) - EX_ST(STORE_INIT(%o5, %o0)) - add %o0, 0x08, %o0 - EX_ST(STORE_INIT(%g2, %o0)) - add %o0, 0x08, %o0 - EX_ST(STORE_INIT(%g3, %o0)) - add %o0, 0x08, %o0 - EX_ST(STORE_INIT(GLOBAL_SPARE, %o0)) - add %o0, 0x08, %o0 - bne,pt %icc, 1b - LOAD(prefetch, %o1 + 0x200, #n_reads_strong) - - membar #StoreLoad | #StoreStore - - brz,pn %o2, .Lexit - cmp %o2, 19 - ble,pn %icc, .Lsmall_unaligned - nop - ba,a,pt %icc, .Lmedium_noprefetch - -.Lexit: retl - mov EX_RETVAL(%o3), %o0 - -.Llarge_src_unaligned: - andn %o2, 0x3f, %o4 - sub %o2, %o4, %o2 - VISEntryHalf - alignaddr %o1, %g0, %g1 - add %o1, %o4, %o1 - EX_LD(LOAD(ldd, %g1 + 0x00, %f0)) -1: EX_LD(LOAD(ldd, %g1 + 0x08, %f2)) - subcc %o4, 0x40, %o4 - EX_LD(LOAD(ldd, %g1 + 0x10, %f4)) - EX_LD(LOAD(ldd, %g1 + 0x18, %f6)) - EX_LD(LOAD(ldd, %g1 + 0x20, %f8)) - EX_LD(LOAD(ldd, %g1 + 0x28, %f10)) - EX_LD(LOAD(ldd, %g1 + 0x30, %f12)) - EX_LD(LOAD(ldd, %g1 + 0x38, %f14)) - faligndata %f0, %f2, %f16 - EX_LD(LOAD(ldd, %g1 + 0x40, %f0)) - faligndata %f2, %f4, %f18 - add %g1, 0x40, %g1 - faligndata %f4, %f6, %f20 - faligndata %f6, %f8, %f22 - faligndata %f8, %f10, %f24 - faligndata %f10, %f12, %f26 - faligndata %f12, %f14, %f28 - faligndata %f14, %f0, %f30 - EX_ST(STORE(std, %f16, %o0 + 0x00)) - EX_ST(STORE(std, %f18, %o0 + 0x08)) - EX_ST(STORE(std, %f20, %o0 + 0x10)) - EX_ST(STORE(std, %f22, %o0 + 0x18)) - EX_ST(STORE(std, %f24, %o0 + 0x20)) - EX_ST(STORE(std, %f26, %o0 + 0x28)) - EX_ST(STORE(std, %f28, %o0 + 0x30)) - EX_ST(STORE(std, %f30, %o0 + 0x38)) - add %o0, 0x40, %o0 - bne,pt %icc, 1b - LOAD(prefetch, %g1 + 0x200, #n_reads_strong) - VISExitHalf - - brz,pn %o2, .Lexit - cmp %o2, 19 - ble,pn %icc, .Lsmall_unaligned - nop - ba,a,pt %icc, .Lmedium_unaligned - -.Lmedium: - LOAD(prefetch, %o1 + 0x40, #n_reads_strong) - andcc %g2, 0x7, %g0 - bne,pn %icc, .Lmedium_unaligned - nop -.Lmedium_noprefetch: - andncc %o2, 0x20 - 1, %o5 - be,pn %icc, 2f - sub %o2, %o5, %o2 -1: EX_LD(LOAD(ldx, %o1 + 0x00, %g1)) - EX_LD(LOAD(ldx, %o1 + 0x08, %g2)) - EX_LD(LOAD(ldx, %o1 + 0x10, GLOBAL_SPARE)) - EX_LD(LOAD(ldx, %o1 + 0x18, %o4)) - add %o1, 0x20, %o1 - subcc %o5, 0x20, %o5 - EX_ST(STORE(stx, %g1, %o0 + 0x00)) - EX_ST(STORE(stx, %g2, %o0 + 0x08)) - EX_ST(STORE(stx, GLOBAL_SPARE, %o0 + 0x10)) - EX_ST(STORE(stx, %o4, %o0 + 0x18)) - bne,pt %icc, 1b - add %o0, 0x20, %o0 -2: andcc %o2, 0x18, %o5 - be,pt %icc, 3f - sub %o2, %o5, %o2 -1: EX_LD(LOAD(ldx, %o1 + 0x00, %g1)) - add %o1, 0x08, %o1 - add %o0, 0x08, %o0 - subcc %o5, 0x08, %o5 - bne,pt %icc, 1b - EX_ST(STORE(stx, %g1, %o0 - 0x08)) -3: brz,pt %o2, .Lexit - cmp %o2, 0x04 - bl,pn %icc, .Ltiny - nop - EX_LD(LOAD(lduw, %o1 + 0x00, %g1)) - add %o1, 0x04, %o1 - add %o0, 0x04, %o0 - subcc %o2, 0x04, %o2 - bne,pn %icc, .Ltiny - EX_ST(STORE(stw, %g1, %o0 - 0x04)) - ba,a,pt %icc, .Lexit -.Lmedium_unaligned: - /* First get dest 8 byte aligned. */ - sub %g0, %o0, %g1 - and %g1, 0x7, %g1 - brz,pt %g1, 2f - sub %o2, %g1, %o2 - -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g2)) - add %o1, 1, %o1 - subcc %g1, 1, %g1 - add %o0, 1, %o0 - bne,pt %icc, 1b - EX_ST(STORE(stb, %g2, %o0 - 0x01)) -2: - and %o1, 0x7, %g1 - brz,pn %g1, .Lmedium_noprefetch - sll %g1, 3, %g1 - mov 64, %g2 - sub %g2, %g1, %g2 - andn %o1, 0x7, %o1 - EX_LD(LOAD(ldx, %o1 + 0x00, %o4)) - sllx %o4, %g1, %o4 - andn %o2, 0x08 - 1, %o5 - sub %o2, %o5, %o2 -1: EX_LD(LOAD(ldx, %o1 + 0x08, %g3)) - add %o1, 0x08, %o1 - subcc %o5, 0x08, %o5 - srlx %g3, %g2, GLOBAL_SPARE - or GLOBAL_SPARE, %o4, GLOBAL_SPARE - EX_ST(STORE(stx, GLOBAL_SPARE, %o0 + 0x00)) - add %o0, 0x08, %o0 - bne,pt %icc, 1b - sllx %g3, %g1, %o4 - srl %g1, 3, %g1 - add %o1, %g1, %o1 - brz,pn %o2, .Lexit - nop - ba,pt %icc, .Lsmall_unaligned - -.Ltiny: - EX_LD(LOAD(ldub, %o1 + 0x00, %g1)) - subcc %o2, 1, %o2 - be,pn %icc, .Lexit - EX_ST(STORE(stb, %g1, %o0 + 0x00)) - EX_LD(LOAD(ldub, %o1 + 0x01, %g1)) - subcc %o2, 1, %o2 - be,pn %icc, .Lexit - EX_ST(STORE(stb, %g1, %o0 + 0x01)) - EX_LD(LOAD(ldub, %o1 + 0x02, %g1)) - ba,pt %icc, .Lexit - EX_ST(STORE(stb, %g1, %o0 + 0x02)) - -.Lsmall: - andcc %g2, 0x3, %g0 - bne,pn %icc, .Lsmall_unaligned - andn %o2, 0x4 - 1, %o5 - sub %o2, %o5, %o2 -1: - EX_LD(LOAD(lduw, %o1 + 0x00, %g1)) - add %o1, 0x04, %o1 - subcc %o5, 0x04, %o5 - add %o0, 0x04, %o0 - bne,pt %icc, 1b - EX_ST(STORE(stw, %g1, %o0 - 0x04)) - brz,pt %o2, .Lexit - nop - ba,a,pt %icc, .Ltiny - -.Lsmall_unaligned: -1: EX_LD(LOAD(ldub, %o1 + 0x00, %g1)) - add %o1, 1, %o1 - add %o0, 1, %o0 - subcc %o2, 1, %o2 - bne,pt %icc, 1b - EX_ST(STORE(stb, %g1, %o0 - 0x01)) - ba,a,pt %icc, .Lexit -END(__memcpy_niagara4) - -#endif diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S b/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S deleted file mode 100644 index b8f5c3cb8f..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S +++ /dev/null @@ -1,325 +0,0 @@ -/* Copy SIZE bytes from SRC to DEST. - For UltraSPARC-III. - Copyright (C) 2001-2017 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 <sysdep.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 - -#if IS_IN (libc) - - .register %g2,#scratch - .register %g3,#scratch - .register %g6,#scratch - - .text - -ENTRY(__mempcpy_ultra3) - ba,pt %XCC, 101f - add %o0, %o2, %g5 -END(__mempcpy_ultra3) - - /* 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_ultra3) - -100: /* %o0=dst, %o1=src, %o2=len */ - mov %o0, %g5 -101: - 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_ultra3) - -#endif
\ No newline at end of file diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy.S b/sysdeps/sparc/sparc64/multiarch/memcpy.S deleted file mode 100644 index b6396eeae5..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memcpy.S +++ /dev/null @@ -1,167 +0,0 @@ -/* Multiple versions of memcpy - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -#if IS_IN (libc) - .text -ENTRY(memcpy) - .type memcpy, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_CRYPTO, %o1 - andcc %o0, %o1, %g0 - be 1f - andcc %o0, HWCAP_SPARC_N2, %g0 -# ifdef SHARED - sethi %gdop_hix22(__memcpy_niagara4), %o1 - xor %o1, %gdop_lox10(__memcpy_niagara4), %o1 -# else - set __memcpy_niagara4, %o1 -# endif - ba 10f - nop -1: be 1f - andcc %o0, HWCAP_SPARC_BLKINIT, %g0 -# ifdef SHARED - sethi %gdop_hix22(__memcpy_niagara2), %o1 - xor %o1, %gdop_lox10(__memcpy_niagara2), %o1 -# else - set __memcpy_niagara2, %o1 -# endif - ba 10f - nop -1: be 1f - andcc %o0, HWCAP_SPARC_ULTRA3, %g0 -# ifdef SHARED - sethi %gdop_hix22(__memcpy_niagara1), %o1 - xor %o1, %gdop_lox10(__memcpy_niagara1), %o1 -# else - set __memcpy_niagara1, %o1 -# endif - ba 10f - nop -1: be 9f - nop -# ifdef SHARED - sethi %gdop_hix22(__memcpy_ultra3), %o1 - xor %o1, %gdop_lox10(__memcpy_ultra3), %o1 -# else - set __memcpy_ultra3, %o1 -# endif - ba 10f - nop -9: -# ifdef SHARED - sethi %gdop_hix22(__memcpy_ultra1), %o1 - xor %o1, %gdop_lox10(__memcpy_ultra1), %o1 -# else - set __memcpy_ultra1, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(memcpy) - -ENTRY(__mempcpy) - .type __mempcpy, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_CRYPTO, %o1 - andcc %o0, %o1, %g0 - be 1f - andcc %o0, HWCAP_SPARC_N2, %g0 -# ifdef SHARED - sethi %gdop_hix22(__mempcpy_niagara4), %o1 - xor %o1, %gdop_lox10(__mempcpy_niagara4), %o1 -# else - set __mempcpy_niagara4, %o1 -# endif - ba 10f - nop -1: be 1f - andcc %o0, HWCAP_SPARC_BLKINIT, %g0 -# ifdef SHARED - sethi %gdop_hix22(__mempcpy_niagara2), %o1 - xor %o1, %gdop_lox10(__mempcpy_niagara2), %o1 -# else - set __mempcpy_niagara2, %o1 -# endif - ba 10f - nop -1: be 1f - andcc %o0, HWCAP_SPARC_ULTRA3, %g0 -# ifdef SHARED - sethi %gdop_hix22(__mempcpy_niagara1), %o1 - xor %o1, %gdop_lox10(__mempcpy_niagara1), %o1 -# else - set __mempcpy_niagara1, %o1 -# endif - ba 10f - nop -1: be 9f - nop -# ifdef SHARED - sethi %gdop_hix22(__mempcpy_ultra3), %o1 - xor %o1, %gdop_lox10(__mempcpy_ultra3), %o1 -# else - set __mempcpy_ultra3, %o1 -# endif - ba 10f - nop -9: -# ifdef SHARED - sethi %gdop_hix22(__mempcpy_ultra1), %o1 - xor %o1, %gdop_lox10(__mempcpy_ultra1), %o1 -# else - set __mempcpy_ultra1, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mempcpy) - -libc_hidden_builtin_def (memcpy) - -libc_hidden_def (__mempcpy) -weak_alias (__mempcpy, mempcpy) -libc_hidden_builtin_def (mempcpy) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) -#undef weak_alias -#define weak_alias(x, y) -#undef libc_hidden_def -#define libc_hidden_def(name) - -#define memcpy __memcpy_ultra1 -#define __mempcpy __mempcpy_ultra1 - -#endif - -#include "../memcpy.S" diff --git a/sysdeps/sparc/sparc64/multiarch/memset-niagara1.S b/sysdeps/sparc/sparc64/multiarch/memset-niagara1.S deleted file mode 100644 index 45b2251691..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memset-niagara1.S +++ /dev/null @@ -1,177 +0,0 @@ -/* Set a block of memory to some byte value. For SUN4V Niagara. - Copyright (C) 2006-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - 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> - -#define ASI_BLK_INIT_QUAD_LDD_P 0xe2 -#define ASI_P 0x80 -#define ASI_PNF 0x82 - -#ifndef XCC -#define USE_BPR -#define XCC xcc -#endif - -#if IS_IN (libc) - - .register %g2,#scratch - - .text - .align 32 - -ENTRY(__memset_niagara1) - /* %o0=buf, %o1=pat, %o2=len */ - and %o1, 0xff, %o3 - mov %o2, %o1 - sllx %o3, 8, %g1 - or %g1, %o3, %o2 - sllx %o2, 16, %g1 - or %g1, %o2, %o2 - sllx %o2, 32, %g1 - ba,pt %XCC, 1f - or %g1, %o2, %o2 -END(__memset_niagara1) - -ENTRY(__bzero_niagara1) - clr %o2 -1: -# ifndef USE_BRP - srl %o1, 0, %o1 -# endif - brz,pn %o1, 90f - mov %o0, %o3 - - wr %g0, ASI_P, %asi - - cmp %o1, 15 - blu,pn %XCC, 70f - andcc %o0, 0x7, %g1 - be,pt %XCC, 2f - mov 8, %g2 - sub %g2, %g1, %g1 - sub %o1, %g1, %o1 -1: stba %o2, [%o0 + 0x00] %asi - subcc %g1, 1, %g1 - bne,pt %XCC, 1b - add %o0, 1, %o0 -2: cmp %o1, 128 - blu,pn %XCC, 60f - andcc %o0, (64 - 1), %g1 - be,pt %XCC, 40f - mov 64, %g2 - sub %g2, %g1, %g1 - sub %o1, %g1, %o1 -1: stxa %o2, [%o0 + 0x00] %asi - subcc %g1, 8, %g1 - bne,pt %XCC, 1b - add %o0, 8, %o0 - -40: - wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi - andn %o1, (64 - 1), %g1 - sub %o1, %g1, %o1 - - andn %g1, (256 - 1), %g2 - brz,pt %g2, 50f - and %g1, (256 - 1), %g1 - -45: - stxa %o2, [%o0 + 0x00] %asi - stxa %o2, [%o0 + 0x08] %asi - stxa %o2, [%o0 + 0x10] %asi - stxa %o2, [%o0 + 0x18] %asi - stxa %o2, [%o0 + 0x20] %asi - stxa %o2, [%o0 + 0x28] %asi - stxa %o2, [%o0 + 0x30] %asi - stxa %o2, [%o0 + 0x38] %asi - stxa %o2, [%o0 + 0x40] %asi - stxa %o2, [%o0 + 0x48] %asi - stxa %o2, [%o0 + 0x50] %asi - stxa %o2, [%o0 + 0x58] %asi - stxa %o2, [%o0 + 0x60] %asi - stxa %o2, [%o0 + 0x68] %asi - stxa %o2, [%o0 + 0x70] %asi - stxa %o2, [%o0 + 0x78] %asi - stxa %o2, [%o0 + 0x80] %asi - stxa %o2, [%o0 + 0x88] %asi - stxa %o2, [%o0 + 0x90] %asi - stxa %o2, [%o0 + 0x98] %asi - stxa %o2, [%o0 + 0xa0] %asi - stxa %o2, [%o0 + 0xa8] %asi - stxa %o2, [%o0 + 0xb0] %asi - stxa %o2, [%o0 + 0xb8] %asi - stxa %o2, [%o0 + 0xc0] %asi - stxa %o2, [%o0 + 0xc8] %asi - stxa %o2, [%o0 + 0xd0] %asi - stxa %o2, [%o0 + 0xd8] %asi - stxa %o2, [%o0 + 0xe0] %asi - stxa %o2, [%o0 + 0xe8] %asi - stxa %o2, [%o0 + 0xf0] %asi - stxa %o2, [%o0 + 0xf8] %asi - subcc %g2, 256, %g2 - bne,pt %XCC, 45b - add %o0, 256, %o0 - - brz,pn %g1, 55f - nop - -50: - stxa %o2, [%o0 + 0x00] %asi - stxa %o2, [%o0 + 0x08] %asi - stxa %o2, [%o0 + 0x10] %asi - stxa %o2, [%o0 + 0x18] %asi - stxa %o2, [%o0 + 0x20] %asi - stxa %o2, [%o0 + 0x28] %asi - stxa %o2, [%o0 + 0x30] %asi - stxa %o2, [%o0 + 0x38] %asi - subcc %g1, 64, %g1 - bne,pt %XCC, 50b - add %o0, 64, %o0 - -55: - wr %g0, ASI_P, %asi - brz,pn %o1, 80f -60: - andncc %o1, 0x7, %g1 - be,pn %XCC, 2f - sub %o1, %g1, %o1 -1: stxa %o2, [%o0 + 0x00] %asi - subcc %g1, 8, %g1 - bne,pt %XCC, 1b - add %o0, 8, %o0 -2: brz,pt %o1, 80f - nop - -70: -1: stba %o2, [%o0 + 0x00] %asi - subcc %o1, 1, %o1 - bne,pt %XCC, 1b - add %o0, 1, %o0 - - /* fallthrough */ - -80: - wr %g0, ASI_PNF, %asi - -90: - retl - mov %o3, %o0 -END(__bzero_niagara1) - -#endif diff --git a/sysdeps/sparc/sparc64/multiarch/memset-niagara4.S b/sysdeps/sparc/sparc64/multiarch/memset-niagara4.S deleted file mode 100644 index c04a07a7f9..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memset-niagara4.S +++ /dev/null @@ -1,124 +0,0 @@ -/* Set a block of memory to some byte value. For SUN4V Niagara-4. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - 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> - -#define ASI_BLK_INIT_QUAD_LDD_P 0xe2 - -#if IS_IN (libc) - - .register %g2, #scratch - .register %g3, #scratch - - .text - .align 32 - -ENTRY(__memset_niagara4) - andcc %o1, 0xff, %o4 - be,pt %icc, 1f - mov %o2, %o1 - sllx %o4, 8, %g1 - or %g1, %o4, %o2 - sllx %o2, 16, %g1 - or %g1, %o2, %o2 - sllx %o2, 32, %g1 - ba,pt %icc, 1f - or %g1, %o2, %o4 -END(__memset_niagara4) - - .align 32 -ENTRY(__bzero_niagara4) - clr %o4 -1: cmp %o1, 16 - ble %icc, .Ltiny - mov %o0, %o3 - sub %g0, %o0, %g1 - and %g1, 0x7, %g1 - brz,pt %g1, .Laligned8 - sub %o1, %g1, %o1 -1: stb %o4, [%o0 + 0x00] - subcc %g1, 1, %g1 - bne,pt %icc, 1b - add %o0, 1, %o0 -.Laligned8: - cmp %o1, 64 + (64 - 8) - ble .Lmedium - sub %g0, %o0, %g1 - andcc %g1, (64 - 1), %g1 - brz,pn %g1, .Laligned64 - sub %o1, %g1, %o1 -1: stx %o4, [%o0 + 0x00] - subcc %g1, 8, %g1 - bne,pt %icc, 1b - add %o0, 0x8, %o0 -.Laligned64: - andn %o1, 64 - 1, %g1 - sub %o1, %g1, %o1 - brnz,pn %o4, .Lnon_bzero_loop - mov 0x20, %g2 -1: stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P - subcc %g1, 0x40, %g1 - stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P - bne,pt %icc, 1b - add %o0, 0x40, %o0 -.Lpostloop: - cmp %o1, 8 - bl,pn %icc, .Ltiny - membar #StoreStore|#StoreLoad -.Lmedium: - andn %o1, 0x7, %g1 - sub %o1, %g1, %o1 -1: stx %o4, [%o0 + 0x00] - subcc %g1, 0x8, %g1 - bne,pt %icc, 1b - add %o0, 0x08, %o0 - andcc %o1, 0x4, %g1 - be,pt %icc, .Ltiny - sub %o1, %g1, %o1 - stw %o4, [%o0 + 0x00] - add %o0, 0x4, %o0 -.Ltiny: - cmp %o1, 0 - be,pn %icc, .Lexit -1: subcc %o1, 1, %o1 - stb %o4, [%o0 + 0x00] - bne,pt %icc, 1b - add %o0, 1, %o0 -.Lexit: - retl - mov %o3, %o0 -.Lnon_bzero_loop: - mov 0x08, %g3 - mov 0x28, %o5 -1: stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P - subcc %g1, 0x40, %g1 - stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P - stxa %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P - stxa %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P - add %o0, 0x10, %o0 - stxa %o4, [%o0 + %g0] ASI_BLK_INIT_QUAD_LDD_P - stxa %o4, [%o0 + %g2] ASI_BLK_INIT_QUAD_LDD_P - stxa %o4, [%o0 + %g3] ASI_BLK_INIT_QUAD_LDD_P - stxa %o4, [%o0 + %o5] ASI_BLK_INIT_QUAD_LDD_P - bne,pt %icc, 1b - add %o0, 0x30, %o0 - ba,a,pt %icc, .Lpostloop -END(__bzero_niagara4) - -#endif diff --git a/sysdeps/sparc/sparc64/multiarch/memset.S b/sysdeps/sparc/sparc64/multiarch/memset.S deleted file mode 100644 index 9469d5e7ce..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/memset.S +++ /dev/null @@ -1,124 +0,0 @@ -/* Multiple versions of memset and bzero - All versions must be listed in ifunc-impl-list.c. - Copyright (C) 2010-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -#if IS_IN (libc) - .text -ENTRY(memset) - .type memset, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_CRYPTO, %o1 - andcc %o0, %o1, %g0 - be 1f - andcc %o0, HWCAP_SPARC_BLKINIT, %g0 -# ifdef SHARED - sethi %gdop_hix22(__memset_niagara4), %o1 - xor %o1, %gdop_lox10(__memset_niagara4), %o1 -# else - set __memset_niagara4, %o1 -# endif - ba 10f - nop -1: be 9f - nop -# ifdef SHARED - sethi %gdop_hix22(__memset_niagara1), %o1 - xor %o1, %gdop_lox10(__memset_niagara1), %o1 -# else - set __memset_niagara1, %o1 -# endif - ba 10f - nop -9: -# ifdef SHARED - sethi %gdop_hix22(__memset_ultra1), %o1 - xor %o1, %gdop_lox10(__memset_ultra1), %o1 -# else - set __memset_ultra1, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(memset) - -ENTRY(__bzero) - .type bzero, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_CRYPTO, %o1 - andcc %o0, %o1, %g0 - be 1f - andcc %o0, HWCAP_SPARC_BLKINIT, %g0 -# ifdef SHARED - sethi %gdop_hix22(__bzero_niagara4), %o1 - xor %o1, %gdop_lox10(__bzero_niagara4), %o1 -# else - set __bzero_niagara4, %o1 -# endif - ba 10f - nop -1: be 9f - nop -# ifdef SHARED - sethi %gdop_hix22(__bzero_niagara1), %o1 - xor %o1, %gdop_lox10(__bzero_niagara1), %o1 -# else - set __bzero_niagara1, %o1 -# endif - ba 10f - nop -9: -# ifdef SHARED - sethi %gdop_hix22(__bzero_ultra1), %o1 - xor %o1, %gdop_lox10(__bzero_ultra1), %o1 -# else - set __bzero_ultra1, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__bzero) - -weak_alias (__bzero, bzero) - -# undef weak_alias -# define weak_alias(a, b) - -libc_hidden_builtin_def (memset) - -#undef libc_hidden_builtin_def -#define libc_hidden_builtin_def(name) - -#define memset __memset_ultra1 -#define __bzero __bzero_ultra1 - -#endif - -#include "../memset.S" diff --git a/sysdeps/sparc/sparc64/multiarch/mul_1-vis3.S b/sysdeps/sparc/sparc64/multiarch/mul_1-vis3.S deleted file mode 100644 index 7c4fa49ce4..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/mul_1-vis3.S +++ /dev/null @@ -1,73 +0,0 @@ -! SPARC v9 64-bit VIS3 __mpn_mul_1 -- Multiply a limb vector with a single -! limb and store the product in a second limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller <davem@davemloft.net> -! -! 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> - -#define res_ptr %o0 -#define s1_ptr %o1 -#define sz %o2 -#define s2_limb %o3 -#define carry %o5 -#define tmp1 %g1 -#define tmp2 %g2 -#define tmp3 %g3 -#define tmp4 %o4 - - .register %g2,#scratch - .register %g3,#scratch -ENTRY(__mpn_mul_1_vis3) - subcc sz, 1, sz - be .Lfinal_limb - clr carry - -.Lloop: - ldx [s1_ptr + 0x00], tmp1 - ldx [s1_ptr + 0x08], tmp4 - mulx tmp1, s2_limb, tmp3 - add s1_ptr, 0x10, s1_ptr - umulxhi tmp1, s2_limb, tmp2 - sub sz, 2, sz - mulx tmp4, s2_limb, tmp1 - add res_ptr, 0x10, res_ptr - umulxhi tmp4, s2_limb, tmp4 - addcc carry, tmp3, tmp3 - stx tmp3, [res_ptr - 0x10] - addxc %g0, tmp2, carry - addcc carry, tmp1, tmp1 - addxc %g0, tmp4, carry - brgz sz, .Lloop - stx tmp1, [res_ptr - 0x08] - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - ldx [s1_ptr + 0x00], tmp1 - mulx tmp1, s2_limb, tmp3 - umulxhi tmp1, s2_limb, tmp2 - addcc carry, tmp3, tmp3 - addxc %g0, tmp2, carry - stx tmp3, [res_ptr + 0x00] - -.Lfinish: - retl - mov carry, %o0 -END(__mpn_mul_1_vis3) diff --git a/sysdeps/sparc/sparc64/multiarch/mul_1.S b/sysdeps/sparc/sparc64/multiarch/mul_1.S deleted file mode 100644 index 75fca932b7..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/mul_1.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of mul_1 - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY(__mpn_mul_1) - .type __mpn_mul_1, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_VIS3, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__mpn_mul_1_vis3), %o1 - xor %o1, %gdop_lox10(__mpn_mul_1_vis3), %o1 -# else - set __mpn_mul_1_vis3, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__mpn_mul_1_generic), %o1 - xor %o1, %gdop_lox10(__mpn_mul_1_generic), %o1 -# else - set __mpn_mul_1_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mpn_mul_1) - -#define __mpn_mul_1 __mpn_mul_1_generic -#include "../mul_1.S" diff --git a/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c b/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c deleted file mode 100644 index 2452575343..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c +++ /dev/null @@ -1 +0,0 @@ -#include "../rtld-memcpy.c" diff --git a/sysdeps/sparc/sparc64/multiarch/rtld-memset.c b/sysdeps/sparc/sparc64/multiarch/rtld-memset.c deleted file mode 100644 index c01eb0beb9..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/rtld-memset.c +++ /dev/null @@ -1 +0,0 @@ -#include "../rtld-memset.c" diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-block.c b/sysdeps/sparc/sparc64/multiarch/sha256-block.c deleted file mode 100644 index 9d65315a5a..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sha256-block.c +++ /dev/null @@ -1,32 +0,0 @@ -#include <sparc-ifunc.h> - -#define __sha256_process_block __sha256_process_block_generic -extern void __sha256_process_block_generic (const void *buffer, size_t len, - struct sha256_ctx *ctx); - -#include <crypt/sha256-block.c> - -#undef __sha256_process_block - -extern void __sha256_process_block_crop (const void *buffer, size_t len, - struct sha256_ctx *ctx); - -static bool cpu_supports_sha256(int hwcap) -{ - unsigned long cfr; - - if (!(hwcap & HWCAP_SPARC_CRYPTO)) - return false; - - __asm__ ("rd %%asr26, %0" : "=r" (cfr)); - if (cfr & (1 << 6)) - return true; - - return false; -} - -extern void __sha256_process_block (const void *buffer, size_t len, - struct sha256_ctx *ctx); -sparc_libc_ifunc (__sha256_process_block, - cpu_supports_sha256(hwcap) ? __sha256_process_block_crop - : __sha256_process_block_generic); diff --git a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S b/sysdeps/sparc/sparc64/multiarch/sha256-crop.S deleted file mode 100644 index 8f07e4245a..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sha256-crop.S +++ /dev/null @@ -1,101 +0,0 @@ -/* SHA256 using sparc crypto opcodes. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - 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> - -#define SHA256 \ - .word 0x81b02840; - - .text - .align 32 -ENTRY(__sha256_process_block_crop) - /* %o0=buffer, %o1=len, %o2=CTX */ - ldx [%o2 + 0x20], %g1 - add %g1, %o1, %g1 - stx %g1, [%o2 + 0x20] - - ld [%o2 + 0x00], %f0 - ld [%o2 + 0x04], %f1 - ld [%o2 + 0x08], %f2 - ld [%o2 + 0x0c], %f3 - ld [%o2 + 0x10], %f4 - ld [%o2 + 0x14], %f5 - andcc %o1, 0x7, %g0 - ld [%o2 + 0x18], %f6 - bne,pn %xcc, 10f - ld [%o2 + 0x1c], %f7 - -1: - ldd [%o0 + 0x00], %f8 - ldd [%o0 + 0x08], %f10 - ldd [%o0 + 0x10], %f12 - ldd [%o0 + 0x18], %f14 - ldd [%o0 + 0x20], %f16 - ldd [%o0 + 0x28], %f18 - ldd [%o0 + 0x30], %f20 - ldd [%o0 + 0x38], %f22 - - SHA256 - - subcc %o1, 0x40, %o1 - bne,pt %xcc, 1b - add %o0, 0x40, %o0 - -5: - st %f0, [%o2 + 0x00] - st %f1, [%o2 + 0x04] - st %f2, [%o2 + 0x08] - st %f3, [%o2 + 0x0c] - st %f4, [%o2 + 0x10] - st %f5, [%o2 + 0x14] - st %f6, [%o2 + 0x18] - retl - st %f7, [%o2 + 0x1c] -10: - alignaddr %o0, %g0, %o0 - - ldd [%o0 + 0x00], %f10 -1: - ldd [%o0 + 0x08], %f12 - ldd [%o0 + 0x10], %f14 - ldd [%o0 + 0x18], %f16 - ldd [%o0 + 0x20], %f18 - ldd [%o0 + 0x28], %f20 - ldd [%o0 + 0x30], %f22 - ldd [%o0 + 0x38], %f24 - ldd [%o0 + 0x40], %f26 - - faligndata %f10, %f12, %f8 - faligndata %f12, %f14, %f10 - faligndata %f14, %f16, %f12 - faligndata %f16, %f18, %f14 - faligndata %f18, %f20, %f16 - faligndata %f20, %f22, %f18 - faligndata %f22, %f24, %f20 - faligndata %f24, %f26, %f22 - - SHA256 - - subcc %o1, 0x40, %o1 - fsrc2 %f26, %f10 - bne,pt %xcc, 1b - add %o0, 0x40, %o0 - - ba,a,pt %xcc, 5b -END(__sha256_process_block_crop) diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-block.c b/sysdeps/sparc/sparc64/multiarch/sha512-block.c deleted file mode 100644 index 2863e05d09..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sha512-block.c +++ /dev/null @@ -1,32 +0,0 @@ -#include <sparc-ifunc.h> - -#define __sha512_process_block __sha512_process_block_generic -extern void __sha512_process_block_generic (const void *buffer, size_t len, - struct sha512_ctx *ctx); - -#include <crypt/sha512-block.c> - -#undef __sha512_process_block - -extern void __sha512_process_block_crop (const void *buffer, size_t len, - struct sha512_ctx *ctx); - -static bool cpu_supports_sha512(int hwcap) -{ - unsigned long cfr; - - if (!(hwcap & HWCAP_SPARC_CRYPTO)) - return false; - - __asm__ ("rd %%asr26, %0" : "=r" (cfr)); - if (cfr & (1 << 6)) - return true; - - return false; -} - -extern void __sha512_process_block (const void *buffer, size_t len, - struct sha512_ctx *ctx); -sparc_libc_ifunc (__sha512_process_block, - cpu_supports_sha512(hwcap) ? __sha512_process_block_crop - : __sha512_process_block_generic); diff --git a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S b/sysdeps/sparc/sparc64/multiarch/sha512-crop.S deleted file mode 100644 index f78354c485..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sha512-crop.S +++ /dev/null @@ -1,131 +0,0 @@ -/* SHA512 using sparc crypto opcodes. - Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller (davem@davemloft.net) - - 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> - -#define SHA512 \ - .word 0x81b02860; - - .text - .align 32 -ENTRY(__sha512_process_block_crop) - /* %o0=buffer, %o1=len, %o2=CTX */ - ldx [%o2 + 0x48], %g1 - add %g1, %o1, %o4 - stx %o4, [%o2 + 0x48] - cmp %o4, %g1 - bgeu,pt %xcc, 1f - nop - ldx [%o2 + 0x40], %g1 - add %g1, 1, %g1 - stx %g1, [%o2 + 0x40] - -1: ldd [%o2 + 0x00], %f0 - ldd [%o2 + 0x08], %f2 - ldd [%o2 + 0x10], %f4 - ldd [%o2 + 0x18], %f6 - ldd [%o2 + 0x20], %f8 - ldd [%o2 + 0x28], %f10 - andcc %o1, 0x7, %g0 - ldd [%o2 + 0x30], %f12 - bne,pn %xcc, 10f - ldd [%o2 + 0x38], %f14 - -1: - ldd [%o0 + 0x00], %f16 - ldd [%o0 + 0x08], %f18 - ldd [%o0 + 0x10], %f20 - ldd [%o0 + 0x18], %f22 - ldd [%o0 + 0x20], %f24 - ldd [%o0 + 0x28], %f26 - ldd [%o0 + 0x30], %f28 - ldd [%o0 + 0x38], %f30 - ldd [%o0 + 0x40], %f32 - ldd [%o0 + 0x48], %f34 - ldd [%o0 + 0x50], %f36 - ldd [%o0 + 0x58], %f38 - ldd [%o0 + 0x60], %f40 - ldd [%o0 + 0x68], %f42 - ldd [%o0 + 0x70], %f44 - ldd [%o0 + 0x78], %f46 - - SHA512 - - subcc %o1, 0x80, %o1 - bne,pt %xcc, 1b - add %o0, 0x80, %o0 - -5: - std %f0, [%o2 + 0x00] - std %f2, [%o2 + 0x08] - std %f4, [%o2 + 0x10] - std %f6, [%o2 + 0x18] - std %f8, [%o2 + 0x20] - std %f10, [%o2 + 0x28] - std %f12, [%o2 + 0x30] - retl - std %f14, [%o2 + 0x38] -10: - alignaddr %o0, %g0, %o0 - - ldd [%o0 + 0x00], %f18 -1: - ldd [%o0 + 0x08], %f20 - ldd [%o0 + 0x10], %f22 - ldd [%o0 + 0x18], %f24 - ldd [%o0 + 0x20], %f26 - ldd [%o0 + 0x28], %f28 - ldd [%o0 + 0x30], %f30 - ldd [%o0 + 0x38], %f32 - ldd [%o0 + 0x40], %f34 - ldd [%o0 + 0x48], %f36 - ldd [%o0 + 0x50], %f38 - ldd [%o0 + 0x58], %f40 - ldd [%o0 + 0x60], %f42 - ldd [%o0 + 0x68], %f44 - ldd [%o0 + 0x70], %f46 - ldd [%o0 + 0x78], %f48 - ldd [%o0 + 0x80], %f50 - - faligndata %f18, %f20, %f16 - faligndata %f20, %f22, %f18 - faligndata %f22, %f24, %f20 - faligndata %f24, %f26, %f22 - faligndata %f26, %f28, %f24 - faligndata %f28, %f30, %f26 - faligndata %f30, %f32, %f28 - faligndata %f32, %f34, %f30 - faligndata %f34, %f36, %f32 - faligndata %f36, %f38, %f34 - faligndata %f38, %f40, %f36 - faligndata %f40, %f42, %f38 - faligndata %f42, %f44, %f40 - faligndata %f44, %f46, %f42 - faligndata %f46, %f48, %f44 - faligndata %f48, %f50, %f46 - - SHA512 - - subcc %o1, 0x80, %o1 - fsrc2 %f50, %f18 - bne,pt %xcc, 1b - add %o0, 0x80, %o0 - - ba,a,pt %xcc, 5b -END(__sha512_process_block_crop) diff --git a/sysdeps/sparc/sparc64/multiarch/sub_n-vis3.S b/sysdeps/sparc/sparc64/multiarch/sub_n-vis3.S deleted file mode 100644 index 2d2a75dff8..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sub_n-vis3.S +++ /dev/null @@ -1,71 +0,0 @@ -! SPARC v9 64-bit VIS3 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 -! and store difference in a third limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller <davem@davemloft.net> -! -! 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> - -#define res_ptr %o0 -#define s1_ptr %o1 -#define s2_ptr %o2 -#define sz %o3 -#define tmp1 %g1 -#define tmp2 %g2 -#define tmp3 %g3 -#define tmp4 %o4 - - .register %g2,#scratch - .register %g3,#scratch -ENTRY(__mpn_sub_n_vis3) - subcc sz, 1, sz - be .Lfinal_limb - cmp %g0, 1 - -.Lloop: - ldx [s2_ptr + 0x00], tmp1 - add s2_ptr, 0x10, s2_ptr - ldx [s1_ptr + 0x00], tmp2 - add s1_ptr, 0x10, s1_ptr - ldx [s2_ptr - 0x08], tmp3 - add res_ptr, 0x10, res_ptr - ldx [s1_ptr - 0x08], tmp4 - sub sz, 2, sz - xnor tmp1, %g0, tmp1 - addxccc tmp1, tmp2, tmp1 - stx tmp1, [res_ptr - 0x10] - xnor tmp3, %g0, tmp3 - addxccc tmp3, tmp4, tmp3 - brgz sz, .Lloop - stx tmp3, [res_ptr - 0x08] - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - ldx [s2_ptr + 0x00], tmp1 - ldx [s1_ptr + 0x00], tmp2 - xnor tmp1, %g0, tmp1 - addxccc tmp1, tmp2, tmp1 - stx tmp1, [res_ptr + 0x00] - -.Lfinish: - clr %o0 - retl - movcc %xcc, 1, %o0 -END(__mpn_sub_n_vis3) diff --git a/sysdeps/sparc/sparc64/multiarch/sub_n.S b/sysdeps/sparc/sparc64/multiarch/sub_n.S deleted file mode 100644 index d20a286df1..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/sub_n.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of sub_n - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY(__mpn_sub_n) - .type __mpn_sub_n, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_VIS3, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__mpn_sub_n_vis3), %o1 - xor %o1, %gdop_lox10(__mpn_sub_n_vis3), %o1 -# else - set __mpn_sub_n_vis3, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__mpn_sub_n_generic), %o1 - xor %o1, %gdop_lox10(__mpn_sub_n_generic), %o1 -# else - set __mpn_sub_n_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mpn_sub_n) - -#define __mpn_sub_n __mpn_sub_n_generic -#include "../sub_n.S" diff --git a/sysdeps/sparc/sparc64/multiarch/submul_1-vis3.S b/sysdeps/sparc/sparc64/multiarch/submul_1-vis3.S deleted file mode 100644 index 99644491e7..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/submul_1-vis3.S +++ /dev/null @@ -1,87 +0,0 @@ -! SPARC v9 64-bit VIS3 __mpn_submul_1 -- Multiply a limb vector with a -! limb and subtract the result from a second limb vector. -! -! Copyright (C) 2013-2017 Free Software Foundation, Inc. -! This file is part of the GNU C Library. -! Contributed by David S. Miller <davem@davemloft.net> -! -! 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> - -#define res_ptr %i0 -#define s1_ptr %i1 -#define sz %i2 -#define s2_limb %i3 -#define carry %o5 -#define tmp1 %g1 -#define tmp2 %g2 -#define tmp3 %g3 -#define tmp4 %o4 -#define tmp5 %l0 -#define tmp6 %l1 -#define tmp7 %l2 -#define tmp8 %l3 - - .register %g2,#scratch - .register %g3,#scratch -ENTRY(__mpn_submul_1_vis3) - save %sp, -176, %sp - subcc sz, 1, sz - be .Lfinal_limb - clr carry - -.Lloop: - ldx [s1_ptr + 0x00], tmp1 - ldx [res_ptr + 0x00], tmp3 - ldx [s1_ptr + 0x08], tmp2 - ldx [res_ptr + 0x08], tmp4 - mulx tmp1, s2_limb, tmp5 - add s1_ptr, 0x10, s1_ptr - umulxhi tmp1, s2_limb, tmp6 - add res_ptr, 0x10, res_ptr - mulx tmp2, s2_limb, tmp7 - sub sz, 2, sz - umulxhi tmp2, s2_limb, tmp8 - addcc carry, tmp5, tmp5 - addxc %g0, tmp6, carry - subcc tmp3, tmp5, tmp5 - addxc %g0, carry, carry - stx tmp5, [res_ptr - 0x10] - addcc carry, tmp7, tmp7 - addxc %g0, tmp8, carry - subcc tmp4, tmp7, tmp7 - addxc %g0, carry, carry - brgz sz, .Lloop - stx tmp7, [res_ptr - 0x08] - - brlz,pt sz, .Lfinish - nop - -.Lfinal_limb: - ldx [s1_ptr + 0x00], tmp1 - ldx [res_ptr + 0x00], tmp3 - mulx tmp1, s2_limb, tmp5 - umulxhi tmp1, s2_limb, tmp6 - addcc carry, tmp5, tmp5 - addxc %g0, tmp6, carry - subcc tmp3, tmp5, tmp5 - addxc %g0, carry, carry - stx tmp5, [res_ptr + 0x00] - -.Lfinish: - jmpl %i7 + 8, %g0 - restore carry, 0, %o0 -END(__mpn_submul_1_vis3) diff --git a/sysdeps/sparc/sparc64/multiarch/submul_1.S b/sysdeps/sparc/sparc64/multiarch/submul_1.S deleted file mode 100644 index 3c297d989b..0000000000 --- a/sysdeps/sparc/sparc64/multiarch/submul_1.S +++ /dev/null @@ -1,56 +0,0 @@ -/* Multiple versions of submul_1 - - Copyright (C) 2013-2017 Free Software Foundation, Inc. - Contributed by David S. Miller (davem@davemloft.net) - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -ENTRY(__mpn_submul_1) - .type __mpn_submul_1, @gnu_indirect_function -# ifdef SHARED - SETUP_PIC_REG_LEAF(o3, o5) -# endif - set HWCAP_SPARC_VIS3, %o1 - andcc %o0, %o1, %g0 - be 1f - nop -# ifdef SHARED - sethi %gdop_hix22(__mpn_submul_1_vis3), %o1 - xor %o1, %gdop_lox10(__mpn_submul_1_vis3), %o1 -# else - set __mpn_submul_1_vis3, %o1 -# endif - ba 10f - nop -1: -# ifdef SHARED - sethi %gdop_hix22(__mpn_submul_1_generic), %o1 - xor %o1, %gdop_lox10(__mpn_submul_1_generic), %o1 -# else - set __mpn_submul_1_generic, %o1 -# endif -10: -# ifdef SHARED - add %o3, %o1, %o1 -# endif - retl - mov %o1, %o0 -END(__mpn_submul_1) - -#define __mpn_submul_1 __mpn_submul_1_generic -#include "../submul_1.S" diff --git a/sysdeps/sparc/sparc64/pthread_spin_init.c b/sysdeps/sparc/sparc64/pthread_spin_init.c deleted file mode 100644 index 58319ab62d..0000000000 --- a/sysdeps/sparc/sparc64/pthread_spin_init.c +++ /dev/null @@ -1 +0,0 @@ -/* pthread_spin_init is in pthread_spin_unlock.S */ diff --git a/sysdeps/sparc/sparc64/pthread_spin_lock.S b/sysdeps/sparc/sparc64/pthread_spin_lock.S deleted file mode 100644 index 0f41ccf4d5..0000000000 --- a/sysdeps/sparc/sparc64/pthread_spin_lock.S +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - - .text -ENTRY(pthread_spin_lock) -1: ldstub [%o0], %g1 - brnz,pn %g1, 2f - membar #StoreLoad | #StoreStore - retl - mov 0, %o0 -2: ldub [%o0], %g1 - brnz,pt %g1, 2b - membar #LoadLoad - ba,a,pt %xcc, 1b -END(pthread_spin_lock) diff --git a/sysdeps/sparc/sparc64/pthread_spin_trylock.S b/sysdeps/sparc/sparc64/pthread_spin_trylock.S deleted file mode 100644 index fa05cf8fdb..0000000000 --- a/sysdeps/sparc/sparc64/pthread_spin_trylock.S +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> -#include <pthread-errnos.h> - - .text -ENTRY(pthread_spin_trylock) - ldstub [%o0], %o0 - membar #StoreLoad | #StoreStore - retl - movrnz %o0, EBUSY, %o0 -END(pthread_spin_trylock) diff --git a/sysdeps/sparc/sparc64/pthread_spin_unlock.S b/sysdeps/sparc/sparc64/pthread_spin_unlock.S deleted file mode 100644 index c82f05d538..0000000000 --- a/sysdeps/sparc/sparc64/pthread_spin_unlock.S +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2012-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - - .text -ENTRY(pthread_spin_unlock) - membar #StoreStore | #LoadStore - stb %g0, [%o0] - retl - clr %o0 -END(pthread_spin_unlock) - -strong_alias (pthread_spin_unlock, pthread_spin_init) diff --git a/sysdeps/sparc/sparc64/pthreaddef.h b/sysdeps/sparc/sparc64/pthreaddef.h deleted file mode 100644 index df81791a65..0000000000 --- a/sysdeps/sparc/sparc64/pthreaddef.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2003-2017 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"); diff --git a/sysdeps/sparc/sparc64/rawmemchr.S b/sysdeps/sparc/sparc64/rawmemchr.S deleted file mode 100644 index d3e7b5d4b4..0000000000 --- a/sysdeps/sparc/sparc64/rawmemchr.S +++ /dev/null @@ -1,178 +0,0 @@ -/* rawmemchr (str, ch) -- Return pointer to first occurrence of CH in STR. - For SPARC v9. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by 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 <sysdep.h> -#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(__rawmemchr) - and %o1, 0xff, %o1 /* IEU0 Group */ - sethi %hi(0x01010101), %g1 /* IEU1 */ - ldub [%o0], %o3 /* Load */ - sll %o1, 8, %o4 /* IEU0 Group */ - - or %g1, %lo(0x01010101), %g1 /* IEU1 */ - sllx %g1, 32, %g2 /* IEU0 Group */ - or %o4, %o1, %o4 /* IEU1 */ - andcc %o0, 7, %g0 /* IEU1 Group */ - - sll %o4, 16, %g5 /* IEU0 */ - or %o4, %g5, %o4 /* IEU0 Group */ - or %g1, %g2, %g1 /* IEU1 */ - bne,pn %icc, 32f /* CTI */ - - sllx %o4, 32, %g5 /* IEU0 Group */ - cmp %o3, %o1 /* IEU1 */ - be,pn %icc, 30f /* CTI */ - sllx %g1, 7, %g2 /* IEU0 Group */ - -18: ldx [%o0], %o3 /* Load */ - or %o4, %g5, %o4 /* IEU1 */ - add %o0, 8, %o0 /* IEU0 Group */ -19: xor %o3, %o4, %o3 /* IEU0 Group */ - - sub %o3, %g1, %o2 /* IEU0 Group */ -#ifdef EIGHTBIT_NOT_RARE - andn %o2, %o3, %o5 /* IEU0 Group */ - ldxa [%o0] ASI_PNF, %o3 /* Load */ - andcc %o5, %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 */ - xor %o3, %o4, %o3 /* IEU0 */ - andcc %g3, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 22f /* CTI */ - sub %o3, %g1, %o2 /* IEU0 */ - 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 */ - sllx %g1, 7, %g2 /* IEU0 */ - add %o0, 1, %o0 /* IEU0 Group */ - - cmp %o3, %o1 /* IEU1 */ - bne,a,pt %icc, 32b /* CTI */ - lduba [%o0] ASI_PNF, %o3 /* Load */ - retl /* CTI+IEU1 Group */ - - add %o0, -1, %o0 /* IEU0 */ -END(__rawmemchr) - -libc_hidden_def (__rawmemchr) -weak_alias (__rawmemchr, rawmemchr) diff --git a/sysdeps/sparc/sparc64/rshift.S b/sysdeps/sparc/sparc64/rshift.S deleted file mode 100644 index f9319f2ec7..0000000000 --- a/sysdeps/sparc/sparc64/rshift.S +++ /dev/null @@ -1,92 +0,0 @@ -/* SPARC v9 __mpn_rshift -- - - Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* INPUT PARAMETERS - res_ptr %o0 - src_ptr %o1 - size %o2 - cnt %o3 */ - - .register %g2, #scratch - .register %g3, #scratch - -ENTRY(__mpn_rshift) - ldx [%o1],%g2 ! load first limb - sub %g0,%o3,%o5 ! negate shift count - add %o2,-1,%o2 - andcc %o2,4-1,%g4 ! number of limbs in first loop - sllx %g2,%o5,%g1 ! compute function result - be,pn %xcc,.L0 ! if multiple of 4 limbs, skip first loop - mov %g1,%g5 - - sub %o2,%g4,%o2 ! adjust count for main loop - -.Loop0: ldx [%o1+8],%g3 - add %o0,8,%o0 - add %o1,8,%o1 - srlx %g2,%o3,%o4 - addcc %g4,-1,%g4 - sllx %g3,%o5,%g1 - mov %g3,%g2 - or %o4,%g1,%o4 - bne,pt %xcc,.Loop0 - stx %o4,[%o0-8] - -.L0: brz,pn %o2,.Lend - nop - -.Loop: ldx [%o1+8],%g3 - add %o0,32,%o0 - srlx %g2,%o3,%o4 - addcc %o2,-4,%o2 - sllx %g3,%o5,%g1 - - ldx [%o1+16],%g2 - srlx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0-32] - sllx %g2,%o5,%g1 - - ldx [%o1+24],%g3 - srlx %g2,%o3,%o4 - or %g4,%g1,%g4 - stx %g4,[%o0-24] - sllx %g3,%o5,%g1 - - ldx [%o1+32],%g2 - srlx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0-16] - sllx %g2,%o5,%g1 - - add %o1,32,%o1 - or %g4,%g1,%g4 - bne,pt %xcc,.Loop - stx %g4,[%o0-8] - -.Lend: srlx %g2,%o3,%g2 - stx %g2,[%o0-0] - - jmpl %o7+8,%g0 - mov %g5,%o0 - -END(__mpn_rshift) diff --git a/sysdeps/sparc/sparc64/rtld-memcpy.c b/sysdeps/sparc/sparc64/rtld-memcpy.c deleted file mode 100644 index 52f8302f08..0000000000 --- a/sysdeps/sparc/sparc64/rtld-memcpy.c +++ /dev/null @@ -1,3 +0,0 @@ -#define NO_MEMPCPY_STPCPY_REDIRECT -#include <string/memcpy.c> -#include <string/mempcpy.c> diff --git a/sysdeps/sparc/sparc64/rtld-memset.c b/sysdeps/sparc/sparc64/rtld-memset.c deleted file mode 100644 index 55f3835790..0000000000 --- a/sysdeps/sparc/sparc64/rtld-memset.c +++ /dev/null @@ -1 +0,0 @@ -#include <string/memset.c> diff --git a/sysdeps/sparc/sparc64/soft-fp/Makefile b/sysdeps/sparc/sparc64/soft-fp/Makefile deleted file mode 100644 index b145df283b..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# Software floating-point emulation. -# Makefile for SPARC v9 ABI mandated long double utility -# functions (_Qp_*). -# Copyright (C) 1999-2017 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# Contributed by 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/>. - -ifeq ($(subdir),soft-fp) -sparc64-quad-routines := qp_add qp_cmp qp_cmpe qp_div qp_dtoq qp_feq qp_fge \ - qp_fgt qp_fle qp_flt qp_fne qp_itoq qp_mul qp_neg qp_qtod qp_qtoi \ - qp_qtos qp_qtoui qp_qtoux qp_qtox qp_sqrt qp_stoq qp_sub qp_uitoq \ - qp_uxtoq qp_xtoq qp_util -sysdep_routines += $(sparc64-quad-routines) -endif - -ifeq ($(subdir),math) -CPPFLAGS += -I../soft-fp/ -endif diff --git a/sysdeps/sparc/sparc64/soft-fp/Versions b/sysdeps/sparc/sparc64/soft-fp/Versions deleted file mode 100644 index 9e89c3c3ef..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/Versions +++ /dev/null @@ -1,8 +0,0 @@ -libc { - GLIBC_2.2 { - _Qp_add; _Qp_cmp; _Qp_cmpe; _Qp_div; _Qp_dtoq; _Qp_feq; _Qp_fge; _Qp_fgt; - _Qp_fle; _Qp_flt; _Qp_fne; _Qp_itoq; _Qp_mul; _Qp_neg; _Qp_qtod; _Qp_qtoi; - _Qp_qtos; _Qp_qtoui; _Qp_qtoux; _Qp_qtox; _Qp_sqrt; _Qp_stoq; _Qp_sub; - _Qp_uitoq; _Qp_uxtoq; _Qp_xtoq; - } -} diff --git a/sysdeps/sparc/sparc64/soft-fp/e_ilogbl.c b/sysdeps/sparc/sparc64/soft-fp/e_ilogbl.c deleted file mode 100644 index 5b19d12a4e..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/e_ilogbl.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Software floating-point emulation. - ilogbl(x, exp) - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by 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/>. */ - -/* ilogbl(long double x) - * return the binary exponent of non-zero x - * ilogbl(0) = 0x80000001 - * ilogbl(inf/NaN) = 0x7fffffff (no signal is raised) - */ - -#include "soft-fp.h" -#include "quad.h" -#include <math.h> - -int __ieee754_ilogbl (long double x) -{ - FP_DECL_EX; - FP_DECL_Q(X); - -/* - FP_UNPACK_Q(X, x); - switch (X_c) - { - case FP_CLS_ZERO: - return FP_ILOGB0; - case FP_CLS_NAN: - case FP_CLS_INF: - return FP_ILOGBNAN; - default: - return X_e; - } - */ - FP_UNPACK_RAW_Q(X, x); - switch (X_e) - { - default: - return X_e - _FP_EXPBIAS_Q; - case 0: -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - if (_FP_FRAC_ZEROP_4(X)) - return FP_ILOGB0; - else - { - _FP_I_TYPE shift; - _FP_FRAC_CLZ_4(shift, X); - shift -= _FP_FRACXBITS_Q; - return X_e - _FP_EXPBIAS_Q - 1 + shift; - } -#else - if (_FP_FRAC_ZEROP_2(X)) - return FP_ILOGB0; - else - { - _FP_I_TYPE shift; - _FP_FRAC_CLZ_2(shift, X); - shift -= _FP_FRACXBITS_Q; - return X_e - _FP_EXPBIAS_Q - 1 + shift; - } -#endif - case _FP_EXPBIAS_Q: - return FP_ILOGBNAN; - } -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_add.c b/sysdeps/sparc/sparc64/soft-fp/qp_add.c deleted file mode 100644 index a67deab315..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_add.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Software floating-point emulation. - (*c) = (*a) + (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -void _Qp_add(long double *c, const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_QP(A, a); - FP_UNPACK_SEMIRAW_QP(B, b); - FP_ADD_Q(C, A, B); - FP_PACK_SEMIRAW_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" ldd [%2], %%f56\n" -" ldd [%2+8], %%f58\n" -" faddq %%f52, %%f56, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_cmp.c b/sysdeps/sparc/sparc64/soft-fp/qp_cmp.c deleted file mode 100644 index 5316157ec7..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_cmp.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Compare (*a) and (*b), return float condition code. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -int _Qp_cmp(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, 3, 1); - if (r == -1) r = 2; - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3)); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c b/sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c deleted file mode 100644 index e0a834c721..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Software floating-point emulation. - Compare (*a) and (*b), return float condition code. - Signal exception (unless masked) if unordered. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -int _Qp_cmpe(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, 3, 2); - if (r == -1) r = 2; - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpeq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3)); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_div.c b/sysdeps/sparc/sparc64/soft-fp/qp_div.c deleted file mode 100644 index 27d08f94dc..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_div.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Software floating-point emulation. - (*c) = (*a) / (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -void _Qp_div(long double *c, const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_QP(A, a); - FP_UNPACK_QP(B, b); - FP_DIV_Q(C, A, B); - FP_PACK_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" ldd [%2], %%f56\n" -" ldd [%2+8], %%f58\n" -" fdivq %%f52, %%f56, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c deleted file mode 100644 index 5a5c43b13c..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "double.h" -#include "quad.h" - -void _Qp_dtoq(long double *c, const double a) -{ - FP_DECL_EX; - FP_DECL_D(A); - FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_D(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_EXTEND(Q,D,4,2,C,A); -#else - FP_EXTEND(Q,D,2,1,C,A); -#endif - FP_PACK_RAW_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" fdtoq %1, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "e" (a) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_feq.c b/sysdeps/sparc/sparc64/soft-fp/qp_feq.c deleted file mode 100644 index c7c6263782..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_feq.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) == (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -int _Qp_feq(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_EQ_Q(r, A, B, 1); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3)); - - return !r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_fge.c b/sysdeps/sparc/sparc64/soft-fp/qp_fge.c deleted file mode 100644 index 19cacbb342..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_fge.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) >= (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -int _Qp_fge(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, 3, 2); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpeq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 1)); - - return (r <= 0); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_fgt.c b/sysdeps/sparc/sparc64/soft-fp/qp_fgt.c deleted file mode 100644 index 70645d1cba..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_fgt.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) > (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -int _Qp_fgt(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, 3, 2); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpeq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3) - 3); - - return (r == -1); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_fle.c b/sysdeps/sparc/sparc64/soft-fp/qp_fle.c deleted file mode 100644 index 6293fcbcda..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_fle.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) <= (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -int _Qp_fle(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, -2, 2); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpeq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 2) ? -1 : 0); - - return (r >= 0); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_flt.c b/sysdeps/sparc/sparc64/soft-fp/qp_flt.c deleted file mode 100644 index 7aa054697a..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_flt.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) < (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -int _Qp_flt(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_Q(r, B, A, 3, 2); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpeq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3)); - - return (r == 1); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_fne.c b/sysdeps/sparc/sparc64/soft-fp/qp_fne.c deleted file mode 100644 index dd358eda0a..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_fne.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Software floating-point emulation. - Return 1 if (*a) != (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -int _Qp_fne(const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); - int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_UNPACK_RAW_QP(B, b); - FP_CMP_EQ_Q(r, A, B, 1); - - QP_HANDLE_EXCEPTIONS( - __asm ( -" ldd [%0], %%f52\n" -" ldd [%0+8], %%f54\n" -" ldd [%1], %%f56\n" -" ldd [%1+8], %%f58\n" -" fcmpq %%fcc3, %%f52, %%f56\n" -" " : : "r" (a), "r" (b) : QP_CLOBBER_CC); - _FPU_GETCW(_fcw); - r = ((_fcw >> 36) & 3) != 0); - - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_itoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_itoq.c deleted file mode 100644 index 230fde365f..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_itoq.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -void _Qp_itoq(long double *c, const int a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - int b = a; - - FP_FROM_INT_Q(C, b, 32, unsigned int); - FP_PACK_RAW_QP(c, C); - QP_NO_EXCEPTIONS; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_mul.c b/sysdeps/sparc/sparc64/soft-fp/qp_mul.c deleted file mode 100644 index 49a290af93..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_mul.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Software floating-point emulation. - (*c) = (*a) * (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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/>. */ - -/* As QP_HANDLE_EXCEPTIONS reloads FPU control word anyway, - avoid doing it twice. */ -#define _FP_MUL_MEAT_RESET_FE do {} while (0) -#include "soft-fp.h" -#include "quad.h" - -void _Qp_mul(long double *c, const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_QP(A, a); - FP_UNPACK_QP(B, b); - FP_MUL_Q(C, A, B); - FP_PACK_QP(c, C); - QP_HANDLE_EXCEPTIONS( - _FPU_SETCW(_fcw); - __asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" ldd [%2], %%f56\n" -" ldd [%2+8], %%f58\n" -" fmulq %%f52, %%f56, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_neg.S b/sysdeps/sparc/sparc64/soft-fp/qp_neg.S deleted file mode 100644 index d2fd7f286f..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_neg.S +++ /dev/null @@ -1,30 +0,0 @@ -/* Quad floating-point emulation. - (*c) = !(*a) - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by 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 <sysdep.h> - -ENTRY(_Qp_neg) - ldd [%o1], %f60 - ldd [%o1 + 8], %f62 - fnegd %f60, %f60 - std %f60, [%o0] - jmpl %o7 + 8, %g0 - std %f62, [%o0 + 8] -END(_Qp_neg) diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtod.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtod.c deleted file mode 100644 index 7c3889da97..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtod.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Software floating-point emulation. - Return (double)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "double.h" -#include "quad.h" - -double _Qp_qtod(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - FP_DECL_D(R); - double r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_QP(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_TRUNC(D,Q,2,4,R,A); -#else - FP_TRUNC(D,Q,1,2,R,A); -#endif - FP_PACK_SEMIRAW_D(r, R); - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtod %%f52, %0\n" -" " : "=&e" (r) : "r" (a) : QP_CLOBBER)); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c deleted file mode 100644 index 99cd760acd..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Software floating-point emulation. - Return (int)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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/>. */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -int _Qp_qtoi(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_TO_INT_Q(r, A, 32, 1); - QP_HANDLE_EXCEPTIONS( - int rx; - __asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtoi %%f52, %%f31\n" -" st %%f31, [%0]\n" -" " : : "r" (&rx), "r" (a) : QP_CLOBBER, "f31"); - r = rx); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtos.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtos.c deleted file mode 100644 index dacd6c0620..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtos.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Software floating-point emulation. - Return (float)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "single.h" -#include "quad.h" - -float _Qp_qtos(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - FP_DECL_S(R); - float r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_QP(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_TRUNC(S,Q,1,4,R,A); -#else - FP_TRUNC(S,Q,1,2,R,A); -#endif - FP_PACK_SEMIRAW_S(r, R); - - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtos %%f52, %0\n" -" " : "=&f" (r) : "r" (a) : QP_CLOBBER)); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c deleted file mode 100644 index 2d8fb52530..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Software floating-point emulation. - Return (unsigned int)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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/>. */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -unsigned int _Qp_qtoui(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned int r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_TO_INT_Q(r, A, 32, -1); - QP_HANDLE_EXCEPTIONS( - int rx; - __asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtoi %%f52, %%f31\n" -" st %%f31, [%0]\n" -" " : : "r" (&rx), "r" (a) : QP_CLOBBER, "f31"); - r = rx); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c deleted file mode 100644 index 2d74a6ee15..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Software floating-point emulation. - Return (unsigned long)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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/>. */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -unsigned long _Qp_qtoux(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned long r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_TO_INT_Q(r, A, 64, -1); - QP_HANDLE_EXCEPTIONS( - unsigned long rx; - __asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtox %%f52, %%f60\n" -" std %%f60, [%0]\n" -" " : : "r" (&rx), "r" (a) : QP_CLOBBER); - r = rx); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_qtox.c b/sysdeps/sparc/sparc64/soft-fp/qp_qtox.c deleted file mode 100644 index abfc666cde..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_qtox.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Software floating-point emulation. - Return (long)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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/>. */ - -#define FP_ROUNDMODE FP_RND_ZERO -#include "soft-fp.h" -#include "quad.h" - -long _Qp_qtox(const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); - unsigned long r; - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_QP(A, a); - FP_TO_INT_Q(r, A, 64, 1); - QP_HANDLE_EXCEPTIONS( - long rx; - __asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fqtox %%f52, %%f60\n" -" std %%f60, [%0]\n" -" " : : "r" (&rx), "r" (a) : QP_CLOBBER); - r = rx); - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c b/sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c deleted file mode 100644 index 3d78b1fdbb..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Software floating-point emulation. - (*c) = sqrtl(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -void _Qp_sqrt(long double *c, const long double *a) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_QP(A, a); - FP_SQRT_Q(C, A); - FP_PACK_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" fsqrtq %%f52, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "r" (a) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_stoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_stoq.c deleted file mode 100644 index 9202a7269b..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_stoq.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "single.h" -#include "quad.h" - -void _Qp_stoq(long double *c, const float a) -{ - FP_DECL_EX; - FP_DECL_S(A); - FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_RAW_S(A, a); -#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q - FP_EXTEND(Q,S,4,1,C,A); -#else - FP_EXTEND(Q,S,2,1,C,A); -#endif - FP_PACK_RAW_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" fstoq %1, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "f" (a) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_sub.c b/sysdeps/sparc/sparc64/soft-fp/qp_sub.c deleted file mode 100644 index 71b9890743..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_sub.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Software floating-point emulation. - (*c) = (*a) - (*b) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -void _Qp_sub(long double *c, const long double *a, const long double *b) -{ - FP_DECL_EX; - FP_DECL_Q(A); FP_DECL_Q(B); FP_DECL_Q(C); - - FP_INIT_ROUNDMODE; - FP_UNPACK_SEMIRAW_QP(A, a); - FP_UNPACK_SEMIRAW_QP(B, b); - FP_SUB_Q(C, A, B); - FP_PACK_SEMIRAW_QP(c, C); - QP_HANDLE_EXCEPTIONS(__asm ( -" ldd [%1], %%f52\n" -" ldd [%1+8], %%f54\n" -" ldd [%2], %%f56\n" -" ldd [%2+8], %%f58\n" -" fsubq %%f52, %%f56, %%f60\n" -" std %%f60, [%0]\n" -" std %%f62, [%0+8]\n" -" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER)); -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c deleted file mode 100644 index cc8603ad41..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_uitoq.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -void _Qp_uitoq(long double *c, const unsigned int a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - unsigned int b = a; - - FP_FROM_INT_Q(C, b, 32, unsigned int); - FP_PACK_RAW_QP(c, C); - QP_NO_EXCEPTIONS; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_util.c b/sysdeps/sparc/sparc64/soft-fp/qp_util.c deleted file mode 100644 index 7e1f2511e2..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_util.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Software floating-point emulation. - Helper routine for _Qp_* routines. - Simulate exceptions using double arithmetics. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by 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 <float.h> -#include <math.h> -#include <assert.h> -#include "soft-fp.h" - -void __Qp_handle_exceptions(int exceptions) -{ - if (exceptions & FP_EX_INVALID) - { - float f = 0.0; - __asm__ __volatile__ ("fdivs %0, %0, %0" : "+f" (f)); - } - if (exceptions & FP_EX_DIVZERO) - { - float f = 1.0, g = 0.0; - __asm__ __volatile__ ("fdivs %0, %1, %0" - : "+f" (f) - : "f" (g)); - } - if (exceptions & FP_EX_OVERFLOW) - { - float f = FLT_MAX; - __asm__ __volatile__("fmuls %0, %0, %0" : "+f" (f)); - exceptions &= ~FP_EX_INEXACT; - } - if (exceptions & FP_EX_UNDERFLOW) - { - float f = FLT_MIN; - __asm__ __volatile__("fmuls %0, %0, %0" : "+f" (f)); - exceptions &= ~FP_EX_INEXACT; - } - if (exceptions & FP_EX_INEXACT) - { - double d = 1.0, e = M_PI; - __asm__ __volatile__ ("fdivd %0, %1, %0" - : "+f" (d) - : "f" (e)); - } -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c deleted file mode 100644 index 766ca78872..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_uxtoq.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -void _Qp_uxtoq(long double *c, const unsigned long a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - unsigned long b = a; - - FP_FROM_INT_Q(C, b, 64, unsigned long); - FP_PACK_RAW_QP(c, C); - QP_NO_EXCEPTIONS; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c b/sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c deleted file mode 100644 index 42c0bf1044..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/qp_xtoq.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Software floating-point emulation. - (*c) = (long double)(*a) - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com) 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 "soft-fp.h" -#include "quad.h" - -void _Qp_xtoq(long double *c, const long a) -{ - FP_DECL_EX; - FP_DECL_Q(C); - long b = a; - - FP_FROM_INT_Q(C, b, 64, unsigned long); - FP_PACK_RAW_QP(c, C); - QP_NO_EXCEPTIONS; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/s_frexpl.c b/sysdeps/sparc/sparc64/soft-fp/s_frexpl.c deleted file mode 100644 index 6f0baeb3fb..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/s_frexpl.c +++ /dev/null @@ -1,51 +0,0 @@ -/* Software floating-point emulation. - frexpl(x, exp) - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by 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/>. */ - -/* - * for non-zero x - * x = frexpl(arg,&exp); - * return a long double fp quantity x such that 0.5 <= |x| <1.0 - * and the corresponding binary exponent "exp". That is - * arg = x*2^exp. - * If arg is inf, 0.0, or NaN, then frexpl(arg,&exp) returns arg - * with *exp=0. - */ - -#include "soft-fp.h" -#include "quad.h" - -long double __frexpl(long double arg, int *exp) -{ - FP_DECL_EX; - FP_DECL_Q(A); - long double r; - - *exp = 0; - FP_UNPACK_Q(A, arg); - if (A_c != FP_CLS_NORMAL) - return arg; - *exp = A_e + 1; - A_e = -1; - FP_PACK_Q(r, A); - - return r; -} - -weak_alias (__frexpl, frexpl) diff --git a/sysdeps/sparc/sparc64/soft-fp/s_scalblnl.c b/sysdeps/sparc/sparc64/soft-fp/s_scalblnl.c deleted file mode 100644 index 250a8f4f0f..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/s_scalblnl.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Software floating-point emulation. - scalblnl(x, exp) - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by 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/>. */ - -/* - * scalblnl (long double x, long int n) - * scalblnl(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include "soft-fp.h" -#include "quad.h" - -long double __scalblnl(long double arg, int exp) -{ - FP_DECL_EX; - FP_DECL_Q(A); - long double r; - - FP_UNPACK_Q(A, arg); - switch (A_c) - { - case FP_CLS_ZERO: - return arg; - case FP_CLS_NAN: - case FP_CLS_INF: - FP_HANDLE_EXCEPTIONS; - return arg; - } - A_e += exp; - FP_PACK_Q(r, A); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/s_scalbnl.c b/sysdeps/sparc/sparc64/soft-fp/s_scalbnl.c deleted file mode 100644 index c686175e97..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/s_scalbnl.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Software floating-point emulation. - scalbnl(x, exp) - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by 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/>. */ - -/* - * scalbnl (long double x, int n) - * scalbnl(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an - * exponentiation or a multiplication. - */ - -#include "soft-fp.h" -#include "quad.h" - -long double __scalbnl(long double arg, int exp) -{ - FP_DECL_EX; - FP_DECL_Q(A); - long double r; - - FP_UNPACK_Q(A, arg); - switch (A_c) - { - case FP_CLS_ZERO: - return arg; - case FP_CLS_NAN: - case FP_CLS_INF: - FP_HANDLE_EXCEPTIONS; - return arg; - } - A_e += exp; - FP_PACK_Q(r, A); - FP_HANDLE_EXCEPTIONS; - - return r; -} diff --git a/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h b/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h deleted file mode 100644 index c03a6d3764..0000000000 --- a/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h +++ /dev/null @@ -1,147 +0,0 @@ -/* Machine-dependent software floating-point definitions. - Sparc64 userland (_Q_* and _Qp_*) version. - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson (rth@cygnus.com), - Jakub Jelinek (jj@ultra.linux.cz) and - 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 <fpu_control.h> -#include <fenv.h> -#include <stdlib.h> - -#define _FP_W_TYPE_SIZE 64 -#define _FP_W_TYPE unsigned long -#define _FP_WS_TYPE signed long -#define _FP_I_TYPE long - -/* Helper macros for _FP_MUL_MEAT_2_120_240_double. */ -#define _FP_MUL_MEAT_SET_FE_TZ \ -do { \ - static fpu_control_t _fetz = _FPU_RC_DOWN; \ - _FPU_SETCW(_fetz); \ -} while (0) -#ifndef _FP_MUL_MEAT_RESET_FE -#define _FP_MUL_MEAT_RESET_FE _FPU_SETCW(_fcw) -#endif - -#define _FP_MUL_MEAT_S(R,X,Y) \ - _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y) -#define _FP_MUL_MEAT_D(R,X,Y) \ - _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) -#define _FP_MUL_MEAT_Q(R,X,Y) \ - _FP_MUL_MEAT_2_120_240_double(_FP_WFRACBITS_Q,R,X,Y, \ - _FP_MUL_MEAT_SET_FE_TZ, \ - _FP_MUL_MEAT_RESET_FE) - -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) -#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) - -#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) -#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1) -#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1 -#define _FP_NANSIGN_S 0 -#define _FP_NANSIGN_D 0 -#define _FP_NANSIGN_Q 0 - -#define _FP_KEEPNANFRACP 1 -#define _FP_QNANNEGATEDP 0 - -/* If one NaN is signaling and the other is not, - * we choose that one, otherwise we choose Y. - */ -#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ - do { \ - if ((_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs) \ - && !(_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs)) \ - { \ - R##_s = X##_s; \ - _FP_FRAC_COPY_##wc(R,X); \ - } \ - else \ - { \ - R##_s = Y##_s; \ - _FP_FRAC_COPY_##wc(R,Y); \ - } \ - R##_c = FP_CLS_NAN; \ - } while (0) - -/* Obtain the current rounding mode. */ -#ifndef FP_ROUNDMODE -#define FP_ROUNDMODE ((_fcw >> 30) & 0x3) -#endif - -/* Exception flags. */ -#define FP_EX_INVALID (1 << 4) -#define FP_EX_OVERFLOW (1 << 3) -#define FP_EX_UNDERFLOW (1 << 2) -#define FP_EX_DIVZERO (1 << 1) -#define FP_EX_INEXACT (1 << 0) - -#define _FP_TININESS_AFTER_ROUNDING 0 - -#define _FP_DECL_EX \ - fpu_control_t _fcw __attribute__ ((unused)) = (FP_RND_NEAREST << 30) - -#define FP_INIT_ROUNDMODE \ -do { \ - _FPU_GETCW(_fcw); \ -} while (0) - -#define FP_TRAPPING_EXCEPTIONS ((_fcw >> 23) & 0x1f) -#define FP_INHIBIT_RESULTS ((_fcw >> 23) & _fex) - -/* Simulate exceptions using double arithmetics. */ -extern void __Qp_handle_exceptions(int exc); - -#define FP_HANDLE_EXCEPTIONS \ -do { \ - if (!_fex) \ - { \ - /* This is the common case, so we do it inline. \ - * We need to clear cexc bits if any. \ - */ \ - __asm__ __volatile__("fzero %%f62\n\t" \ - "faddd %%f62, %%f62, %%f62" \ - : : : "f62"); \ - } \ - else \ - { \ - __Qp_handle_exceptions (_fex); \ - } \ -} while (0) - -#define QP_HANDLE_EXCEPTIONS(_a) \ -do { \ - if ((_fcw >> 23) & _fex) \ - { \ - _a; \ - } \ - else \ - { \ - _fcw = (_fcw & ~0x1fL) | (_fex << 5) | _fex; \ - _FPU_SETCW(_fcw); \ - } \ -} while (0) - -#define QP_NO_EXCEPTIONS \ - __asm ("fzero %%f62\n\t" \ - "faddd %%f62, %%f62, %%f62" : : : "f62") - -#define QP_CLOBBER "memory", "f52", "f54", "f56", "f58", "f60", "f62" -#define QP_CLOBBER_CC QP_CLOBBER , "cc" diff --git a/sysdeps/sparc/sparc64/stackguard-macros.h b/sysdeps/sparc/sparc64/stackguard-macros.h deleted file mode 100644 index cc0c12c041..0000000000 --- a/sysdeps/sparc/sparc64/stackguard-macros.h +++ /dev/null @@ -1,7 +0,0 @@ -#include <stdint.h> - -#define STACK_CHK_GUARD \ - ({ uintptr_t x; asm ("ldx [%%g7+0x28], %0" : "=r" (x)); x; }) - -#define POINTER_CHK_GUARD \ - ({ uintptr_t x; asm ("ldx [%%g7+0x30], %0" : "=r" (x)); x; }) diff --git a/sysdeps/sparc/sparc64/start.S b/sysdeps/sparc/sparc64/start.S deleted file mode 100644 index fcd4721463..0000000000 --- a/sysdeps/sparc/sparc64/start.S +++ /dev/null @@ -1,100 +0,0 @@ -/* Startup code for elf64-sparc - Copyright (C) 1997-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - - - .section ".text" - .align 4 - .global _start - .type _start,#function -_start: -#ifdef SHARED - SETUP_PIC_REG(l7) -#endif - - /* Terminate the stack frame, and reserve space for functions to - drop their arguments. */ - mov %g0, %fp - sub %sp, 6*8, %sp - - /* Extract the arguments and environment as encoded on the stack. The - argument info starts after one register window (16 words) past the SP, - plus the bias we added, plus the magic v9 STACK_BIAS. */ - ldx [%sp+STACK_BIAS+22*8], %o1 - add %sp, STACK_BIAS+23*8, %o2 - - /* Load the addresses of the user entry points. */ -#ifndef SHARED - sethi %hi(main), %o0 - sethi %hi(__libc_csu_init), %o3 - sethi %hi(__libc_csu_fini), %o4 - or %o0, %lo(main), %o0 - or %o3, %lo(__libc_csu_init), %o3 - or %o4, %lo(__libc_csu_fini), %o4 -#else - sethi %gdop_hix22(main), %o0 - sethi %gdop_hix22(__libc_csu_init), %o3 - sethi %gdop_hix22(__libc_csu_fini), %o4 - xor %o0, %gdop_lox10(main), %o0 - xor %o3, %gdop_lox10(__libc_csu_init), %o3 - xor %o4, %gdop_lox10(__libc_csu_fini), %o4 - ldx [%l7 + %o0], %o0, %gdop(main) - ldx [%l7 + %o3], %o3, %gdop(__libc_csu_init) - ldx [%l7 + %o4], %o4, %gdop(__libc_csu_fini) -#endif - - /* When starting a binary via the dynamic linker, %g1 contains the - address of the shared library termination function, which will be - registered with atexit(). If we are statically linked, this will - be NULL. */ - mov %g1, %o5 - - /* Let libc do the rest of the initialization, and call main. */ - call __libc_start_main - nop - - /* Die very horribly if exit returns. */ - illtrap 0 - - .size _start, .-_start - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 -weak_alias (__data_start, data_start) diff --git a/sysdeps/sparc/sparc64/stpcpy.S b/sysdeps/sparc/sparc64/stpcpy.S deleted file mode 100644 index b1593563a9..0000000000 --- a/sysdeps/sparc/sparc64/stpcpy.S +++ /dev/null @@ -1,274 +0,0 @@ -/* Copy SRC to DEST returning the address of the terminating '\0' in DEST. - For SPARC v9. - Copyright (C) 1998-2017 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 <sysdep.h> -#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) - -weak_alias (__stpcpy, stpcpy) -libc_hidden_def (__stpcpy) -libc_hidden_builtin_def (stpcpy) diff --git a/sysdeps/sparc/sparc64/stpncpy.S b/sysdeps/sparc/sparc64/stpncpy.S deleted file mode 100644 index 537d29257f..0000000000 --- a/sysdeps/sparc/sparc64/stpncpy.S +++ /dev/null @@ -1,424 +0,0 @@ -/* stpncpy(DST, SRC, COUNT) - Copy no more than N characters of - SRC to DEST, returning the address of the terminating '\0' in - DEST, if any, or else DEST + N. - For SPARC v9. - Copyright (C) 1998-2017 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 <sysdep.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(__stpncpy) - sethi %hi(0x01010101), %g1 /* IEU0 Group */ -#ifdef USE_BPR - brz,pn %o2, 19f /* CTI+IEU1 */ -#else - tst %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ -#endif - or %g1, %lo(0x01010101), %g1 /* IEU1 */ - andcc %o0, 7, %g0 /* IEU1 Group */ - - sllx %g1, 32, %g2 /* IEU0 */ - bne,pn %icc, 26f /* CTI */ - or %g1, %g2, %g1 /* IEU0 Group */ - andcc %o1, 7, %g3 /* IEU1 */ - - bne,pn %icc, 28f /* CTI */ - sllx %g1, 7, %g2 /* IEU0 Group */ - ldx [%o1], %o3 /* Load */ -1: add %o1, 8, %o1 /* IEU1 */ - -2: subcc %o2, 8, %o2 /* IEU1 Group */ - bl,pn %XCC, 18f /* CTI */ - sub %o3, %g1, %o4 /* IEU0 */ - add %o0, 8, %o0 /* IEU0 Group */ - -#ifdef EIGHTBIT_NOT_MORE - andn %o4, %o3, %o4 /* IEU1 */ -#endif - mov %o3, %g3 /* IEU1 */ - ldxa [%o1] ASI_PNF, %o3 /* Load */ - add %o1, 8, %o1 /* IEU0 Group */ - andcc %o4, %g2, %g0 /* IEU1 */ - - be,a,pt %xcc, 2b /* CTI */ - stx %g3, [%o0-8] /* Store Group */ - srlx %g3, 56, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 16f /* CTI */ - srlx %g3, 48, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 15f /* CTI */ - - srlx %g3, 40, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 14f /* CTI */ - srlx %g3, 32, %g4 /* IEU0 */ - - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 13f /* CTI */ - srlx %g3, 24, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 12f /* CTI */ - srlx %g3, 16, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 11f /* CTI */ - - srlx %g3, 8, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 10f /* CTI */ - sub %o0, 1, %g6 /* IEU0 */ - - andcc %g3, 0xff, %g0 /* IEU1 Group */ - bne,pt %icc, 2b /* CTI */ -3: stx %g3, [%o0-8] /* Store */ - andncc %o2, 31, %g3 /* IEU1 Group */ - -4: be,pn %XCC, 41f /* CTI */ - and %o2, 31, %o2 /* IEU1 Group */ -40: stx %g0, [%o0] /* Store */ - stx %g0, [%o0 + 8] /* Store Group */ - - subcc %g3, 32, %g3 /* IEU1 */ - stx %g0, [%o0 + 16] /* Store Group */ - stx %g0, [%o0 + 24] /* Store Group */ - bne,pt %XCC, 40b /* CTI */ - - add %o0, 32, %o0 /* IEU0 */ -41: subcc %o2, 8, %o2 /* IEU1 Group */ - bl,a,pn %XCC, 6f /* CTI */ - andcc %o2, 4, %g0 /* IEU1 Group */ - -5: stx %g0, [%o0] /* Store */ - subcc %o2, 8, %o2 /* IEU1 Group */ - bge,pt %XCC, 5b /* CTI */ - add %o0, 8, %o0 /* IEU0 */ - - andcc %o2, 4, %g0 /* IEU1 Group */ -6: be,a,pn %icc, 7f /* CTI */ - andcc %o2, 2, %g0 /* IEU1 Group */ - stw %g0, [%o0] /* Store */ - - add %o0, 4, %o0 /* IEU0 */ - andcc %o2, 2, %g0 /* IEU1 Group */ -7: be,a,pn %icc, 8f /* CTI */ - andcc %o2, 1, %g0 /* IEU1 Group */ - - sth %g0, [%o0] /* Store */ - add %o0, 2, %o0 /* IEU0 */ - andcc %o2, 1, %g0 /* IEU1 Group */ -8: bne,a,pn %icc, 9f /* CTI */ - - stb %g0, [%o0] /* Store */ -9: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -10: subcc %o0, 2, %g6 /* IEU1 Group */ - - ba,pt %xcc, 3b /* CTI */ - sllx %g5, 8, %g3 /* IEU0 */ -11: subcc %o0, 3, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - - sllx %g4, 16, %g3 /* IEU0 */ -12: subcc %o0, 4, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %g5, 24, %g3 /* IEU0 */ - -13: subcc %o0, 5, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %g4, 32, %g3 /* IEU0 */ -14: subcc %o0, 6, %g6 /* IEU1 Group */ - - ba,pt %xcc, 3b /* CTI */ - sllx %g5, 40, %g3 /* IEU0 */ -15: subcc %o0, 7, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - - sllx %g4, 48, %g3 /* IEU0 */ -16: subcc %o0, 8, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - clr %g3 /* IEU0 */ - - .align 16 -17: or %o3, %o4, %o3 /* IEU0 Group */ - sub %o3, %g1, %o4 /* IEU1 */ -18: addcc %o2, 8, %o2 /* IEU1 Group */ - be,pn %XCC, 19f /* CTI */ - - andcc %o4, %g2, %g0 /* IEU1 Group */ - be,pt %xcc, 21f /* CTI */ - srlx %o3, 56, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - - be,pn %XCC, 19f /* CTI */ - srlx %o3, 48, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - - srlx %o3, 40, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 32, %g5 /* IEU0 Group */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 24, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - - be,pn %XCC, 19f /* CTI */ - srlx %o3, 16, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - - srlx %o3, 8, %o3 /* IEU0 Group */ - stb %o3, [%o0] /* Store */ -59: add %o0, 1, %o2 /* IEU1 */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - - retl /* CTI+IEU1 Group */ - movne %icc, %o2, %o0 /* Single Group */ -19: retl /* CTI+IEU1 Group */ - nop /* IEU0 */ - -20: mov %o0, %g6 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 51f /* CTI */ - add %o0, 1, %o0 /* IEU0 Group */ - -50: stb %g0, [%o0] /* Store Group */ - subcc %o2, 1, %o2 /* IEU1 Group */ - bne,pt %XCC, 50b /* CTI */ - add %o0, 1, %o0 /* IEU0 */ - -51: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - - .align 16 -21: andcc %o2, 4, %g0 /* IEU1 Group */ - be,pn %icc, 22f /* CTI */ - srlx %o3, 32, %g5 /* IEU0 */ - stw %g5, [%o0] /* Store Group */ - - add %o0, 4, %o0 /* IEU0 */ - mov %o3, %g5 /* IEU1 */ -22: andcc %o2, 2, %g0 /* IEU1 Group */ - be,pn %icc, 23f /* CTI */ - - srlx %g5, 16, %g4 /* IEU0 */ - sth %g4, [%o0] /* Store Group */ - add %o0, 2, %o0 /* IEU0 */ - mov %g5, %g4 /* IEU1 */ - -23: srlx %g4, 8, %g4 /* IEU0 Group */ - andcc %o2, 1, %g0 /* IEU1 */ - bne,a,pn %icc, 24f /* CTI */ - stb %g4, [%o0] /* Store Group */ - - retl /* CTI+IEU1 Group */ - nop /* IEU0 */ -24: retl /* CTI+IEU1 Group */ - add %o0, 1, %o0 /* IEU0 */ - - .align 16 -55: sub %o0, 1, %g6 /* IEU0 Group */ -25: andcc %o0, 7, %g0 /* IEU1 */ - be,a,pn %icc, 4b /* CTI */ - andncc %o2, 31, %g3 /* IEU1 Group */ - - stb %g0, [%o0] /* Store Group */ - subcc %o2, 1, %o2 /* IEU1 */ - bne,pt %XCC, 25b /* CTI */ - add %o0, 1, %o0 /* IEU0 Group */ - - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - - .align 16 -26: ldub [%o1], %o3 /* Load */ - sllx %g1, 7, %g2 /* IEU0 Group */ - stb %o3, [%o0] /* Store */ -27: subcc %o2, 1, %o2 /* IEU1 */ - - be,pn %XCC, 59b /* CTI */ - add %o1, 1, %o1 /* IEU0 Group */ - add %o0, 1, %o0 /* IEU1 */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 55b /* CTI */ - lduba [%o1] ASI_PNF, %o3 /* Load */ - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,a,pt %icc, 27b /* CTI */ - - stb %o3, [%o0] /* Store */ - andcc %o1, 7, %g3 /* IEU1 Group */ - be,a,pt %icc, 1b /* CTI */ - ldx [%o1], %o3 /* Load */ - -28: orcc %g0, 64, %g4 /* IEU1 Group */ - sllx %g3, 3, %g5 /* IEU0 */ - sub %g4, %g5, %g4 /* IEU0 Group */ - sub %o1, %g3, %o1 /* 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 */ -29: sllx %o5, %g5, %o3 /* IEU0 Group */ - ldxa [%o1] ASI_PNF, %o5 /* Load */ - - subcc %o2, 8, %o2 /* IEU1 */ - bl,pn %XCC, 17b /* CTI */ - srlx %o5, %g4, %o4 /* IEU0 Group */ - add %o1, 8, %o1 /* IEU1 */ - - or %o3, %o4, %o3 /* IEU0 Group */ - add %o0, 8, %o0 /* 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, 29b /* CTI */ - stx %o3, [%o0-8] /* Store */ - srlx %o3, 56, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 36f /* CTI */ - srlx %o3, 48, %g6 /* IEU0 */ - andcc %g6, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 35f /* CTI */ - - srlx %o3, 40, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 34f /* CTI */ - srlx %o3, 32, %g6 /* IEU0 */ - - andcc %g6, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 33f /* CTI */ - srlx %o3, 24, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 32f /* CTI */ - srlx %o3, 16, %g6 /* IEU0 */ - andcc %g6, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 31f /* CTI */ - - srlx %o3, 8, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 30f /* CTI */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - - bne,pn %icc, 29b /* CTI */ - stx %o3, [%o0-8] /* Store */ - sub %o0, 1, %g6 /* IEU0 Group */ - ba,pt %xcc, 4b /* CTI */ - - andncc %o2, 31, %g3 /* IEU1 */ -30: subcc %o0, 2, %g6 /* IEU0 */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 8, %g3 /* IEU0 Group */ - -31: sllx %g6, 16, %g3 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sub %o0, 3, %g6 /* IEU1 */ -32: subcc %o0, 4, %g6 /* IEU1 Group */ - - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 24, %g3 /* IEU0 */ -33: sllx %g6, 32, %g3 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - - sub %o0, 5, %g6 /* IEU1 */ -34: subcc %o0, 6, %g6 /* IEU1 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 40, %g3 /* IEU0 */ - -35: sllx %g6, 48, %g3 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sub %o0, 7, %g6 /* IEU1 */ -36: subcc %o0, 8, %g6 /* IEU1 Group */ - - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 56, %g3 /* IEU0 */ -END(__stpncpy) - -libc_hidden_def (__stpncpy) -weak_alias (__stpncpy, stpncpy) diff --git a/sysdeps/sparc/sparc64/strcat.S b/sysdeps/sparc/sparc64/strcat.S deleted file mode 100644 index 151a4e8853..0000000000 --- a/sysdeps/sparc/sparc64/strcat.S +++ /dev/null @@ -1,339 +0,0 @@ -/* strcat (dest, src) -- Append SRC on the end of DEST. - For SPARC v9. - Copyright (C) 1998-2017 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 <sysdep.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(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_builtin_def (strcat) diff --git a/sysdeps/sparc/sparc64/strchr.S b/sysdeps/sparc/sparc64/strchr.S deleted file mode 100644 index 31b9e58d76..0000000000 --- a/sysdeps/sparc/sparc64/strchr.S +++ /dev/null @@ -1,482 +0,0 @@ -/* strchr (str, ch) -- Return pointer to first occurrence of CH in STR. - For SPARC v9. - Copyright (C) 1998-2017 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 <sysdep.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) - - .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) - -weak_alias (strchr, index) -weak_alias (strrchr, rindex) -libc_hidden_builtin_def (strchr) -libc_hidden_builtin_def (strrchr) diff --git a/sysdeps/sparc/sparc64/strcmp.S b/sysdeps/sparc/sparc64/strcmp.S deleted file mode 100644 index d4b0a22f18..0000000000 --- a/sysdeps/sparc/sparc64/strcmp.S +++ /dev/null @@ -1,232 +0,0 @@ -/* Compare two strings for differences. - For SPARC v9. - Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David S. Miller <davem@davemloft.net> - - 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 <asm/asi.h> - -#ifndef XCC - .register %g2, #scratch - .register %g3, #scratch - .register %g6, #scratch -#endif - -#define rSTR1 %o0 -#define rSTR2 %o1 -#define r0101 %o2 /* 0x0101010101010101 */ -#define r8080 %o3 /* 0x8080808080808080 */ -#define rSTRXOR %o4 -#define rWORD1 %o5 -#define rTMP1 %g1 -#define rTMP2 %g2 -#define rWORD2 %g3 -#define rSLL %g4 -#define rSRL %g5 -#define rBARREL %g6 - - /* There are two cases, either the two pointers are aligned - * identically or they are not. If they have the same - * alignment we can use the normal full speed loop. Otherwise - * we have to use the barrel-shifter version. - */ - - .text - .align 32 -ENTRY(strcmp) - or rSTR2, rSTR1, rTMP1 - sethi %hi(0x80808080), r8080 - - andcc rTMP1, 0x7, %g0 - bne,pn %icc, .Lmaybe_barrel_shift - or r8080, %lo(0x80808080), r8080 - ldx [rSTR1], rWORD1 - - sub rSTR2, rSTR1, rSTR2 - sllx r8080, 32, rTMP1 - - ldx [rSTR1 + rSTR2], rWORD2 - or r8080, rTMP1, r8080 - - ba,pt %xcc, .Laligned_loop_entry - srlx r8080, 7, r0101 - - .align 32 -.Laligned_loop_entry: -.Laligned_loop: - add rSTR1, 8, rSTR1 - - sub rWORD1, r0101, rTMP2 - xorcc rWORD1, rWORD2, rSTRXOR - bne,pn %xcc, .Lcommon_endstring - - andn r8080, rWORD1, rTMP1 - - ldxa [rSTR1] ASI_PNF, rWORD1 - andcc rTMP1, rTMP2, %g0 - be,a,pt %xcc, .Laligned_loop - - ldxa [rSTR1 + rSTR2] ASI_PNF, rWORD2 - -.Lcommon_equal: - retl - mov 0, %o0 - - /* All loops terminate here once they find an unequal word. - * If a zero byte appears in the word before the first unequal - * byte, we must report zero. Otherwise we report '1' or '-1' - * depending upon whether the first mis-matching byte is larger - * in the first string or the second, respectively. - * - * First we compute a 64-bit mask value that has "0x01" in - * each byte where a zero exists in rWORD1. rSTRXOR holds the - * value (rWORD1 ^ rWORD2). Therefore, if considered as an - * unsigned quantity, our "0x01" mask value is "greater than" - * rSTRXOR then a zero terminating byte comes first and - * therefore we report '0'. - * - * The formula for this mask is: - * - * mask_tmp1 = ~rWORD1 & 0x8080808080808080; - * mask_tmp2 = ((rWORD1 & 0x7f7f7f7f7f7f7f7f) + - * 0x7f7f7f7f7f7f7f7f); - * - * mask = ((mask_tmp1 & ~mask_tmp2) >> 7); - */ -.Lcommon_endstring: - andn rWORD1, r8080, rTMP2 - or r8080, 1, %o1 - - mov 1, %o0 - sub rTMP2, %o1, rTMP2 - - cmp rWORD1, rWORD2 - andn rTMP1, rTMP2, rTMP1 - - movleu %xcc, -1, %o0 - srlx rTMP1, 7, rTMP1 - - /* In order not to be influenced by bytes after the zero byte, we - * have to retain only the highest bit in the mask for the comparison - * with rSTRXOR to work properly. - */ - mov 0, rTMP2 - andcc rTMP1, 0x0100, %g0 - - movne %xcc, 8, rTMP2 - sllx rTMP1, 63 - 16, %o1 - - movrlz %o1, 16, rTMP2 - sllx rTMP1, 63 - 24, %o1 - - movrlz %o1, 24, rTMP2 - sllx rTMP1, 63 - 32, %o1 - - movrlz %o1, 32, rTMP2 - sllx rTMP1, 63 - 40, %o1 - - movrlz %o1, 40, rTMP2 - sllx rTMP1, 63 - 48, %o1 - - movrlz %o1, 48, rTMP2 - sllx rTMP1, 63 - 56, %o1 - - movrlz %o1, 56, rTMP2 - - srlx rTMP1, rTMP2, rTMP1 - - sllx rTMP1, rTMP2, rTMP1 - - cmp rTMP1, rSTRXOR - retl - movgu %xcc, 0, %o0 - -.Lmaybe_barrel_shift: - sub rSTR2, rSTR1, rSTR2 - sllx r8080, 32, rTMP1 - - or r8080, rTMP1, r8080 - and rSTR1, 0x7, rTMP2 - - srlx r8080, 7, r0101 - andn rSTR1, 0x7, rSTR1 - - ldxa [rSTR1] ASI_PNF, rWORD1 - andcc rSTR2, 0x7, rSLL - sll rTMP2, 3, rSTRXOR - - bne,pn %icc, .Lneed_barrel_shift - mov -1, rTMP1 - ldxa [rSTR1 + rSTR2] ASI_PNF, rBARREL - - srlx rTMP1, rSTRXOR, rTMP2 - - orn rWORD1, rTMP2, rWORD1 - ba,pt %xcc, .Laligned_loop_entry - orn rBARREL, rTMP2, rWORD2 - -.Lneed_barrel_shift: - sllx rSLL, 3, rSLL - andn rSTR2, 0x7, rSTR2 - - ldxa [rSTR1 + rSTR2] ASI_PNF, rBARREL - mov 64, rTMP2 - sub rTMP2, rSLL, rSRL - - srlx rTMP1, rSTRXOR, rTMP1 - add rSTR2, 8, rSTR2 - - orn rWORD1, rTMP1, rWORD1 - sllx rBARREL, rSLL, rWORD2 - ldxa [rSTR1 + rSTR2] ASI_PNF, rBARREL - - add rSTR1, 8, rSTR1 - sub rWORD1, r0101, rTMP2 - - srlx rBARREL, rSRL, rSTRXOR - - or rWORD2, rSTRXOR, rWORD2 - - orn rWORD2, rTMP1, rWORD2 - ba,pt %xcc, .Lbarrel_shift_loop_entry - andn r8080, rWORD1, rTMP1 - -.Lbarrel_shift_loop: - sllx rBARREL, rSLL, rWORD2 - ldxa [rSTR1 + rSTR2] ASI_PNF, rBARREL - - add rSTR1, 8, rSTR1 - sub rWORD1, r0101, rTMP2 - - srlx rBARREL, rSRL, rSTRXOR - andn r8080, rWORD1, rTMP1 - - or rWORD2, rSTRXOR, rWORD2 - -.Lbarrel_shift_loop_entry: - xorcc rWORD1, rWORD2, rSTRXOR - bne,pn %xcc, .Lcommon_endstring - - andcc rTMP1, rTMP2, %g0 - be,a,pt %xcc, .Lbarrel_shift_loop - ldxa [rSTR1] ASI_PNF, rWORD1 - - retl - mov 0, %o0 -END(strcmp) -libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/sparc/sparc64/strcpy.S b/sysdeps/sparc/sparc64/strcpy.S deleted file mode 100644 index 8732809f2b..0000000000 --- a/sysdeps/sparc/sparc64/strcpy.S +++ /dev/null @@ -1,244 +0,0 @@ -/* Copy SRC to DEST returning DEST. - For SPARC v9. - Copyright (C) 1998-2017 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 <sysdep.h> -#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_builtin_def (strcpy) diff --git a/sysdeps/sparc/sparc64/strcspn.S b/sysdeps/sparc/sparc64/strcspn.S deleted file mode 100644 index 8b448d16e7..0000000000 --- a/sysdeps/sparc/sparc64/strcspn.S +++ /dev/null @@ -1,212 +0,0 @@ -/* strcspn (str, ss) -- Return the length of the initial segment of STR - which contains no characters from SS. - For SPARC v9. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by 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 <sysdep.h> -#include <asm/asi.h> -#ifndef XCC -#define XCC xcc -#define STACK_SIZE 128 -#define STACK_OFFSET 128+0x7ff - .register %g2, #scratch -#else -#define STACK_SIZE 64 -#define STACK_OFFSET 64 -#endif - - .text - .align 32 -ENTRY(strcspn) - sub %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - mov 1, %o4 /* IEU1 */ - stx %o4, [%sp + STACK_OFFSET] /* Store Group */ - mov %o0, %g4 /* IEU0 */ - - stx %g0, [%sp + STACK_OFFSET + 8] /* Store Group */ - add %sp, STACK_OFFSET, %o5 /* IEU0 */ - stx %g0, [%sp + STACK_OFFSET + 16] /* Store Group */ - stx %g0, [%sp + STACK_OFFSET + 24] /* Store Group */ - -1: ldub [%o1], %o2 /* Load Group */ - brz,pn %o2, 2f /* CTI+IEU1 Group */ - srl %o2, 3, %o3 /* IEU0 */ - and %o3, 0x18, %o3 /* IEU0 Group */ - - and %o2, 0x3f, %o2 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - add %o1, 1, %o1 /* IEU1 */ - - or %g2, %g1, %g2 /* IEU0 Group */ - ba,pt %xcc, 1b /* CTI */ - stx %g2, [%o5 + %o3] /* Store */ -2: andcc %o0, 7, %g0 /* IEU1 Group */ - - be,a,pt %xcc, 4f /* CTI */ - ldx [%o0], %o2 /* Load */ - ldub [%o0], %o2 /* Load Group */ -3: srl %o2, 3, %o3 /* IEU0 Group */ - - and %o2, 0x3f, %o2 /* IEU1 */ - and %o3, 0x18, %o3 /* IEU0 Group */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - - add %o0, 1, %o0 /* IEU1 */ - andcc %g2, %g1, %g0 /* IEU1 Group */ - bne,pn %xcc, 12f /* CTI */ - andcc %o0, 7, %g0 /* IEU1 Group */ - - bne,a,pt %icc, 3b /* CTI */ - ldub [%o0], %o2 /* Load */ - ldx [%o0], %o2 /* Load Group */ -4: srlx %o2, 59, %o3 /* IEU0 Group */ - - srlx %o2, 56, %g5 /* IEU0 Group */ -5: and %o3, 0x18, %o3 /* IEU1 */ - andcc %g5, 0x3f, %g5 /* IEU1 Group */ - ldx [%o5 + %o3], %g2 /* Load */ - - srlx %o2, 51, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 48, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 13f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 43, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 40, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 14f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 35, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 32, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 15f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 27, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 24, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 16f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 19, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 16, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 17f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 11, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - add %o0, 8, %o0 /* IEU1 */ - srlx %o2, 8, %g5 /* IEU0 Group */ - - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 18f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %g5, %g1 /* IEU0 */ - mov %o2, %g5 /* IEU1 */ - srlx %o2, 3, %o3 /* IEU0 Group */ - - ldxa [%o0] ASI_PNF, %o2 /* Load */ - andcc %g2, %g1, %g2 /* IEU1 Group */ - bne,pn %xcc, 19f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %g5, %g1 /* IEU0 */ - srlx %o2, 59, %o3 /* IEU0 Group */ - - andcc %g2, %g1, %g2 /* IEU1 Group */ - be,pt %xcc, 5b /* CTI */ - srlx %o2, 56, %g5 /* IEU0 Group */ - sub %o0, 1, %o0 /* IEU1 */ - - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - - .align 16 -19: sub %o0, 2, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -18: sub %o0, 3, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -17: add %o0, 4, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -16: add %o0, 3, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -15: add %o0, 2, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -14: add %o0, 1, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -13: add %sp, STACK_SIZE+32, %sp /* IEU1 */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - - .align 16 -12: sub %o0, 1, %o0 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ -END(strcspn) -libc_hidden_builtin_def (strcspn) diff --git a/sysdeps/sparc/sparc64/strlen.S b/sysdeps/sparc/sparc64/strlen.S deleted file mode 100644 index 25a63df03a..0000000000 --- a/sysdeps/sparc/sparc64/strlen.S +++ /dev/null @@ -1,85 +0,0 @@ -/* Determine the length of a string. For SPARC v9. - Copyright (C) 1998-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jan Vondrak <jvon4518@ss1000.ms.mff.cuni.cz>, - Jakub Jelinek <jj@ultra.linux.cz>, and - David S. Miller <davem@davemloft.net>. - - 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> - - .register %g2, #scratch - .register %g3, #scratch - - .text - .align 32 -ENTRY(strlen) - mov %o0, %o1 - andn %o0, 0x7, %o0 - - ldx [%o0], %o5 - and %o1, 0x7, %g1 - mov -1, %g5 - - sethi %hi(0x01010101), %o2 - sll %g1, 3, %g1 - - or %o2, %lo(0x01010101), %o2 - srlx %g5, %g1, %o3 - - sllx %o2, 32, %g1 - sethi %hi(0x0000ff00), %g5 - - orn %o5, %o3, %o5 - or %o2, %g1, %o2 - - sllx %o2, 7, %o3 -10: add %o0, 8, %o0 - - andn %o3, %o5, %g1 - sub %o5, %o2, %g2 - - andcc %g1, %g2, %g0 - be,a,pt %xcc, 10b - ldx [%o0], %o5 - srlx %o5, 32, %g1 - - andn %o3, %g1, %o4 - sub %g1, %o2, %g2 - - add %o0, 4, %g3 - andcc %o4, %g2, %g0 - movne %icc, %g1, %o5 - - move %icc, %g3, %o0 - or %g5, %lo(0x0000ff00), %g5 - mov 3 - 8, %g2 - - andcc %o5, %g5, %g0 - srlx %o5, 16, %g1 - move %icc, 2 - 8, %g2 - - andcc %g1, 0xff, %g0 - srl %o5, 24, %o5 - move %icc, 1 - 8, %g2 - - movrz %o5, 0 - 8, %g2 - sub %o0, %o1, %o0 - - retl - add %o0, %g2, %o0 -END(strlen) -libc_hidden_builtin_def (strlen) diff --git a/sysdeps/sparc/sparc64/strncmp.S b/sysdeps/sparc/sparc64/strncmp.S deleted file mode 100644 index f0af16155b..0000000000 --- a/sysdeps/sparc/sparc64/strncmp.S +++ /dev/null @@ -1,363 +0,0 @@ -/* Compare no more than N characters of S1 and S2, returning less than, - equal to or greater than zero if S1 is lexicographically less than, - equal to or greater than S2. - For SPARC v9. - Copyright (C) 1997-2017 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 <sysdep.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(strncmp) -#ifdef USE_BPR - brz,pn %o2, 4f /* CTI+IEU1 Group */ -#else - tst %o2 /* IEU1 Group */ - be,pn %XCC, 4f /* CTI */ -#endif - sethi %hi(0x1010101), %g1 /* IEU0 */ - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,pn %icc, 9f /* CTI */ - - or %g1, %lo(0x1010101), %g1 /* IEU0 */ - andcc %o1, 7, %g3 /* IEU1 Group */ - bne,pn %icc, 11f /* CTI */ - sllx %g1, 32, %g2 /* IEU0 */ - - ldx [%o0], %g4 /* Load Group */ - or %g1, %g2, %g1 /* IEU0 */ -1: ldx [%o1], %o3 /* Load Group */ - sllx %g1, 7, %g2 /* IEU0 */ - - add %o0, 8, %o0 /* IEU1 */ -2: subcc %o2, 8, %o2 /* IEU1 Group */ - bcs,pn %XCC, 5f /* CTI */ - add %o1, 8, %o1 /* IEU0 */ - - sub %g4, %g1, %g3 /* IEU0 Group */ - subcc %g4, %o3, %o4 /* IEU1 */ -#ifdef EIGHTBIT_NOT_RARE - andn %g3, %g4, %g6 /* IEU0 Group */ -#endif - bne,pn %xcc, 6f /* CTI */ - ldxa [%o0] ASI_PNF, %g4 /* Load Group */ - - add %o0, 8, %o0 /* IEU0 */ -#ifdef EIGHTBIT_NOT_RARE - andcc %g6, %g2, %g0 /* IEU1 */ -#else - andcc %g3, %g2, %g0 /* IEU1 */ -#endif - be,a,pt %xcc, 2b /* CTI */ - ldxa [%o1] ASI_PNF, %o3 /* Load Group */ - - addcc %g3, %g1, %o4 /* IEU1 */ -#ifdef EIGHTBIT_NOT_RARE - srlx %g6, 32, %g6 /* IEU0 */ - andcc %g6, %g2, %g0 /* IEU1 Group */ -#else - srlx %g3, 32, %g3 /* IEU0 */ - andcc %g3, %g2, %g0 /* IEU1 Group */ -#endif - 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] ASI_PNF, %o3 /* Load */ - -4: retl /* CTI+IEU1 Group */ - clr %o0 /* IEU0 */ - - .align 16 -5: srlx %g4, 56, %o4 /* IEU0 Group */ - cmp %o2, -8 /* IEU1 */ - be,pn %XCC, 4b /* CTI */ - srlx %o3, 56, %o5 /* IEU0 Group */ - - andcc %o4, 0xff, %g0 /* IEU1 */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 48, %o5 /* IEU0 */ - cmp %o2, -7 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 48, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 40, %o5 /* IEU0 */ - cmp %o2, -6 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 40, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 32, %o5 /* IEU0 */ - cmp %o2, -5 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 32, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 24, %o5 /* IEU0 */ - cmp %o2, -4 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 24, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 16, %o5 /* IEU0 */ - cmp %o2, -3 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 16, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - - srlx %o3, 8, %o5 /* IEU0 */ - cmp %o2, -2 /* IEU1 Group */ - be,pn %XCC, 4b /* CTI */ - srlx %g4, 8, %o4 /* IEU0 */ - - retl /* CTI+IEU1 Group */ - sub %o4, %o5, %o0 /* IEU0 */ -6: addcc %o3, %o4, %g4 /* IEU1 */ -7: srlx %o3, 56, %o5 /* IEU0 */ - - srlx %g4, 56, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 48, %o5 /* IEU0 */ - srlx %g4, 48, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 40, %o5 /* IEU0 */ - - srlx %g4, 40, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 32, %o5 /* IEU0 */ - srlx %g4, 32, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 24, %o5 /* IEU0 */ - - srlx %g4, 24, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 16, %o5 /* IEU0 */ - srlx %g4, 16, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - bne,pn %xcc, 8f /* CTI */ - srlx %o3, 8, %o5 /* IEU0 */ - - srlx %g4, 8, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %xcc, 8f /* CTI */ - subcc %o4, %o5, %o4 /* IEU1 Group */ - - retl /* CTI+IEU1 Group */ - sub %g4, %o3, %o0 /* IEU0 */ -8: retl /* CTI+IEU1 Group */ - mov %o4, %o0 /* IEU0 */ - -9: ldub [%o0], %g4 /* Load Group */ - add %o0, 1, %o0 /* IEU0 */ - ldub [%o1], %o3 /* Load Group */ - sllx %g1, 32, %g2 /* IEU0 */ - -10: subcc %o2, 1, %o2 /* IEU1 Group */ - be,pn %XCC, 8b /* CTI */ - sub %g4, %o3, %o4 /* IEU0 */ - add %o1, 1, %o1 /* IEU0 Group */ - - cmp %g4, %o3 /* IEU1 */ - bne,pn %xcc, 8b /* CTI */ - lduba [%o0] ASI_PNF, %g4 /* Load Group */ - andcc %o3, 0xff, %g0 /* IEU1 */ - - be,pn %icc, 4b /* CTI */ - lduba [%o1] ASI_PNF, %o3 /* Load Group */ - andcc %o0, 7, %g0 /* IEU1 */ - bne,a,pn %icc, 10b /* CTI */ - - add %o0, 1, %o0 /* IEU0 Group */ - or %g1, %g2, %g1 /* IEU1 */ - andcc %o1, 7, %g3 /* IEU1 Group */ - be,pn %icc, 1b /* CTI */ - - ldxa [%o0] ASI_PNF, %g4 /* Load */ -11: sllx %g3, 3, %g5 /* IEU0 Group */ - mov 64, %g6 /* IEU1 */ - or %g1, %g2, %g1 /* IEU0 Group */ - sub %o1, %g3, %o1 /* IEU1 */ - - sub %g6, %g5, %g6 /* IEU0 Group */ - ldxa [%o1] ASI_PNF, %o4 /* Load */ - sllx %g1, 7, %g2 /* IEU1 */ - add %o1, 8, %o1 /* IEU0 Group */ - /* %g1 = 0101010101010101 - %g2 = 8080808080808080 - %g3 = %o1 alignment - %g5 = number of bits to shift left - %g6 = number of bits to shift right */ - -12: sllx %o4, %g5, %o3 /* IEU0 Group */ - ldxa [%o1] ASI_PNF, %o4 /* Load */ - add %o1, 8, %o1 /* IEU1 */ -13: ldxa [%o0] ASI_PNF, %g4 /* Load Group */ - - addcc %o0, 8, %o0 /* IEU1 */ - srlx %o4, %g6, %o5 /* IEU0 */ - subcc %o2, 8, %o2 /* IEU1 Group */ - bcs,pn %XCC, 5b /* CTI */ - - or %o3, %o5, %o3 /* IEU0 */ - cmp %g4, %o3 /* IEU1 Group */ - bne,pn %xcc, 7b /* CTI */ - sub %g4, %g1, %o5 /* IEU0 */ - -#ifdef EIGHTBIT_NOT_RARE - andn %o5, %g4, %o5 /* IEU0 Group */ -#endif - andcc %o5, %g2, %g0 /* IEU1 Group */ - be,pt %xcc, 12b /* CTI */ - srlx %o5, 32, %o5 /* IEU0 */ - andcc %o5, %g2, %g0 /* IEU1 Group */ - - be,pt %xcc, 14f /* CTI */ - srlx %g4, 56, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - - srlx %g4, 48, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - srlx %g4, 40, %o5 /* IEU0 */ - - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - srlx %g4, 32, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 4b /* CTI */ -14: srlx %g4, 24, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - - srlx %g4, 16, %o5 /* IEU0 */ - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - srlx %g4, 8, %o5 /* IEU0 */ - - andcc %o5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 4b /* CTI */ - - sllx %o4, %g5, %o3 /* IEU0 */ - ldxa [%o1] ASI_PNF, %o4 /* Load Group */ - ba,pt %xcc, 13b /* CTI */ - add %o1, 8, %o1 /* IEU0 */ -END(strncmp) -libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/sparc/sparc64/strncpy.S b/sysdeps/sparc/sparc64/strncpy.S deleted file mode 100644 index f8c801f552..0000000000 --- a/sysdeps/sparc/sparc64/strncpy.S +++ /dev/null @@ -1,396 +0,0 @@ -/* strncpy(DST, SRC, COUNT) - Copy no more than COUNT bytes of the - null-terminated string from SRC to DST. If SRC does not cover all of - COUNT, the balance is zeroed. - For SPARC v9. - Copyright (C) 1998-2017 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 <sysdep.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(strncpy) - sethi %hi(0x01010101), %g1 /* IEU0 Group */ -#ifdef USE_BPR - brz,pn %o2, 19f /* CTI+IEU1 */ -#else - tst %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ -#endif - mov %o0, %g6 /* IEU0 Group */ - or %g1, %lo(0x01010101), %g1 /* IEU1 */ - - andcc %o0, 7, %g0 /* IEU1 Group */ - sllx %g1, 32, %g2 /* IEU0 */ - bne,pn %icc, 26f /* CTI */ - or %g1, %g2, %g1 /* IEU0 Group */ - - andcc %o1, 7, %g3 /* IEU1 */ - bne,pn %icc, 28f /* CTI */ - sllx %g1, 7, %g2 /* IEU0 Group */ - ldx [%o1], %o3 /* Load */ - -1: add %o1, 8, %o1 /* IEU1 */ -2: subcc %o2, 8, %o2 /* IEU1 Group */ - bl,pn %XCC, 18f /* CTI */ - sub %o3, %g1, %o4 /* IEU0 */ - - add %o0, 8, %o0 /* IEU0 Group */ -#ifdef EIGHTBIT_NOT_MORE - andn %o4, %o3, %o4 /* IEU1 */ -#endif - mov %o3, %g3 /* IEU1 */ - ldxa [%o1] ASI_PNF, %o3 /* Load */ - add %o1, 8, %o1 /* IEU0 Group */ - - andcc %o4, %g2, %g0 /* IEU1 */ - be,a,pt %xcc, 2b /* CTI */ - stx %g3, [%o0-8] /* Store Group */ - srlx %g3, 56, %g5 /* IEU0 Group */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 16f /* CTI */ - srlx %g3, 48, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 15f /* CTI */ - srlx %g3, 40, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 14f /* CTI */ - - srlx %g3, 32, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 13f /* CTI */ - srlx %g3, 24, %g5 /* IEU0 */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 12f /* CTI */ - srlx %g3, 16, %g4 /* IEU0 */ - andcc %g4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 11f /* CTI */ - srlx %g3, 8, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 10f /* CTI */ - - andcc %g3, 0xff, %g0 /* IEU1 Group */ - bne,pt %icc, 2b /* CTI */ -3: stx %g3, [%o0-8] /* Store */ - andncc %o2, 31, %g3 /* IEU1 Group */ - -4: be,pn %XCC, 41f /* CTI */ - and %o2, 31, %o2 /* IEU1 Group */ -40: stx %g0, [%o0] /* Store */ - stx %g0, [%o0 + 8] /* Store Group */ - - subcc %g3, 32, %g3 /* IEU1 */ - stx %g0, [%o0 + 16] /* Store Group */ - stx %g0, [%o0 + 24] /* Store Group */ - bne,pt %XCC, 40b /* CTI */ - - add %o0, 32, %o0 /* IEU0 */ -41: subcc %o2, 8, %o2 /* IEU1 Group */ - bl,a,pn %XCC, 6f /* CTI */ - andcc %o2, 4, %g0 /* IEU1 Group */ - -5: stx %g0, [%o0] /* Store */ - subcc %o2, 8, %o2 /* IEU1 Group */ - bge,pt %XCC, 5b /* CTI */ - add %o0, 8, %o0 /* IEU0 */ - - andcc %o2, 4, %g0 /* IEU1 Group */ -6: be,a,pn %icc, 7f /* CTI */ - andcc %o2, 2, %g0 /* IEU1 Group */ - stw %g0, [%o0] /* Store */ - - add %o0, 4, %o0 /* IEU0 */ - andcc %o2, 2, %g0 /* IEU1 Group */ -7: be,a,pn %icc, 8f /* CTI */ - andcc %o2, 1, %g0 /* IEU1 Group */ - - sth %g0, [%o0] /* Store */ - add %o0, 2, %o0 /* IEU0 */ - andcc %o2, 1, %g0 /* IEU1 Group */ -8: bne,a,pn %icc, 9f /* CTI */ - - stb %g0, [%o0] /* Store */ -9: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - - .align 16 -10: ba,pt %xcc, 3b /* CTI */ - sllx %g5, 8, %g3 /* IEU0 */ -11: ba,pt %xcc, 3b /* CTI Group */ - sllx %g4, 16, %g3 /* IEU0 */ - -12: ba,pt %xcc, 3b /* CTI Group */ - sllx %g5, 24, %g3 /* IEU0 */ -13: ba,pt %xcc, 3b /* CTI Group */ - sllx %g4, 32, %g3 /* IEU0 */ - -14: ba,pt %xcc, 3b /* CTI Group */ - sllx %g5, 40, %g3 /* IEU0 */ -15: ba,pt %xcc, 3b /* CTI Group */ - sllx %g4, 48, %g3 /* IEU0 */ - -16: ba,pt %xcc, 3b /* CTI */ - sllx %g5, 56, %g3 /* IEU0 */ -17: or %o3, %o4, %o3 /* IEU0 Group */ - sub %o3, %g1, %o4 /* IEU1 */ - -18: addcc %o2, 8, %o2 /* IEU1 Group */ - be,pn %XCC, 19f /* CTI */ - andcc %o4, %g2, %g0 /* IEU1 Group */ - be,pt %xcc, 21f /* CTI */ - - srlx %o3, 56, %g5 /* IEU0 */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 48, %g5 /* IEU0 Group */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 40, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - - be,pn %XCC, 19f /* CTI */ - srlx %o3, 32, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - - srlx %o3, 24, %g5 /* IEU0 Group */ - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - - add %o0, 1, %o0 /* IEU0 Group */ - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 16, %g5 /* IEU0 Group */ - - andcc %g5, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 20f /* CTI */ - stb %g5, [%o0] /* Store */ - add %o0, 1, %o0 /* IEU0 Group */ - - subcc %o2, 1, %o2 /* IEU1 */ - be,pn %XCC, 19f /* CTI */ - srlx %o3, 8, %g5 /* IEU0 Group */ - stb %g5, [%o0] /* Store */ - -19: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -50: stb %g0, [%o0] /* Store Group */ -20: subcc %o2, 1, %o2 /* IEU1 Group */ - - bne,pt %XCC, 50b /* CTI */ - add %o0, 1, %o0 /* IEU0 */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - -21: andcc %o2, 4, %g0 /* IEU1 Group */ - be,pn %icc, 22f /* CTI */ - srlx %o3, 32, %g5 /* IEU0 */ - stw %g5, [%o0] /* Store Group */ - - add %o0, 4, %o0 /* IEU0 */ - mov %o3, %g5 /* IEU1 */ -22: andcc %o2, 2, %g0 /* IEU1 Group */ - be,pn %icc, 23f /* CTI */ - - srlx %g5, 16, %g4 /* IEU0 */ - sth %g4, [%o0] /* Store Group */ - add %o0, 2, %o0 /* IEU0 */ - mov %g5, %g4 /* IEU1 */ - -23: srlx %g4, 8, %g4 /* IEU0 Group */ - andcc %o2, 1, %g0 /* IEU1 */ - bne,a,pn %icc, 24f /* CTI */ - stb %g4, [%o0] /* Store Group */ - -24: retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ -25: andcc %o0, 7, %g0 /* IEU1 Group */ - be,a,pn %icc, 4b /* CTI */ - - andncc %o2, 31, %g3 /* IEU1 Group */ - stb %g0, [%o0] /* Store Group */ - subcc %o2, 1, %o2 /* IEU1 */ - bne,pt %XCC, 25b /* CTI */ - - add %o0, 1, %o0 /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - mov %g6, %o0 /* IEU0 */ - - .align 16 -26: ldub [%o1], %o3 /* Load */ - sllx %g1, 7, %g2 /* IEU0 Group */ - stb %o3, [%o0] /* Store */ -27: subcc %o2, 1, %o2 /* IEU1 */ - - be,pn %XCC, 9b /* CTI */ - add %o1, 1, %o1 /* IEU0 Group */ - add %o0, 1, %o0 /* IEU1 */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 25b /* CTI */ - lduba [%o1] ASI_PNF, %o3 /* Load */ - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,a,pt %icc, 27b /* CTI */ - - stb %o3, [%o0] /* Store */ - andcc %o1, 7, %g3 /* IEU1 Group */ - be,a,pt %icc, 1b /* CTI */ - ldx [%o1], %o3 /* Load */ - -28: orcc %g0, 64, %g4 /* IEU1 Group */ - sllx %g3, 3, %g5 /* IEU0 */ - sub %g4, %g5, %g4 /* IEU0 Group */ - sub %o1, %g3, %o1 /* 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 */ - -29: sllx %o5, %g5, %o3 /* IEU0 Group */ - ldxa [%o1] ASI_PNF, %o5 /* Load */ - subcc %o2, 8, %o2 /* IEU1 */ - bl,pn %XCC, 17b /* CTI */ - - srlx %o5, %g4, %o4 /* IEU0 Group */ - add %o1, 8, %o1 /* IEU1 */ - or %o3, %o4, %o3 /* IEU0 Group */ - add %o0, 8, %o0 /* 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, 29b /* CTI */ - stx %o3, [%o0-8] /* Store */ - - srlx %o3, 56, %o4 /* IEU0 Group */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 36f /* CTI */ - srlx %o3, 48, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 35f /* CTI */ - srlx %o3, 40, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 34f /* CTI */ - srlx %o3, 32, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 33f /* CTI */ - - srlx %o3, 24, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 32f /* CTI */ - srlx %o3, 16, %o4 /* IEU0 */ - - andcc %o4, 0xff, %g0 /* IEU1 Group */ - be,pn %icc, 31f /* CTI */ - srlx %o3, 8, %o4 /* IEU0 */ - andcc %o4, 0xff, %g0 /* IEU1 Group */ - - be,pn %icc, 30f /* CTI */ - andcc %o3, 0xff, %g0 /* IEU1 Group */ - bne,pn %icc, 29b /* CTI */ - stx %o3, [%o0-8] /* Store */ - - ba,pt %xcc, 4b /* CTI Group */ - andncc %o2, 31, %g3 /* IEU1 */ -30: srlx %o3, 8, %o4 /* IEU0 */ - ba,pt %xcc, 3b /* CTI */ - - sllx %o4, 8, %g3 /* IEU0 Group */ -31: srlx %o3, 16, %o4 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 16, %g3 /* IEU0 Group */ - -32: srlx %o3, 24, %o4 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 24, %g3 /* IEU0 Group */ -33: srlx %o3, 32, %o4 /* IEU0 Group */ - - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 32, %g3 /* IEU0 Group */ -34: srlx %o3, 40, %o4 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - - sllx %o4, 40, %g3 /* IEU0 Group */ -35: srlx %o3, 48, %o4 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 48, %g3 /* IEU0 Group */ - -36: srlx %o3, 56, %o4 /* IEU0 Group */ - ba,pt %xcc, 3b /* CTI */ - sllx %o4, 56, %g3 /* IEU0 Group */ -END(strncpy) -libc_hidden_builtin_def (strncpy) diff --git a/sysdeps/sparc/sparc64/strpbrk.S b/sysdeps/sparc/sparc64/strpbrk.S deleted file mode 100644 index 08e0c2f30f..0000000000 --- a/sysdeps/sparc/sparc64/strpbrk.S +++ /dev/null @@ -1,230 +0,0 @@ -/* strpbrk (s, accept) -- Find the first occurrence in S of any character in - ACCEPT. - For SPARC v9. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by 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 <sysdep.h> -#include <asm/asi.h> -#ifndef XCC -#define XCC xcc -#define STACK_SIZE 128 -#define STACK_OFFSET 128+0x7ff - .register %g2, #scratch -#else -#define STACK_SIZE 64 -#define STACK_OFFSET 64 -#endif - - .text - .align 32 -ENTRY(strpbrk) - sub %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - mov 1, %o4 /* IEU1 */ - stx %o4, [%sp + STACK_OFFSET] /* Store Group */ - stx %g0, [%sp + STACK_OFFSET + 8] /* Store Group */ - - add %sp, STACK_OFFSET, %o5 /* IEU0 */ - stx %g0, [%sp + STACK_OFFSET + 16] /* Store Group */ - stx %g0, [%sp + STACK_OFFSET + 24] /* Store Group */ -1: ldub [%o1], %o2 /* Load Group */ - - brz,pn %o2, 2f /* CTI+IEU1 Group */ - srl %o2, 3, %o3 /* IEU0 */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %o2, 0x3f, %o2 /* IEU1 */ - - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - add %o1, 1, %o1 /* IEU1 */ - or %g2, %g1, %g2 /* IEU0 Group */ - - ba,pt %xcc, 1b /* CTI */ - stx %g2, [%o5 + %o3] /* Store */ -2: andcc %o0, 7, %g0 /* IEU1 Group */ - be,a,pt %xcc, 4f /* CTI */ - - ldx [%o0], %o2 /* Load */ - ldub [%o0], %o2 /* Load Group */ -3: srl %o2, 3, %o3 /* IEU0 Group */ - and %o2, 0x3f, %o2 /* IEU1 */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - add %o0, 1, %o0 /* IEU1 */ - - andcc %g2, %g1, %g0 /* IEU1 Group */ - bne,pn %xcc, 12f /* CTI */ - andcc %o0, 7, %g0 /* IEU1 Group */ - bne,a,pt %icc, 3b /* CTI */ - - ldub [%o0], %o2 /* Load */ - ldx [%o0], %o2 /* Load Group */ -4: srlx %o2, 59, %o3 /* IEU0 Group */ - srlx %o2, 56, %g4 /* IEU0 Group */ - -5: and %o3, 0x18, %o3 /* IEU1 */ - andcc %g4, 0x3f, %g4 /* IEU1 Group */ - ldx [%o5 + %o3], %g2 /* Load */ - srlx %o2, 51, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - srlx %o2, 48, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 13f /* CTI */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - srlx %o2, 43, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - srlx %o2, 40, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 14f /* CTI */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - srlx %o2, 35, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - srlx %o2, 32, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 15f /* CTI */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - srlx %o2, 27, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - srlx %o2, 24, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 16f /* CTI */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - srlx %o2, 19, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - srlx %o2, 16, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - bne,pn %xcc, 17f /* CTI */ - - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - srlx %o2, 11, %o3 /* IEU0 */ - - sllx %o4, %g4, %g1 /* IEU0 Group */ - add %o0, 8, %o0 /* IEU1 */ - srlx %o2, 8, %g4 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - bne,pn %xcc, 18f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g4, 0x3f, %g4 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - sllx %o4, %g4, %g1 /* IEU0 */ - mov %o2, %g5 /* IEU1 */ - srlx %o2, 3, %o3 /* IEU0 Group */ - ldxa [%o0] ASI_PNF, %o2 /* Load */ - - andcc %g2, %g1, %g2 /* IEU1 Group */ - bne,pn %xcc, 19f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g4 /* IEU1 */ - - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %g4, %g1 /* IEU0 */ - srlx %o2, 59, %o3 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 Group */ - - be,pt %xcc, 5b /* CTI */ - srlx %o2, 56, %g4 /* IEU0 Group */ - sub %o0, 1, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - - andcc %g5, 0xff, %g0 /* IEU1 */ - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ - - .align 16 -19: sub %o0, 2, %o0 /* IEU1 */ - srl %g5, 8, %g1 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - andcc %g1, 0xff, %g0 /* IEU1 Group */ - - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ -18: sub %o0, 3, %o0 /* IEU1 */ - srl %o2, 16, %g1 /* IEU0 Group */ - - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - andcc %g1, 0xff, %g0 /* IEU1 Group */ - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ - -17: add %o0, 4, %o0 /* IEU1 */ - srl %o2, 24, %g1 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - retl /* CTI+IEU1 Group */ - - movrz %g1, 0, %o0 /* Single Group */ -16: add %o0, 3, %o0 /* IEU1 */ - srlx %o2, 32, %g1 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - - andcc %g1, 0xff, %g0 /* IEU1 Group */ - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ - - .align 16 -15: add %o0, 2, %o0 /* IEU1 */ - srlx %o2, 40, %g1 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - andcc %g1, 0xff, %g0 /* IEU1 Group */ - - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ -14: add %o0, 1, %o0 /* IEU1 */ - srlx %o2, 48, %g1 /* IEU0 Group */ - - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - andcc %g1, 0xff, %g0 /* IEU1 Group */ - retl /* CTI+IEU1 Group */ - move %icc, 0, %o0 /* Single Group */ - -13: add %sp, STACK_SIZE+32, %sp /* IEU1 */ - srlx %o2, 56, %g1 /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - movrz %g1, 0, %o0 /* Single Group */ - - .align 16 -12: sub %o0, 1, %o0 /* IEU0 Group */ - or %o3, %o2, %g1 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - - movrz %g1, 0, %o0 /* Single Group */ -END(strpbrk) -libc_hidden_builtin_def (strpbrk) diff --git a/sysdeps/sparc/sparc64/strrchr.c b/sysdeps/sparc/sparc64/strrchr.c deleted file mode 100644 index ec608d6ab3..0000000000 --- a/sysdeps/sparc/sparc64/strrchr.c +++ /dev/null @@ -1 +0,0 @@ -/* strrchr is in strchr.S */ diff --git a/sysdeps/sparc/sparc64/strspn.S b/sysdeps/sparc/sparc64/strspn.S deleted file mode 100644 index 7c560b9bc2..0000000000 --- a/sysdeps/sparc/sparc64/strspn.S +++ /dev/null @@ -1,212 +0,0 @@ -/* strspn (str, ss) -- Return the length of the maximum initial segment - of S which contains only characters in ACCEPT. - For SPARC v9. - Copyright (C) 1999-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by 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 <sysdep.h> -#include <asm/asi.h> -#ifndef XCC -#define XCC xcc -#define STACK_SIZE 128 -#define STACK_OFFSET 128+0x7ff - .register %g2, #scratch -#else -#define STACK_SIZE 64 -#define STACK_OFFSET 64 -#endif - - .text - .align 32 -ENTRY(strspn) - sub %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - mov 1, %o4 /* IEU1 */ - stx %g0, [%sp + STACK_OFFSET] /* Store Group */ - mov %o0, %g4 /* IEU0 */ - - stx %g0, [%sp + STACK_OFFSET + 8] /* Store Group */ - add %sp, STACK_OFFSET, %o5 /* IEU0 */ - stx %g0, [%sp + STACK_OFFSET + 16] /* Store Group */ - stx %g0, [%sp + STACK_OFFSET + 24] /* Store Group */ - -1: ldub [%o1], %o2 /* Load Group */ - brz,pn %o2, 2f /* CTI+IEU1 Group */ - srl %o2, 3, %o3 /* IEU0 */ - and %o3, 0x18, %o3 /* IEU0 Group */ - - and %o2, 0x3f, %o2 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - add %o1, 1, %o1 /* IEU1 */ - - or %g2, %g1, %g2 /* IEU0 Group */ - ba,pt %xcc, 1b /* CTI */ - stx %g2, [%o5 + %o3] /* Store */ -2: andcc %o0, 7, %g0 /* IEU1 Group */ - - be,a,pt %xcc, 4f /* CTI */ - ldx [%o0], %o2 /* Load */ - ldub [%o0], %o2 /* Load Group */ -3: srl %o2, 3, %o3 /* IEU0 Group */ - - and %o2, 0x3f, %o2 /* IEU1 */ - and %o3, 0x18, %o3 /* IEU0 Group */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %o2, %g1 /* IEU0 */ - - add %o0, 1, %o0 /* IEU1 */ - andcc %g2, %g1, %g0 /* IEU1 Group */ - be,pn %xcc, 12f /* CTI */ - andcc %o0, 7, %g0 /* IEU1 Group */ - - bne,a,pt %icc, 3b /* CTI */ - ldub [%o0], %o2 /* Load */ - ldx [%o0], %o2 /* Load Group */ -4: srlx %o2, 59, %o3 /* IEU0 Group */ - - srlx %o2, 56, %g5 /* IEU0 Group */ -5: and %o3, 0x18, %o3 /* IEU1 */ - andcc %g5, 0x3f, %g5 /* IEU1 Group */ - ldx [%o5 + %o3], %g2 /* Load */ - - srlx %o2, 51, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 48, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - be,pn %xcc, 13f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 43, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 40, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - be,pn %xcc, 14f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 35, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 32, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - be,pn %xcc, 15f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 27, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 24, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - be,pn %xcc, 16f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 19, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - srlx %o2, 16, %g5 /* IEU0 Group */ - andcc %g2, %g1, %g2 /* IEU1 */ - - be,pn %xcc, 17f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - - srlx %o2, 11, %o3 /* IEU0 */ - sllx %o4, %g5, %g1 /* IEU0 Group */ - add %o0, 8, %o0 /* IEU1 */ - srlx %o2, 8, %g5 /* IEU0 Group */ - - andcc %g2, %g1, %g2 /* IEU1 */ - be,pn %xcc, 18f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - and %g5, 0x3f, %g5 /* IEU1 */ - - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %g5, %g1 /* IEU0 */ - mov %o2, %g5 /* IEU1 */ - srlx %o2, 3, %o3 /* IEU0 Group */ - - ldxa [%o0] ASI_PNF, %o2 /* Load */ - andcc %g2, %g1, %g2 /* IEU1 Group */ - be,pn %xcc, 19f /* CTI */ - and %o3, 0x18, %o3 /* IEU0 Group */ - - and %g5, 0x3f, %g5 /* IEU1 */ - ldx [%o5 + %o3], %g2 /* Load Group */ - sllx %o4, %g5, %g1 /* IEU0 */ - srlx %o2, 59, %o3 /* IEU0 Group */ - - andcc %g2, %g1, %g2 /* IEU1 Group */ - bne,pt %xcc, 5b /* CTI */ - srlx %o2, 56, %g5 /* IEU0 Group */ - sub %o0, 1, %o0 /* IEU1 */ - - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - - .align 16 -19: sub %o0, 2, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -18: sub %o0, 3, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -17: add %o0, 4, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -16: add %o0, 3, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -15: add %o0, 2, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -14: add %o0, 1, %o0 /* IEU1 */ - add %sp, STACK_SIZE+32, %sp /* IEU0 Group */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - -13: add %sp, STACK_SIZE+32, %sp /* IEU1 */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ - - .align 16 -12: sub %o0, 1, %o0 /* IEU0 Group */ - add %sp, STACK_SIZE+32, %sp /* IEU1 */ - retl /* CTI+IEU1 Group */ - sub %o0, %g4, %o0 /* IEU0 */ -END(strspn) -libc_hidden_builtin_def (strspn) diff --git a/sysdeps/sparc/sparc64/sub_n.S b/sysdeps/sparc/sparc64/sub_n.S deleted file mode 100644 index 006ae809c8..0000000000 --- a/sysdeps/sparc/sparc64/sub_n.S +++ /dev/null @@ -1,54 +0,0 @@ -/* SPARC v9 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 - and store difference in a third limb vector. - - Copyright (C) 1995-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* INPUT PARAMETERS - res_ptr %o0 - s1_ptr %o1 - s2_ptr %o2 - size %o3 */ - -ENTRY(__mpn_sub_n) - - sub %g0,%o3,%g5 - sllx %o3,3,%g1 - add %o1,%g1,%o1 ! make s1_ptr point at end - add %o2,%g1,%o2 ! make s2_ptr point at end - add %o0,%g1,%o0 ! make res_ptr point at end - mov 0,%o4 ! clear carry variable - sllx %g5,3,%o5 ! compute initial address index - -1: ldx [%o2+%o5],%g1 ! load s2 limb - add %g5,1,%g5 ! increment loop count - ldx [%o1+%o5],%o3 ! load s1 limb - addcc %g1,%o4,%g1 ! add s2 limb and carry variable - movcc %xcc,0,%o4 ! if carry-out, o4 was 1; clear it - subcc %o3,%g1,%g1 ! subtract s1 limb from sum - stx %g1,[%o0+%o5] ! store result - add %o5,8,%o5 ! increment address index - brnz,pt %g5,1b - movcs %xcc,1,%o4 ! if s1 subtract gave carry, record it - - retl - mov %o4,%o0 - -END(__mpn_sub_n) diff --git a/sysdeps/sparc/sparc64/submul_1.S b/sysdeps/sparc/sparc64/submul_1.S deleted file mode 100644 index 03e62b668b..0000000000 --- a/sysdeps/sparc/sparc64/submul_1.S +++ /dev/null @@ -1,82 +0,0 @@ -/* SPARC v9 __mpn_submul_1 -- Multiply a limb vector with a single limb and - subtract the product from a second limb vector. - - Copyright (C) 1996-2017 Free Software Foundation, Inc. - - This file is part of the GNU MP Library. - - The GNU MP Library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, - see <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - - -/* INPUT PARAMETERS - res_ptr o0 - s1_ptr o1 - size o2 - s2_limb o3 */ - -ENTRY(__mpn_submul_1) - save %sp,-192,%sp - - sub %g0,%i2,%o7 - mov 0,%o0 ! zero cy_limb - sllx %o7,3,%o7 - sethi %hi(0x80000000),%o2 - srl %i3,0,%o1 ! extract low 32 bits of s2_limb - sub %i1,%o7,%o3 - srlx %i3,32,%i3 ! extract high 32 bits of s2_limb - sub %i0,%o7,%o4 - add %o2,%o2,%o2 ! o2 = 0x100000000 - - ! hi ! - ! mid-1 ! - ! mid-2 ! - ! lo ! -1: - ldx [%o3+%o7],%g5 - srl %g5,0,%i0 ! zero hi bits - ldx [%o4+%o7],%l1 - srlx %g5,32,%g5 - mulx %o1,%i0,%i4 ! lo product - mulx %i3,%i0,%i1 ! mid-1 product - mulx %o1,%g5,%l2 ! mid-2 product - mulx %i3,%g5,%i5 ! hi product - srlx %i4,32,%i0 ! extract high 32 bits of lo product... - add %i1,%i0,%i1 ! ...and add it to the mid-1 product - addcc %i1,%l2,%i1 ! add mid products - mov 0,%l0 ! we need the carry from that add... - movcs %xcc,%o2,%l0 ! ...compute it and... - sllx %i1,32,%i0 ! align low bits of mid product - add %i5,%l0,%i5 ! ...add to bit 32 of the hi product - srl %i4,0,%g5 ! zero high 32 bits of lo product - add %i0,%g5,%i0 ! combine into low 64 bits of result - srlx %i1,32,%i1 ! extract high bits of mid product... - addcc %i0,%o0,%i0 ! add cy_limb to low 64 bits of result - add %i5,%i1,%i1 ! ...and add them to the high result - mov 0,%g5 - movcs %xcc,1,%g5 - subcc %l1,%i0,%i0 - stx %i0,[%o4+%o7] - add %g5,1,%l1 - movcs %xcc,%l1,%g5 - addcc %o7,8,%o7 - bne,pt %xcc,1b - add %i1,%g5,%o0 ! compute new cy_limb - - jmpl %i7+8, %g0 - restore %o0,%g0,%o0 - -END(__mpn_submul_1) diff --git a/sysdeps/sparc/sparc64/tls-macros.h b/sysdeps/sparc/sparc64/tls-macros.h deleted file mode 100644 index bb0d8035fc..0000000000 --- a/sysdeps/sparc/sparc64/tls-macros.h +++ /dev/null @@ -1,65 +0,0 @@ -#define TLS_LE(x) \ - ({ int *__l; \ - asm ("sethi %%tle_hix22(" #x "), %0" : "=r" (__l)); \ - asm ("xor %1, %%tle_lox10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("add %%g7, %1, %0" : "=r" (__l) : "r" (__l)); \ - __l; }) - -#ifdef __PIC__ -# define TLS_LOAD_PIC \ - ({ long pc, got; \ - asm ("sethi %%hi(_GLOBAL_OFFSET_TABLE_-4), %1\n\t" \ - "rd %%pc, %0\n\t" \ - "add %1, %%lo(_GLOBAL_OFFSET_TABLE_+4), %1\n\t" \ - "add %1, %0, %1\n\t" \ - : "=r" (pc), "=r" (got)); \ - got; }) -#else -# define TLS_LOAD_PIC \ - ({ long got; \ - asm (".hidden _GLOBAL_OFFSET_TABLE_\n\t" \ - "sethi %%hi(_GLOBAL_OFFSET_TABLE_), %0\n\t" \ - "or %0, %%lo(_GLOBAL_OFFSET_TABLE_), %0" \ - : "=r" (got)); \ - got; }) -#endif - -#define TLS_IE(x) \ - ({ int *__l; \ - asm ("sethi %%tie_hi22(" #x "), %0" : "=r" (__l)); \ - asm ("add %1, %%tie_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("ldx [%1 + %2], %0, %%tie_ldx(" #x ")" \ - : "=r" (__l) : "r" (TLS_LOAD_PIC), "r" (__l)); \ - asm ("add %%g7, %1, %0, %%tie_add(" #x ")" : "=r" (__l) : "r" (__l)); \ - __l; }) - -#define TLS_LD(x) \ - ({ int *__l; register void *__o0 asm ("%o0"); \ - long __o; \ - asm ("sethi %%tldm_hi22(" #x "), %0" : "=r" (__l)); \ - asm ("add %1, %%tldm_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("add %1, %2, %0, %%tldm_add(" #x ")" \ - : "=r" (__o0) : "r" (TLS_LOAD_PIC), "r" (__l)); \ - asm ("call __tls_get_addr, %%tgd_call(" #x ")\n\t" \ - " nop" \ - : "=r" (__o0) : "0" (__o0) \ - : "g1", "g2", "g3", "g4", "g5", "g6", "o1", "o2", "o3", "o4", \ - "o5", "o7", "cc"); \ - asm ("sethi %%tldo_hix22(" #x "), %0" : "=r" (__o)); \ - asm ("xor %1, %%tldo_lox10(" #x "), %0" : "=r" (__o) : "r" (__o)); \ - asm ("add %1, %2, %0, %%tldo_add(" #x ")" : "=r" (__l) \ - : "r" (__o0), "r" (__o)); \ - __l; }) - -#define TLS_GD(x) \ - ({ int *__l; register void *__o0 asm ("%o0"); \ - asm ("sethi %%tgd_hi22(" #x "), %0" : "=r" (__l)); \ - asm ("add %1, %%tgd_lo10(" #x "), %0" : "=r" (__l) : "r" (__l)); \ - asm ("add %1, %2, %0, %%tgd_add(" #x ")" \ - : "=r" (__o0) : "r" (TLS_LOAD_PIC), "r" (__l)); \ - asm ("call __tls_get_addr, %%tgd_call(" #x ")\n\t" \ - " nop" \ - : "=r" (__o0) : "0" (__o0) \ - : "g1", "g2", "g3", "g4", "g5", "g6", "o1", "o2", "o3", "o4", \ - "o5", "o7", "cc"); \ - __o0; }) diff --git a/sysdeps/sparc/sparc64/tst-audit.h b/sysdeps/sparc/sparc64/tst-audit.h deleted file mode 100644 index f7123e0ef1..0000000000 --- a/sysdeps/sparc/sparc64/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. SPARC64 version. - - Copyright (C) 2012-2017 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#define pltenter la_sparc64_gnu_pltenter -#define pltexit la_sparc64_gnu_pltexit -#define La_regs La_sparc64_regs -#define La_retval La_sparc64_retval -#define int_retval lrv_reg[0] |