Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a52312b8 authored by David S. Miller's avatar David S. Miller
Browse files

sparc32: Correct the return value of memcpy.



Properly return the original destination buffer pointer.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Tested-by: default avatarKjetil Oftedal <oftedal@gmail.com>
parent 21f74d36
Loading
Loading
Loading
Loading
+7 −15
Original line number Diff line number Diff line
@@ -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