aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/lib
diff options
context:
space:
mode:
authorAndreas Larsson <andreas@gaisler.com>2014-08-29 11:08:21 -0400
committerDavid S. Miller <davem@davemloft.net>2014-09-09 19:38:10 -0400
commit74cad25c076a2f5253312c2fe82d1a4daecc1323 (patch)
treedbf521e559c8e31c91c08f33e6eb3ca65f9d9a24 /arch/sparc/lib
parent408316258521168614bfb4da0e070490d3e65a17 (diff)
sparc: Let memset return the address argument
This makes memset follow the standard (instead of returning 0 on success). This is needed when certain versions of gcc optimizes around memset calls and assume that the address argument is preserved in %o0. Signed-off-by: Andreas Larsson <andreas@gaisler.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/lib')
-rw-r--r--arch/sparc/lib/memset.S18
1 files changed, 14 insertions, 4 deletions
diff --git a/arch/sparc/lib/memset.S b/arch/sparc/lib/memset.S
index 99c017be8719..f75e6906df14 100644
--- a/arch/sparc/lib/memset.S
+++ b/arch/sparc/lib/memset.S
@@ -3,8 +3,9 @@
3 * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) 3 * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
4 * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) 4 * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
5 * 5 *
6 * Returns 0, if ok, and number of bytes not yet set if exception 6 * Calls to memset returns initial %o0. Calls to bzero returns 0, if ok, and
7 * occurs and we were called as clear_user. 7 * number of bytes not yet set if exception occurs and we were called as
8 * clear_user.
8 */ 9 */
9 10
10#include <asm/ptrace.h> 11#include <asm/ptrace.h>
@@ -65,6 +66,8 @@ __bzero_begin:
65 .globl __memset_start, __memset_end 66 .globl __memset_start, __memset_end
66__memset_start: 67__memset_start:
67memset: 68memset:
69 mov %o0, %g1
70 mov 1, %g4
68 and %o1, 0xff, %g3 71 and %o1, 0xff, %g3
69 sll %g3, 8, %g2 72 sll %g3, 8, %g2
70 or %g3, %g2, %g3 73 or %g3, %g2, %g3
@@ -89,6 +92,7 @@ memset:
89 sub %o0, %o2, %o0 92 sub %o0, %o2, %o0
90 93
91__bzero: 94__bzero:
95 clr %g4
92 mov %g0, %g3 96 mov %g0, %g3
931: 971:
94 cmp %o1, 7 98 cmp %o1, 7
@@ -151,8 +155,8 @@ __bzero:
151 bne,a 8f 155 bne,a 8f
152 EX(stb %g3, [%o0], and %o1, 1) 156 EX(stb %g3, [%o0], and %o1, 1)
1538: 1578:
154 retl 158 b 0f
155 clr %o0 159 nop
1567: 1607:
157 be 13b 161 be 13b
158 orcc %o1, 0, %g0 162 orcc %o1, 0, %g0
@@ -164,6 +168,12 @@ __bzero:
164 bne 8b 168 bne 8b
165 EX(stb %g3, [%o0 - 1], add %o1, 1) 169 EX(stb %g3, [%o0 - 1], add %o1, 1)
1660: 1700:
171 andcc %g4, 1, %g0
172 be 5f
173 nop
174 retl
175 mov %g1, %o0
1765:
167 retl 177 retl
168 clr %o0 178 clr %o0
169__memset_end: 179__memset_end: