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