Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 |