]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libc/386/memcpy.s
Import sources from 2011-03-30 iso image - lib
[plan9front.git] / sys / src / libc / 386 / memcpy.s
1         TEXT    memcpy(SB), $0
2
3         MOVL    p1+0(FP), DI
4         MOVL    p2+4(FP), SI
5         MOVL    n+8(FP), BX
6         CMPL    BX, $0
7         JGE     ok
8         MOVL    $0, SI
9 ok:
10         CLD
11 /*
12  * check and set for backwards
13  */
14         CMPL    SI, DI
15         JLS     back
16 /*
17  * copy whole longs
18  */
19         MOVL    BX, CX
20         SHRL    $2, CX
21         REP;    MOVSL
22 /*
23  * copy the rest, by bytes
24  */
25         ANDL    $3, BX
26         MOVL    BX, CX
27         REP;    MOVSB
28
29         MOVL    p+0(FP),AX
30         RET
31 /*
32  * whole thing backwards has
33  * adjusted addresses
34  */
35 back:
36         ADDL    BX, DI
37         ADDL    BX, SI
38         SUBL    $4, DI
39         SUBL    $4, SI
40         STD
41 /*
42  * copy whole longs
43  */
44         MOVL    BX, CX
45         SHRL    $2, CX
46         ANDL    $3, BX
47         REP;    MOVSL
48 /*
49  * copy the rest, by bytes
50  */
51         ADDL    $3, DI
52         ADDL    $3, SI
53         MOVL    BX, CX
54         REP;    MOVSB
55
56         MOVL    p+0(FP),AX
57         RET