|
|
1.1 root 1: |
2:
3: | quickmove(char *dst, char *src, long nbytes):
4:
5: | quickly copy "nbytes" bytes from src to dst. Assumes that both
6:
7: | src and dst are word aligned.
8:
9: |
10:
11: .text
12:
13: .globl _quickmove
14:
15: _quickmove:
16:
17: movel sp@(4), a0 | get dst
18:
19: movel sp@(8), a1 | get src
20:
21: movel sp@(12), d0 | get nbytes
22:
23: lsrl #8, d0 |
24:
25: lsrl #1, d0 | d0 = nbytes / 512
26:
27: subql #1, d0 | prepare for dbra loop
28:
29: bmi Leftover | if < 0, skip
30:
31: moveml d1-d7/a2-a6, sp@- | save regs
32:
33: L1:
34:
35: moveml a1@+, d1-d7/a2-a6 | read 12*4 = 48 bytes
36:
37: moveml d1-d7/a2-a6, a0@ |
38:
39: moveml a1@+, d1-d7/a2-a6 | 2nd read
40:
41: moveml d1-d7/a2-a6, a0@(48) |
42:
43: moveml a1@+, d1-d7/a2-a6 | 3rd read
44:
45: moveml d1-d7/a2-a6, a0@(96) |
46:
47: moveml a1@+, d1-d7/a2-a6 | 4th read
48:
49: moveml d1-d7/a2-a6, a0@(144) |
50:
51: moveml a1@+, d1-d7/a2-a6 | 5th
52:
53: moveml d1-d7/a2-a6, a0@(192) |
54:
55: moveml a1@+, d1-d7/a2-a6 | 6th
56:
57: moveml d1-d7/a2-a6, a0@(240) |
58:
59: moveml a1@+, d1-d7/a2-a6 | 7th
60:
61: moveml d1-d7/a2-a6, a0@(288) |
62:
63: moveml a1@+, d1-d7/a2-a6 | 8th
64:
65: moveml d1-d7/a2-a6, a0@(336) |
66:
67: moveml a1@+, d1-d7/a2-a6 | 9th
68:
69: moveml d1-d7/a2-a6, a0@(384) |
70:
71: moveml a1@+, d1-d7/a2-a6 | 10th
72:
73: moveml d1-d7/a2-a6, a0@(432) | At this point, 480 bytes done
74:
75: moveml a1@+, d1-d7/a2 | Only do 32 more bytes
76:
77: moveml d1-d7/a2, a0@(480) | for a total of 512
78:
79:
80:
81: lea a0@(512), a0
82:
83: subql #1, d0
84:
85: bge L1
86:
87:
88:
89: moveml sp@+, d1-d7/a2-a6 | pop registers
90:
91:
92:
93: Leftover: | do the remaining bytes
94:
95: movel sp@(12), d1
96:
97: andl #0x01ff, d1 | d1 = nbytes % 512
98:
99: subql #1, d1 | prepare for dbra loop
100:
101: bmi Ldone
102:
103: L2:
104:
105: moveb a1@+, a0@+
106:
107: dbra d1, L2
108:
109: Ldone:
110:
111: rts | return
112:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.