diff options
| -rw-r--r-- | arch/powerpc/lib/memcpy_64.S | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S index fd66acfd3e3e..7173ba98f427 100644 --- a/arch/powerpc/lib/memcpy_64.S +++ b/arch/powerpc/lib/memcpy_64.S | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | .align 7 | 12 | .align 7 |
| 13 | _GLOBAL(memcpy) | 13 | _GLOBAL(memcpy) |
| 14 | std r3,48(r1) /* save destination pointer for return value */ | ||
| 14 | mtcrf 0x01,r5 | 15 | mtcrf 0x01,r5 |
| 15 | cmpldi cr1,r5,16 | 16 | cmpldi cr1,r5,16 |
| 16 | neg r6,r3 # LS 3 bits = # bytes to 8-byte dest bdry | 17 | neg r6,r3 # LS 3 bits = # bytes to 8-byte dest bdry |
| @@ -38,7 +39,7 @@ _GLOBAL(memcpy) | |||
| 38 | stdu r9,16(r3) | 39 | stdu r9,16(r3) |
| 39 | bdnz 1b | 40 | bdnz 1b |
| 40 | 3: std r8,8(r3) | 41 | 3: std r8,8(r3) |
| 41 | beqlr | 42 | beq 3f |
| 42 | addi r3,r3,16 | 43 | addi r3,r3,16 |
| 43 | ld r9,8(r4) | 44 | ld r9,8(r4) |
| 44 | .Ldo_tail: | 45 | .Ldo_tail: |
| @@ -53,7 +54,8 @@ _GLOBAL(memcpy) | |||
| 53 | 2: bf cr7*4+3,3f | 54 | 2: bf cr7*4+3,3f |
| 54 | rotldi r9,r9,8 | 55 | rotldi r9,r9,8 |
| 55 | stb r9,0(r3) | 56 | stb r9,0(r3) |
| 56 | 3: blr | 57 | 3: ld r3,48(r1) /* return dest pointer */ |
| 58 | blr | ||
| 57 | 59 | ||
| 58 | .Lsrc_unaligned: | 60 | .Lsrc_unaligned: |
| 59 | srdi r6,r5,3 | 61 | srdi r6,r5,3 |
| @@ -115,7 +117,7 @@ _GLOBAL(memcpy) | |||
| 115 | 5: srd r12,r9,r11 | 117 | 5: srd r12,r9,r11 |
| 116 | or r12,r8,r12 | 118 | or r12,r8,r12 |
| 117 | std r12,24(r3) | 119 | std r12,24(r3) |
| 118 | beqlr | 120 | beq 4f |
| 119 | cmpwi cr1,r5,8 | 121 | cmpwi cr1,r5,8 |
| 120 | addi r3,r3,32 | 122 | addi r3,r3,32 |
| 121 | sld r9,r9,r10 | 123 | sld r9,r9,r10 |
| @@ -167,4 +169,5 @@ _GLOBAL(memcpy) | |||
| 167 | 3: bf cr7*4+3,4f | 169 | 3: bf cr7*4+3,4f |
| 168 | lbz r0,0(r4) | 170 | lbz r0,0(r4) |
| 169 | stb r0,0(r3) | 171 | stb r0,0(r3) |
| 170 | 4: blr | 172 | 4: ld r3,48(r1) /* return dest pointer */ |
| 173 | blr | ||
