This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.15-521-g88d85d4
- From: davem at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 29 Mar 2012 06:56:01 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.15-521-g88d85d4
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 88d85d4f001fac0fd7ef4e3d05ca8a7d50b0c98f (commit)
from e5aa83e16d02bc8f1b1a352f83e12f3f14c4d4ac (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=88d85d4f001fac0fd7ef4e3d05ca8a7d50b0c98f
commit 88d85d4f001fac0fd7ef4e3d05ca8a7d50b0c98f
Author: David S. Miller <davem@davemloft.net>
Date: Wed Mar 28 22:35:26 2012 -0700
Optimize mempcpy on sparc.
* sysdeps/sparc/sparc32/memcpy.S: Implement mempcpy using a stub
that branches into memcpy.
* sysdeps/sparc/sparc64/memcpy.S: Likewise.
* sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S: Likewise.
* sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S: Likewise.
* sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: Likewise.
* sysdeps/sparc/sparc64/multiarch/memcpy.S: Add mempcpy multiarch
bits.
* sysdeps/sparc/sparc64/rtld-memcpy.c: Include generic mempcpy
implementation too.
* sysdeps/sparc/mempcpy.S: New file.
diff --git a/ChangeLog b/ChangeLog
index 555c395..23b7290 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2012-03-28 David S. Miller <davem@davemloft.net>
+ * sysdeps/sparc/sparc32/memcpy.S: Implement mempcpy using a stub
+ that branches into memcpy.
+ * sysdeps/sparc/sparc64/memcpy.S: Likewise.
+ * sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S: Likewise.
+ * sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S: Likewise.
+ * sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: Likewise.
+ * sysdeps/sparc/sparc64/multiarch/memcpy.S: Add mempcpy multiarch
+ bits.
+ * sysdeps/sparc/sparc64/rtld-memcpy.c: Include generic mempcpy
+ implementation too.
+ * sysdeps/sparc/mempcpy.S: New file.
+
* sysdeps/sparc/sparc64/multiarch/memcpy.S: Provide a hidden def to
the IFUNC routine in the libc case.
* sysdeps/sparc/sparc64/multiarch/memcpy.S: Likewise.
diff --git a/sysdeps/sparc/mempcpy.S b/sysdeps/sparc/mempcpy.S
new file mode 100644
index 0000000..4c98013
--- /dev/null
+++ b/sysdeps/sparc/mempcpy.S
@@ -0,0 +1 @@
+/* mempcpy is in memcpy.S */
diff --git a/sysdeps/sparc/sparc32/memcpy.S b/sysdeps/sparc/sparc32/memcpy.S
index a36f1d6..82fa6d1 100644
--- a/sysdeps/sparc/sparc32/memcpy.S
+++ b/sysdeps/sparc/sparc32/memcpy.S
@@ -104,11 +104,17 @@
std %t2, [%dst + offset + offset2 + 0x08];
.text
- .align 4
+ENTRY(__mempcpy)
+ add %o0, %o2, %g1
+ ba 101f
+ st %g1, [%sp + 64]
+END(__mempcpy)
+ .align 4
ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */
- sub %o0, %o1, %o4
st %o0, [%sp + 64]
+101:
+ sub %o0, %o1, %o4
9: andcc %o4, 3, %o5
0: bne 86f
cmp %o2, 15
@@ -641,3 +647,7 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */
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/memcpy.S b/sysdeps/sparc/sparc64/memcpy.S
index a77c4e4..668ebec 100644
--- a/sysdeps/sparc/sparc64/memcpy.S
+++ b/sysdeps/sparc/sparc64/memcpy.S
@@ -374,19 +374,24 @@ ENTRY(__memcpy_large)
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 Group */
+ srl %o2, 0, %o2 /* IEU1 */
#endif
brz,pn %o2, 209b /* CTI Group */
- mov %o0, %g4 /* IEU0 */
-218: cmp %o2, 15 /* IEU1 Group */
- bleu,pn %xcc, 208b /* CTI */
- cmp %o2, (64 * 6) /* IEU1 Group */
- bgeu,pn %xcc, 200b /* CTI */
- andcc %o0, 7, %g2 /* IEU1 Group */
+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 */
@@ -569,3 +574,7 @@ ENTRY(memcpy)
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/multiarch/memcpy-niagara1.S b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S
index 8bada0e..6ba1b0c 100644
--- a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S
+++ b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S
@@ -43,13 +43,19 @@
.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
-100: /* %o0=dst, %o1=src, %o2=len */
- mov %o0, %g5
cmp %o2, 0
be,pn %XCC, 85f
218: or %o0, %o1, %o3
diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S
index ccbb025..0e9442d 100644
--- a/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S
+++ b/sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S
@@ -145,13 +145,19 @@
.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
-100: /* %o0=dst, %o1=src, %o2=len */
- mov %o0, %g5
cmp %o2, 0
be,pn %XCC, 85f
218: or %o0, %o1, %o3
diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S b/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
index 7e21665..0784ba9 100644
--- a/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
+++ b/sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
@@ -38,6 +38,11 @@
.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
@@ -57,6 +62,7 @@ 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
diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy.S b/sysdeps/sparc/sparc64/multiarch/memcpy.S
index 0f3751e..20c72d9 100644
--- a/sysdeps/sparc/sparc64/multiarch/memcpy.S
+++ b/sysdeps/sparc/sparc64/multiarch/memcpy.S
@@ -72,12 +72,72 @@ ENTRY(memcpy)
mov %o1, %o0
END(memcpy)
+ENTRY(__mempcpy)
+ .type __mempcpy, @gnu_indirect_function
+# ifdef SHARED
+ SETUP_PIC_REG_LEAF(o3, o5)
+# endif
+ andcc %o0, HWCAP_SPARC_N2, %g0
+ 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
diff --git a/sysdeps/sparc/sparc64/rtld-memcpy.c b/sysdeps/sparc/sparc64/rtld-memcpy.c
index 5e50e6e..b1b0647 100644
--- a/sysdeps/sparc/sparc64/rtld-memcpy.c
+++ b/sysdeps/sparc/sparc64/rtld-memcpy.c
@@ -1 +1,2 @@
#include <string/memcpy.c>
+#include <string/mempcpy.c>
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 12 ++++
sysdeps/sparc/mempcpy.S | 1 +
sysdeps/sparc/sparc32/memcpy.S | 14 ++++-
sysdeps/sparc/sparc64/memcpy.S | 23 ++++++---
sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S | 10 +++-
sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S | 10 +++-
sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S | 6 ++
sysdeps/sparc/sparc64/multiarch/memcpy.S | 60 +++++++++++++++++++++
sysdeps/sparc/sparc64/rtld-memcpy.c | 1 +
9 files changed, 124 insertions(+), 13 deletions(-)
create mode 100644 sysdeps/sparc/mempcpy.S
hooks/post-receive
--
GNU C Library master sources