提交 a52312b8 编写于 作者: D David S. Miller

sparc32: Correct the return value of memcpy.

Properly return the original destination buffer pointer.
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
Tested-by: NKjetil Oftedal <oftedal@gmail.com>
上级 21f74d36
......@@ -13,14 +13,6 @@
.align 4; \
x:
/* In kernel these functions don't return a value.
* One should use macros in asm/string.h for that purpose.
* We return 0, so that bugs are more apparent.
*/
#define SETUP_RETL
#define RETL_INSN clr %o0
/* Both these macros have to start with exactly the same insn */
#define MOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \
ldd [%src + (offset) + 0x00], %t0; \
......@@ -154,7 +146,7 @@ FUNC(__memmove)
#endif
FUNC(memmove)
cmp %o0, %o1
SETUP_RETL
mov %o0, %g7
bleu 9f
sub %o0, %o1, %o4
......@@ -178,7 +170,7 @@ FUNC(memmove)
sub %o0, 1, %o0
retl
RETL_INSN
mov %g7, %o0
/* NOTE: This code is executed just for the cases,
where %src (=%o1) & 3 is != 0.
......@@ -212,7 +204,7 @@ FUNC(memmove)
FUNC(memcpy) /* %o0=dst %o1=src %o2=len */
sub %o0, %o1, %o4
SETUP_RETL
mov %o0, %g7
9:
andcc %o4, 3, %o5
0:
......@@ -308,7 +300,7 @@ FUNC(memcpy) /* %o0=dst %o1=src %o2=len */
stb %g2, [%o0]
1:
retl
RETL_INSN
mov %g7, %o0
82: /* ldd_std */
MOVE_BIGALIGNCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5)
......@@ -373,7 +365,7 @@ FUNC(memcpy) /* %o0=dst %o1=src %o2=len */
stb %g2, [%o0]
1:
retl
RETL_INSN
mov %g7, %o0
86: /* non_aligned */
cmp %o2, 6
......@@ -498,7 +490,7 @@ FUNC(memcpy) /* %o0=dst %o1=src %o2=len */
stb %g2, [%i0 + 4]
1:
ret
restore %g0, %g0, %o0
restore %g7, %g0, %o0
88: /* short_end */
......@@ -529,7 +521,7 @@ FUNC(memcpy) /* %o0=dst %o1=src %o2=len */
stb %g2, [%o0]
1:
retl
RETL_INSN
mov %g7, %o0
90: /* short_aligned_end */
bne 88b
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册