]> sourceware.org Git - glibc.git/commitdiff
sparc: Add multiarch support for memset/bzero/memcpy. davem/sparc
authorDavid S. Miller <davem@davemloft.net>
Fri, 26 Feb 2010 07:52:07 +0000 (23:52 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 26 Feb 2010 07:58:51 +0000 (23:58 -0800)
2010-02-25  David S. Miller  <davem@davemloft.net>

* sysdeps/sparc/elf/rtld-global-offsets.sym: New file.
* sysdeps/sparc/Makefile (csu): Add rtld-global-offsets.sym to
gen-as-const-headers.
* sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile: New file.
* sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy.S: New file.
* sysdeps/sparc/sparc32/sparcv9/multiarch/memset.S: New file.
* sysdeps/sparc/sparc32/sparcv9/sparcv9b/memcpy.S: Move to...
* sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-ultra3.S: ...here.
* sysdeps/sparc/sparc32/sparcv9/sparcv9v/memcpy.S: Move to...
* sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara1.S: ...here.
* sysdeps/sparc/sparc32/sparcv9/sparcv9v/memset.S: Move to...
* sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara1.S: ...here.
* sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memcpy.S: Move to...
* sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara2.S: ...here.
* sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memset.S: Removed.
* sysdeps/sparc/sparc64/multiarch/Makefile: New file.
* sysdeps/sparc/sparc64/sparcv9v/memcpy.S: Move to...
* sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S: ...here.
* sysdeps/sparc/sparc64/sparcv9v2/memcpy.S: Move to...
* sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S: ...here.
* sysdeps/sparc/sparc64/sparcv9b/memcpy.S: Move to...
* sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: ...here.
* sysdeps/sparc/sparc64/sparcv9v/memset.S: Move to...
* sysdeps/sparc/sparc64/multiarch/memset-niagara1.S: ...here.
* sysdeps/sparc/sparc64/sparcv9v2/memset.S: Removed.
* sysdeps/sparc/sparc64/multiarch/memcpy.S: New file.
* sysdeps/sparc/sparc64/multiarch/memset.S: New file.

23 files changed:
ChangeLog
sysdeps/sparc/Makefile
sysdeps/sparc/elf/rtld-global-offsets.sym [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara1.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara2.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-ultra3.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara1.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv9/multiarch/memset.S [new file with mode: 0644]
sysdeps/sparc/sparc32/sparcv9/sparcv9b/memcpy.S [deleted file]
sysdeps/sparc/sparc32/sparcv9/sparcv9v/memcpy.S [deleted file]
sysdeps/sparc/sparc32/sparcv9/sparcv9v/memset.S [deleted file]
sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memcpy.S [deleted file]
sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memset.S [deleted file]
sysdeps/sparc/sparc64/multiarch/Makefile [new file with mode: 0644]
sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S [moved from sysdeps/sparc/sparc64/sparcv9v/memcpy.S with 98% similarity]
sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S [moved from sysdeps/sparc/sparc64/sparcv9v2/memcpy.S with 99% similarity]
sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S [moved from sysdeps/sparc/sparc64/sparcv9b/memcpy.S with 98% similarity]
sysdeps/sparc/sparc64/multiarch/memcpy.S [new file with mode: 0644]
sysdeps/sparc/sparc64/multiarch/memset-niagara1.S [moved from sysdeps/sparc/sparc64/sparcv9v/memset.S with 94% similarity]
sysdeps/sparc/sparc64/multiarch/memset.S [new file with mode: 0644]
sysdeps/sparc/sparc64/sparcv9v2/memset.S [deleted file]

index ed2409a539b049b66cb6d95d268f72be732f65a8..f21abc5c3e47f8f75362b66e45e766f6c066bc18 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
        * sysdeps/sparc/sparc64/sparcv9v/memcpy.S (bcopy, memmove): Likewise.
        * sysdeps/sparc/sparc64/sparcv9v2/memcpy.S (bcopy, memmove): Likewise.
 
+       * sysdeps/sparc/elf/rtld-global-offsets.sym: New file.
+       * sysdeps/sparc/Makefile (csu): Add rtld-global-offsets.sym to
+       gen-as-const-headers.
+       * sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile: New file.
+       * sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy.S: New file.
+       * sysdeps/sparc/sparc32/sparcv9/multiarch/memset.S: New file.
+       * sysdeps/sparc/sparc32/sparcv9/sparcv9b/memcpy.S: Move to...
+       * sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-ultra3.S: ...here.
+       * sysdeps/sparc/sparc32/sparcv9/sparcv9v/memcpy.S: Move to...
+       * sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara1.S: ...here.
+       * sysdeps/sparc/sparc32/sparcv9/sparcv9v/memset.S: Move to...
+       * sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara1.S: ...here.
+       * sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memcpy.S: Move to...
+       * sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara2.S: ...here.
+       * sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memset.S: Removed.
+       * sysdeps/sparc/sparc64/multiarch/Makefile: New file.
+       * sysdeps/sparc/sparc64/sparcv9v/memcpy.S: Move to...
+       * sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S: ...here.
+       * sysdeps/sparc/sparc64/sparcv9v2/memcpy.S: Move to...
+       * sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S: ...here.
+       * sysdeps/sparc/sparc64/sparcv9b/memcpy.S: Move to...
+       * sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: ...here.
+       * sysdeps/sparc/sparc64/sparcv9v/memset.S: Move to...
+       * sysdeps/sparc/sparc64/multiarch/memset-niagara1.S: ...here.
+       * sysdeps/sparc/sparc64/sparcv9v2/memset.S: Removed.
+       * sysdeps/sparc/sparc64/multiarch/memcpy.S: New file.
+       * sysdeps/sparc/sparc64/multiarch/memset.S: New file.
+
 2009-02-20  David S. Miller  <davem@davemloft.net>
 
        * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_runtime_setup):
index 73b926554e1cd93d2fc5548494c66e91762419fa..735e4a40db0129a6162129282909242d667e56c1 100644 (file)
@@ -10,3 +10,8 @@ endif
 ifeq ($(subdir),db2)
 CPPFLAGS += -DHAVE_SPINLOCKS=1 -DHAVE_ASSEM_SPARC_GCC=1
 endif
+
+ifeq ($(subdir),csu)
+# get offset to rtld_global._dl_hwcap
+gen-as-const-headers += rtld-global-offsets.sym
+endif
diff --git a/sysdeps/sparc/elf/rtld-global-offsets.sym b/sysdeps/sparc/elf/rtld-global-offsets.sym
new file mode 100644 (file)
index 0000000..ff4e97f
--- /dev/null
@@ -0,0 +1,7 @@
+#define SHARED 1
+
+#include <ldsodefs.h>
+
+#define rtld_global_ro_offsetof(mem) offsetof (struct rtld_global_ro, mem)
+
+RTLD_GLOBAL_RO_DL_HWCAP_OFFSET rtld_global_ro_offsetof (_dl_hwcap)
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile b/sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile
new file mode 100644 (file)
index 0000000..4d45042
--- /dev/null
@@ -0,0 +1,4 @@
+ifeq ($(subdir),string)
+sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \
+                  memset-niagara1
+endif
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara1.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara1.S
new file mode 100644 (file)
index 0000000..10aef85
--- /dev/null
@@ -0,0 +1,2 @@
+#define XCC icc
+#include <sparc64/multiarch/memcpy-niagara1.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara2.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara2.S
new file mode 100644 (file)
index 0000000..6b1bf6e
--- /dev/null
@@ -0,0 +1,2 @@
+#define XCC icc
+#include <sparc64/multiarch/memcpy-niagara2.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-ultra3.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-ultra3.S
new file mode 100644 (file)
index 0000000..77adf15
--- /dev/null
@@ -0,0 +1,2 @@
+#define XCC icc
+#include <sparc64/multiarch/memcpy-ultra3.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy.S
new file mode 100644 (file)
index 0000000..14df91e
--- /dev/null
@@ -0,0 +1,4 @@
+#define ASI_PNF     0x82
+#define ASI_BLK_P   0xf0
+#define XCC icc
+#include <sparc64/multiarch/memcpy.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara1.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara1.S
new file mode 100644 (file)
index 0000000..b432420
--- /dev/null
@@ -0,0 +1,2 @@
+#define XCC icc
+#include <sparc64/multiarch/memset-niagara1.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/memset.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/memset.S
new file mode 100644 (file)
index 0000000..8f82643
--- /dev/null
@@ -0,0 +1,4 @@
+#define ASI_PNF     0x82
+#define ASI_BLK_P   0xf0
+#define XCC icc
+#include <sparc64/multiarch/memset.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/sparcv9b/memcpy.S b/sysdeps/sparc/sparc32/sparcv9/sparcv9b/memcpy.S
deleted file mode 100644 (file)
index 61960dc..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define XCC icc
-#include <sparc64/sparcv9b/memcpy.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/sparcv9v/memcpy.S b/sysdeps/sparc/sparc32/sparcv9/sparcv9v/memcpy.S
deleted file mode 100644 (file)
index 4c05f57..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define XCC icc
-#include <sparc64/sparcv9v/memcpy.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/sparcv9v/memset.S b/sysdeps/sparc/sparc32/sparcv9/sparcv9v/memset.S
deleted file mode 100644 (file)
index 5e46c74..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define XCC icc
-#include <sparc64/sparcv9v/memset.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memcpy.S b/sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memcpy.S
deleted file mode 100644 (file)
index 7f46060..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define XCC icc
-#include <sparc64/sparcv9v2/memcpy.S>
diff --git a/sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memset.S b/sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memset.S
deleted file mode 100644 (file)
index 72de7bb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define XCC icc
-#include <sparc64/sparcv9v2/memset.S>
diff --git a/sysdeps/sparc/sparc64/multiarch/Makefile b/sysdeps/sparc/sparc64/multiarch/Makefile
new file mode 100644 (file)
index 0000000..4d45042
--- /dev/null
@@ -0,0 +1,4 @@
+ifeq ($(subdir),string)
+sysdep_routines += memcpy-ultra3 memcpy-niagara1 memcpy-niagara2 \
+                  memset-niagara1
+endif
similarity index 98%
rename from sysdeps/sparc/sparc64/sparcv9v/memcpy.S
rename to sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S
index 116c7113ffbd69ea91068294127b47e213128e58..6a78295e81af63560e0b03c63fc35d4621e0186e 100644 (file)
@@ -36,6 +36,8 @@
 #define XCC xcc
 #endif
 
+#if !defined NOT_IN_libc
+
        .register       %g2,#scratch
        .register       %g3,#scratch
        .register       %g6,#scratch
        .text
 
        .align          32
-ENTRY(memcpy)
-#ifndef USE_BPR
+ENTRY(__memcpy_niagara1)
+# ifndef USE_BPR
        srl             %o2, 0, %o2
-#endif
+# endif
 100:   /* %o0=dst, %o1=src, %o2=len */
        mov             %o0, %g5
        cmp             %o2, 0
@@ -335,6 +337,6 @@ ENTRY(memcpy)
        retl
         mov            %g5, %o0
 
-END(memcpy)
+END(__memcpy_niagara1)
 
-libc_hidden_builtin_def (memcpy)
+#endif
similarity index 99%
rename from sysdeps/sparc/sparc64/sparcv9v2/memcpy.S
rename to sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S
index 300b12f427125a93d496c5992c8f1d3a77b850ba..35f6989acabd8361e54d43985b4d193d48d4ac51 100644 (file)
        LOAD(ldd, base + 0x28, %x5); \
        LOAD(ldd, base + 0x30, %x6);
 
+#if !defined NOT_IN_libc
+
        .register       %g2,#scratch
        .register       %g3,#scratch
        .register       %g6,#scratch
        .text
 
        .align          32
-ENTRY(memcpy)
-#ifndef USE_BPR
+ENTRY(__memcpy_niagara2)
+# ifndef USE_BPR
        srl             %o2, 0, %o2
-#endif
+# endif
 100:   /* %o0=dst, %o1=src, %o2=len */
        mov             %o0, %g5
        cmp             %o2, 0
@@ -485,6 +487,6 @@ ENTRY(memcpy)
        retl
         mov            %g5, %o0
 
-END(memcpy)
+END(__memcpy_niagara2)
 
-libc_hidden_builtin_def (memcpy)
+#endif
similarity index 98%
rename from sysdeps/sparc/sparc64/sparcv9b/memcpy.S
rename to sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
index 389e09d8203385f9faeb802d0fcd1ce07d67ca28..34ca089f93354f6626d8bb1725fe094e3ae8f3f1 100644 (file)
@@ -31,6 +31,8 @@
 #define XCC xcc
 #endif
 
+#if !defined NOT_IN_libc
+
        .register       %g2,#scratch
        .register       %g3,#scratch
        .register       %g6,#scratch
@@ -52,7 +54,7 @@
         * of up to 2.4GB per second.
         */
        .align          32
-ENTRY(memcpy)
+ENTRY(__memcpy_ultra3)
 
 100: /* %o0=dst, %o1=src, %o2=len */
        mov             %o0, %g5
@@ -313,6 +315,6 @@ small_copy_unaligned:
        retl
         mov            %g5, %o0
 
-END(memcpy)
+END(__memcpy_ultra3)
 
-libc_hidden_builtin_def (memcpy)
+#endif
\ No newline at end of file
diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy.S b/sysdeps/sparc/sparc64/multiarch/memcpy.S
new file mode 100644 (file)
index 0000000..a708de1
--- /dev/null
@@ -0,0 +1,107 @@
+/* Multiple versions of memcpy
+   Copyright (C) 2010 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sysdep.h>
+#include <rtld-global-offsets.h>
+
+#if !defined NOT_IN_libc
+       .text
+ENTRY(memcpy)
+       .type   memcpy, @gnu_indirect_function
+# ifdef SHARED
+       mov     %o7, %o5
+       sethi   %hi(_GLOBAL_OFFSET_TABLE_-4), %o3
+       call    1f
+        or     %o3, %lo(_GLOBAL_OFFSET_TABLE_+4), %o3
+1:     add     %o7, %o3, %o3
+       mov     %o5, %o7
+       sethi   %hi(_rtld_global_ro), %o2
+       or      %o2, %lo(_rtld_global_ro), %o2
+#  ifdef __arch64__
+       ldx     [%o3 + %o2], %o2
+       ldx     [%o2 + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET], %o2
+#  else
+       ld      [%o3 + %o2], %o2
+       ld      [%o2 + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET + 4], %o2
+#  endif
+# else
+       set     _dl_hwcap, %o3
+#  ifdef __arch64__
+       ldx     [%o3], %o2
+#  else
+       ld      [%o3 + 4], %o2
+#  endif
+# endif
+       andcc   %o2, 0x80, %g0  ! HWCAP_SPARC_N2
+       be      1f
+        andcc  %o2, 0x40, %g0  ! HWCAP_SPARC_BLKINIT
+# 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  %o2, 0x20, %g0  ! HWCAP_SPARC_ULTRA3
+# 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)
+
+# undef libc_hidden_builtin_def
+/* IFUNC doesn't work with the hidden functions in a shared library.  */
+# define libc_hidden_builtin_def(name) \
+       .globl __GI_memcpy; __GI_memcpy = __memcpy_ultra1
+
+#define memcpy __memcpy_ultra1
+
+#endif
+
+#include "../memcpy.S"
similarity index 94%
rename from sysdeps/sparc/sparc64/sparcv9v/memset.S
rename to sysdeps/sparc/sparc64/multiarch/memset-niagara1.S
index 64817b8871ed4aae3c2711b51922be34ed7d862f..20ea056216ebd90d2e1032afd96d8cc10afa3069 100644 (file)
 #define XCC xcc
 #endif
 
+#if !defined NOT_IN_libc
+
        .register       %g2,#scratch
 
        .text
        .align          32
 
-ENTRY(memset)
+ENTRY(__memset_niagara1)
        /* %o0=buf, %o1=pat, %o2=len */
        and             %o1, 0xff, %o3
        mov             %o2, %o1
@@ -45,14 +47,14 @@ ENTRY(memset)
        sllx            %o2, 32, %g1
        ba,pt           %XCC, 1f
         or             %g1, %o2, %o2
-END(memset)
+END(__memset_niagara1)
 
-ENTRY(__bzero)
+ENTRY(__bzero_niagara1)
        clr             %o2
 1:
-#ifndef USE_BRP
+# ifndef USE_BRP
        srl             %o1, 0, %o1
-#endif
+# endif
        brz,pn          %o1, 90f
         mov            %o0, %o3
 
@@ -125,7 +127,6 @@ ENTRY(__bzero)
 90:
        retl
         mov            %o3, %o0
-END(__bzero)
+END(__bzero_niagara1)
 
-libc_hidden_builtin_def (memset)
-weak_alias (__bzero, bzero)
+#endif
diff --git a/sysdeps/sparc/sparc64/multiarch/memset.S b/sysdeps/sparc/sparc64/multiarch/memset.S
new file mode 100644 (file)
index 0000000..23e513f
--- /dev/null
@@ -0,0 +1,145 @@
+/* Multiple versions of memset and bzero
+   Copyright (C) 2010 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, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sysdep.h>
+#include <rtld-global-offsets.h>
+
+#if !defined NOT_IN_libc
+       .text
+ENTRY(memset)
+       .type   memset, @gnu_indirect_function
+# ifdef SHARED
+       mov     %o7, %o5
+       sethi   %hi(_GLOBAL_OFFSET_TABLE_-4), %o3
+       call    1f
+        or     %o3, %lo(_GLOBAL_OFFSET_TABLE_+4), %o3
+1:     add     %o7, %o3, %o3
+       mov     %o5, %o7
+       sethi   %hi(_rtld_global_ro), %o2
+       or      %o2, %lo(_rtld_global_ro), %o2
+#  ifdef __arch64__
+       ldx     [%o3 + %o2], %o2
+       ldx     [%o2 + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET], %o2
+#  else
+       ld      [%o3 + %o2], %o2
+       ld      [%o2 + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET + 4], %o2
+#  endif
+# else
+       set     _dl_hwcap, %o3
+#  ifdef __arch64__
+       ldx     [%o3], %o2
+#  else
+       ld      [%o3 + 4], %o2
+#  endif
+# endif
+       andcc   %o2, 0x40, %g0  ! HWCAP_SPARC_BLKINIT
+       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
+       mov     %o7, %o5
+       sethi   %hi(_GLOBAL_OFFSET_TABLE_-4), %o3
+       call    1f
+        or     %o3, %lo(_GLOBAL_OFFSET_TABLE_+4), %o3
+1:     add     %o7, %o3, %o3
+       mov     %o5, %o7
+       sethi   %hi(_rtld_global_ro), %o2
+       or      %o2, %lo(_rtld_global_ro), %o2
+#  ifdef __arch64__
+       ldx     [%o3 + %o2], %o2
+       ldx     [%o2 + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET], %o2
+#  else
+       ld      [%o3 + %o2], %o2
+       ld      [%o2 + RTLD_GLOBAL_RO_DL_HWCAP_OFFSET + 4], %o2
+#  endif
+# else
+       set     _dl_hwcap, %o3
+#  ifdef __arch64__
+       ldx     [%o3], %o2
+#  else
+       ld      [%o3 + 4], %o2
+#  endif
+# endif
+       andcc   %o2, 0x40, %g0  ! HWCAP_SPARC_BLKINIT
+       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(__memset_ultra1), %o1
+       xor     %o1, %gdop_lox10(__memset_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)
+
+# undef libc_hidden_builtin_def
+/* IFUNC doesn't work with the hidden functions in a shared library.  */
+# define libc_hidden_builtin_def(name) \
+       .globl __GI_memset; __GI_memset = __memset_ultra1
+
+#define memset __memset_ultra1
+#define __bzero __bzero_ultra1
+
+#endif
+
+#include "../memset.S"
diff --git a/sysdeps/sparc/sparc64/sparcv9v2/memset.S b/sysdeps/sparc/sparc64/sparcv9v2/memset.S
deleted file mode 100644 (file)
index 809d3ed..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <sparc64/sparcv9v/memset.S>
This page took 0.085868 seconds and 5 git commands to generate.