Skip to content

Commit

Permalink
sparc: Let memset return the address argument
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
andreas-gaisler authored and davem330 committed Sep 9, 2014
1 parent 4083162 commit 74cad25
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions arch/sparc/lib/memset.S
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
* Copyright (C) 1996,1997 Jakub Jelinek ([email protected])
* Copyright (C) 1996 David S. Miller ([email protected])
*
* Returns 0, if ok, and number of bytes not yet set if exception
* occurs and we were called as clear_user.
* Calls to memset returns initial %o0. Calls to bzero returns 0, if ok, and
* number of bytes not yet set if exception occurs and we were called as
* clear_user.
*/

#include <asm/ptrace.h>
Expand Down Expand Up @@ -65,6 +66,8 @@ __bzero_begin:
.globl __memset_start, __memset_end
__memset_start:
memset:
mov %o0, %g1
mov 1, %g4
and %o1, 0xff, %g3
sll %g3, 8, %g2
or %g3, %g2, %g3
Expand All @@ -89,6 +92,7 @@ memset:
sub %o0, %o2, %o0

__bzero:
clr %g4
mov %g0, %g3
1:
cmp %o1, 7
Expand Down Expand Up @@ -151,8 +155,8 @@ __bzero:
bne,a 8f
EX(stb %g3, [%o0], and %o1, 1)
8:
retl
clr %o0
b 0f
nop
7:
be 13b
orcc %o1, 0, %g0
Expand All @@ -164,6 +168,12 @@ __bzero:
bne 8b
EX(stb %g3, [%o0 - 1], add %o1, 1)
0:
andcc %g4, 1, %g0
be 5f
nop
retl
mov %g1, %o0
5:
retl
clr %o0
__memset_end:
Expand Down

0 comments on commit 74cad25

Please sign in to comment.