forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 <[email protected]> Signed-off-by: David S. Miller <[email protected]>
- Loading branch information
1 parent
4083162
commit 74cad25
Showing
1 changed file
with
14 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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> | ||
|
@@ -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 | ||
|
@@ -89,6 +92,7 @@ memset: | |
sub %o0, %o2, %o0 | ||
|
||
__bzero: | ||
clr %g4 | ||
mov %g0, %g3 | ||
1: | ||
cmp %o1, 7 | ||
|
@@ -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 | ||
|
@@ -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: | ||
|