Commit 582b1199 authored by Paul Mackerras's avatar Paul Mackerras Committed by Adrian Bunk

[POWERPC] Fix return value from memcpy

As pointed out by Herbert Xu <herbert@gondor.apana.org.au>, our
memcpy implementation didn't return the destination pointer as its
return value, and there is code in the kernel that expects that.
This fixes it.
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
parent e1dc7abb
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
.align 7 .align 7
_GLOBAL(memcpy) _GLOBAL(memcpy)
std r3,48(r1) /* save destination pointer for return value */
mtcrf 0x01,r5 mtcrf 0x01,r5
cmpldi cr1,r5,16 cmpldi cr1,r5,16
neg r6,r3 # LS 3 bits = # bytes to 8-byte dest bdry neg r6,r3 # LS 3 bits = # bytes to 8-byte dest bdry
...@@ -40,7 +41,7 @@ _GLOBAL(memcpy) ...@@ -40,7 +41,7 @@ _GLOBAL(memcpy)
stdu r9,16(r3) stdu r9,16(r3)
bdnz 1b bdnz 1b
3: std r8,8(r3) 3: std r8,8(r3)
beqlr beq 3f
addi r3,r3,16 addi r3,r3,16
ld r9,8(r4) ld r9,8(r4)
.Ldo_tail: .Ldo_tail:
...@@ -55,7 +56,8 @@ _GLOBAL(memcpy) ...@@ -55,7 +56,8 @@ _GLOBAL(memcpy)
2: bf cr7*4+3,3f 2: bf cr7*4+3,3f
rotldi r9,r9,8 rotldi r9,r9,8
stb r9,0(r3) stb r9,0(r3)
3: blr 3: ld r3,48(r1) /* return dest pointer */
blr
.Lsrc_unaligned: .Lsrc_unaligned:
srdi r6,r5,3 srdi r6,r5,3
...@@ -117,7 +119,7 @@ _GLOBAL(memcpy) ...@@ -117,7 +119,7 @@ _GLOBAL(memcpy)
5: srd r12,r9,r11 5: srd r12,r9,r11
or r12,r8,r12 or r12,r8,r12
std r12,24(r3) std r12,24(r3)
beqlr beq 4f
cmpwi cr1,r5,8 cmpwi cr1,r5,8
addi r3,r3,32 addi r3,r3,32
sld r9,r9,r10 sld r9,r9,r10
...@@ -169,4 +171,5 @@ _GLOBAL(memcpy) ...@@ -169,4 +171,5 @@ _GLOBAL(memcpy)
3: bf cr7*4+3,4f 3: bf cr7*4+3,4f
lbz r0,0(r4) lbz r0,0(r4)
stb r0,0(r3) stb r0,0(r3)
4: blr 4: ld r3,48(r1) /* return dest pointer */
blr
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment