]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libc/68020/memcpy.s
vt: but not too fast :-)
[plan9front.git] / sys / src / libc / 68020 / memcpy.s
1         TEXT    memcpy(SB), $0
2
3         MOVL    n+8(FP),R0
4         BEQ     return
5         BGT     ok
6         MOVL    0, R0
7 ok:
8         MOVL    s1+0(FP),A2
9         MOVL    s2+4(FP),A1
10
11         CMPL    A2,A1
12         BHI     back
13
14 /*
15  * speed depends on source allignment
16  * destination allignment is secondary
17  * byte-at-a-time foreward copy to
18  * get source (A1) alligned.
19  */
20 f1:
21         MOVL    A1, R1
22         ANDL    $3, R1
23         BEQ     f2
24         SUBL    $1, R0
25         BLT     return
26         MOVB    (A1)+, (A2)+
27         BRA     f1
28 /*
29  * quad-long-at-a-time forward copy
30  */
31 f2:
32         SUBL    $16, R0
33         BLT     f3
34         MOVL    (A1)+, (A2)+
35         MOVL    (A1)+, (A2)+
36         MOVL    (A1)+, (A2)+
37         MOVL    (A1)+, (A2)+
38         BRA     f2
39
40 /*
41  * cleanup byte-at-a-time
42  */
43 f3:
44         ADDL    $15, R0
45         BLT     return
46 f4:
47         MOVB    (A1)+, (A2)+
48         SUBL    $1, R0
49         BGE     f4
50         BRA     return
51
52 return:
53         MOVL    s1+0(FP),R0
54         RTS
55
56 /*
57  * everything the same, but
58  * copy backwards
59  */
60 back:
61         ADDL    R0, A1
62         ADDL    R0, A2
63
64 /*
65  * byte-at-a-time backward copy to
66  * get source (A1) alligned.
67  */
68 b1:
69         MOVL    A1, R1
70         ANDL    $3, R1
71         BEQ     b2
72         SUBL    $1, R0
73         BLT     return
74         MOVB    -(A1), -(A2)
75         BRA     b1
76 /*
77  * quad-long-at-a-time backward copy
78  */
79 b2:
80         SUBL    $16, R0
81         BLT     b3
82         MOVL    -(A1), -(A2)
83         MOVL    -(A1), -(A2)
84         MOVL    -(A1), -(A2)
85         MOVL    -(A1), -(A2)
86         BRA     b2
87
88 /*
89  * cleanup byte-at-a-time backward
90  */
91 b3:
92         ADDL    $15, R0
93         BLT     return
94 b4:
95         MOVB    -(A1), -(A2)
96         SUBL    $1, R0
97         BGE     b4
98         BRA     return