Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[linux-2.6] / arch / sparc / lib / memmove.S
1 /* memmove.S: Simple memmove implementation.
2  *
3  * Copyright (C) 1997, 2004 David S. Miller (davem@redhat.com)
4  * Copyright (C) 1996, 1997, 1998, 1999 Jakub Jelinek (jj@ultra.linux.cz)
5  */
6
7         .text
8         .align          32
9         .globl          memmove
10         .type           memmove,#function
11 memmove:                /* o0=dst o1=src o2=len */
12         mov             %o0, %g1
13         cmp             %o0, %o1
14         bleu,pt         %xcc, memcpy
15          add            %o1, %o2, %g7
16         cmp             %g7, %o0
17         bleu,pt         %xcc, memcpy
18          add            %o0, %o2, %o5
19         sub             %g7, 1, %o1
20
21         sub             %o5, 1, %o0
22 1:      ldub            [%o1], %g7
23         subcc           %o2, 1, %o2
24         sub             %o1, 1, %o1
25         stb             %g7, [%o0]
26         bne,pt          %icc, 1b
27          sub            %o0, 1, %o0
28
29         retl
30          mov            %g1, %o0
31         .size           memmove, .-memmove