2 AHI - Hardware independent audio subsystem
3 Copyright (C) 1996-2005 Martin Blom <martin@blom.org>
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
15 You should have received a copy of the GNU Library General Public
16 License along with this library; if not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330, Cambridge,
21 /******************************************************************************
22 ** Add-Routines ***************************************************************
23 ******************************************************************************/
27 LONG Samples 4(sp) long Samples
28 LONG ScaleLeft 8(sp) long ScaleLeft
29 LONG ScaleRight 12(sp) long ScaleRight
30 LONG *StartPointLeft 16(sp) long StartPointLeft
31 LONG *StartPointRight 20(sp) long StartPointRight
32 void *Src 24(sp) long Src
33 void **Dst 28(sp) long Dst
34 LONG FirstOffsetI 32(sp) long FirstOffsetI
35 Fixed64 Add 36(sp) long long Add
36 Fixed64 *Offset 44(sp) long Offset
37 BOOL StopAtZero 50(sp) word StopAtZero
41 .set Samples, 11*4 + 4
42 .set ScaleLeft, 11*4 + 8
43 .set ScaleRight, 11*4 + 12
44 .set StartPointLeft, 11*4 + 16
45 .set StartPointRight,11*4 + 20
48 .set FirstOffsetI, 11*4 + 32
51 .set Offset, 11*4 + 44
52 .set StopAtZero, 11*4 + 50
76 .globl _AddLofiByteMono
78 .globl _AddLofiByteStereo
80 .globl _AddLofiBytesMono
81 .globl _AddBytesStereo
82 .globl _AddLofiBytesStereo
84 .globl _AddLofiWordMono
86 .globl _AddLofiWordStereo
88 .globl _AddLofiWordsMono
89 .globl _AddWordsStereo
90 .globl _AddLofiWordsStereo
92 .globl _AddLofiByteMonoB
93 .globl _AddByteStereoB
94 .globl _AddLofiByteStereoB
96 .globl _AddLofiBytesMonoB
97 .globl _AddBytesStereoB
98 .globl _AddLofiBytesStereoB
100 .globl _AddLofiWordMonoB
101 .globl _AddWordStereoB
102 .globl _AddLofiWordStereoB
103 .globl _AddWordsMonoB
104 .globl _AddLofiWordsMonoB
105 .globl _AddWordsStereoB
106 .globl _AddLofiWordsStereoB
110 move.w d5
,d1
/* AddI<65535 */
112 move.w d6
,d1
/* d1=Add<<16 */
114 add.w d1
,d4
/* New OffsetF (X) */
116 swap.w d1
/* d1=d2:d1>>16 */
117 addx.
l d1
,d3
/* New OffsetI */
120 mulu.
l d0
,d1
/* OffsI*Samples */
122 add.l d1
,d3
/* New OffsetI (1) */
123 mulu.
l d0
,d2
/* OffsF*Samples... */
124 add.w d2
,d4
/* New OffsetF (X) */
126 swap.w d2
/* ...>>16 */
127 addx.
l d2
,d3
/* New OffsetI (2) */
130 add.l d0
,a1
/* Update dst pointer */
136 move.w d5
,d1
/* AddI<65535 */
138 move.w d6
,d1
/* d1=Add<<16 */
140 add.w d1
,d4
/* New OffsetF (X) */
142 swap.w d1
/* d1=d2:d1>>16 */
143 addx.
l d1
,d3
/* New OffsetI */
146 mulu.
l d0
,d1
/* OffsI*Samples */
148 add.l d1
,d3
/* New OffsetI (1) */
149 mulu.
l d0
,d2
/* OffsF*Samples... */
150 add.w d2
,d4
/* New OffsetF (X) */
152 swap.w d2
/* ...>>16 */
153 addx.
l d2
,d3
/* New OffsetI (2) */
156 add.l d0
,a1
/* Update dst pointer */
162 move.w d5
,d1
/* AddI<65535 */
164 move.w d6
,d1
/* d1=Add<<16 */
166 sub.w d1
,d4
/* New OffsetF (X) */
168 swap.w d1
/* d1=d2:d1>>16 */
169 subx.
l d1
,d3
/* New OffsetI */
172 mulu.
l d0
,d1
/* OffsI*Samples */
174 sub.l d1
,d3
/* New OffsetI (1) */
175 mulu.
l d0
,d2
/* OffsF*Samples... */
176 sub.w d2
,d4
/* New OffsetF (X) */
178 swap.w d2
/* ...>>16 */
179 subx.
l d2
,d3
/* New OffsetI (2) */
182 add.l d0
,a1
/* Update dst pointer */
188 move.w d5
,d1
/* AddI<65535 */
190 move.w d6
,d1
/* d1=Add<<16 */
192 sub.w d1
,d4
/* New OffsetF (X) */
194 swap.w d1
/* d1=d2:d1>>16 */
195 subx.
l d1
,d3
/* New OffsetI */
198 mulu.
l d0
,d1
/* OffsI*Samples */
200 sub.l d1
,d3
/* New OffsetI (1) */
201 mulu.
l d0
,d2
/* OffsF*Samples... */
202 sub.w d2
,d4
/* New OffsetF (X) */
204 swap.w d2
/* ...>>16 */
205 subx.
l d2
,d3
/* New OffsetI (2) */
208 add.l d0
,a1
/* Update dst pointer */
214 movem.
l d2-d7
/a2-a6
,-(sp
)
215 move.
l (Samples
,sp
),d0
/* counter */
216 move.
l (ScaleLeft
,sp
),d1
217 move.
l (ScaleRight
,sp
),d2
220 move.
l (FirstOffsetI
,sp
),a2
221 move.
l (AddI,sp
),d5
/* Integer add */
223 move.w
(AddF
,sp
),d6
/* Fraction add (upper 16 bits) */
224 move.
l ([Offset
,sp
],0),d3
/* Integer offset */
226 move.w
([Offset
,sp
],4),d4
/* Fraction offset (upper 16 bits) */
234 sub.l (Samples
,sp
),d0
235 neg.l d0
/* Return Samples - d0 */
236 movem.
l (sp
)+,d2-d7
/a2-a6
240 ###############################################################################
245 tst.w
(StopAtZero
,sp
)
252 0: /* .next_sampleZ */
255 1: /* .first_sampleZ */
258 move.
l ([StartPointLeft
,sp
]),a3
261 move.
b (-1,a0
,d3.
l),d7
263 move.w d7
,a3
/* sign extend */
264 4: /* .got_sampleZ */
265 move.
b (0,a0
,d3.
l),d7
281 5: /* .lastpoint_gtZ */
284 6: /* .lastpoint_checkedZ */
285 move.
l a3
,a5
/* update lastsample */
295 0: /* .next_sample */
298 2: /* .first_sample */
301 move.
l ([StartPointLeft
,sp
]),a3
304 move.
b (-1,a0
,d3.
l),d7
306 move.w d7
,a3
/* sign extend */
308 move.
b (0,a0
,d3.
l),d7
327 moveq
#0,d5 /* Prevent the last add */
330 move.
b (0,a0
,d3.
l),d7
/* Fetch last endpoint */
333 move.
l d7
,([StartPointLeft
,sp
])
338 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
339 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
352 tst.w
(StopAtZero
,sp
)
359 0: /* .next_sampleZ */
362 1: /* .first_sampleZ */
363 move.
b (0,a0
,d3.
l),d7
372 5: /* .lastpoint_gtZ */
375 6: /* .lastpoint_checkedZ */
376 move.
l d7
,a5
/* update lastsample */
385 0: /* .next_sample */
388 2: /* .first_sample */
389 move.
b (0,a0
,d3.
l),d7
400 moveq
#0,d5 /* Prevent the last add */
406 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
407 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
414 ###############################################################################
419 tst.w
(StopAtZero
,sp
)
428 0: /* .next_sampleZ */
431 1: /* .first_sampleZ */
434 move.
l ([StartPointLeft
,sp
]),a3
435 move.
l ([StartPointRight
,sp
]),a4
438 move.
b (-2,a0
,d3.
l*2),d7
440 move.w d7
,a3
/* sign extend */
441 move.
b (-1,a0
,d3.
l*2),d7
443 move.w d7
,a4
/* sign extend */
444 4: /* .got_sampleZ */
445 move.
b (0,a0
,d3.
l*2),d7
455 move.
b (1,a0
,d3.
l*2),d7
471 5: /* .lastpoint_gtZ */
474 6: /* .lastpoint_checkedZ */
475 move.
l a3
,a5
/* update lastsample */
483 5: /* .lastpoint_gtZ */
486 6: /* .lastpoint_checkedZ */
487 move.
l a4
,a6
/* update lastsample */
500 0: /* .next_sample */
503 2: /* .first_sample */
506 move.
l ([StartPointLeft
,sp
]),a3
507 move.
l ([StartPointRight
,sp
]),a4
510 move.
b (-2,a0
,d3.
l*2),d7
512 move.w d7
,a3
/* sign extend */
513 move.
b (-1,a0
,d3.
l*2),d7
515 move.w d7
,a4
/* sign extend */
517 move.
b (0,a0
,d3.
l*2),d7
527 move.
b (1,a0
,d3.
l*2),d7
549 moveq
#0,d5 /* Prevent the last add */
552 move.
b (0,a0
,d3.
l*2),d7
/* Fetch last endpoint */
555 move.
l d7
,([StartPointLeft
,sp
])
557 move.
b (1,a0
,d3.
l*2),d7
/* Fetch last endpoint */
560 move.
l d7
,([StartPointRight
,sp
])
565 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
566 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
578 tst.w
(StopAtZero
,sp
)
587 0: /* .next_sampleZ */
590 1: /* .first_sampleZ */
591 move.
b (0,a0
,d3.
l*2),d7
593 move.w d7
,a3
/* sign extend */
595 move.
b (1,a0
,d3.
l*2),d7
597 move.w d7
,a4
/* sign extend */
605 5: /* .lastpoint_gtZ */
608 6: /* .lastpoint_checkedZ */
609 move.
l d7
,a5
/* update lastsample */
617 5: /* .lastpoint_gtZ */
620 6: /* .lastpoint_checkedZ */
621 move.
l a4
,a6
/* update lastsample */
634 0: /* .next_sample */
637 2: /* .first_sample */
638 move.
b (0,a0
,d3.
l*2),d7
640 move.w d7
,a3
/* sign extend */
642 move.
b (1,a0
,d3.
l*2),d7
644 move.w d7
,a4
/* sign extend */
658 moveq
#0,d5 /* Prevent the last add */
664 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
665 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
672 ###############################################################################
677 tst.w
(StopAtZero
,sp
)
686 0: /* .next_sampleZ */
689 1: /* .first_sampleZ */
692 move.
l ([StartPointLeft
,sp
]),a3
695 move.
b (-1,a0
,d3.
l),d7
697 move.w d7
,a3
/* sign extend */
698 4: /* .got_sampleZ */
699 move.
b (0,a0
,d3.
l),d7
715 5: /* .lastpoint_gtZ */
718 6: /* .lastpoint_checkedZ */
719 move.
l a3
,a5
/* update lastsample */
732 0: /* .next_sample */
735 2: /* .first_sample */
738 move.
l ([StartPointLeft
,sp
]),a3
741 move.
b (-1,a0
,d3.
l),d7
743 move.w d7
,a3
/* sign extend */
745 move.
b (0,a0
,d3.
l),d7
767 moveq
#0,d5 /* Prevent the last add */
770 move.
b (0,a0
,d3.
l),d7
/* Fetch last endpoint */
773 move.
l d7
,([StartPointLeft
,sp
])
778 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
779 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
791 tst.w
(StopAtZero
,sp
)
800 0: /* .next_sampleZ */
803 1: /* .first_sampleZ */
804 move.
b (0,a0
,d3.
l),d7
806 move.w d7
,a3
/* sign extend */
814 5: /* .lastpoint_gtZ */
817 6: /* .lastpoint_checkedZ */
818 move.
l a3
,a5
/* update lastsample */
831 0: /* .next_sample */
834 2: /* .first_sample */
836 move.
b (0,a0
,d3.
l),d7
838 move.w d7
,a3
/* sign extend */
852 moveq
#0,d5 /* Prevent the last add */
858 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
859 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
866 ###############################################################################
871 tst.w
(StopAtZero
,sp
)
880 0: /* .next_sampleZ */
883 1: /* .first_sampleZ */
886 move.
l ([StartPointLeft
,sp
]),a3
887 move.
l ([StartPointRight
,sp
]),a4
890 move.
b (-2,a0
,d3.
l*2),d7
892 move.w d7
,a3
/* sign extend */
893 move.
b (-1,a0
,d3.
l*2),d7
895 move.w d7
,a4
/* sign extend */
896 4: /* .got_sampleZ */
897 move.
b (0,a0
,d3.
l*2),d7
907 move.
b (1,a0
,d3.
l*2),d7
923 5: /* .lastpoint_gtZ */
926 6: /* .lastpoint_checkedZ */
927 move.
l a3
,a5
/* update lastsample */
935 5: /* .lastpoint_gtZ */
938 6: /* .lastpoint_checkedZ */
939 move.
l a4
,a6
/* update lastsample */
952 0: /* .next_sample */
955 2: /* .first_sample */
958 move.
l ([StartPointLeft
,sp
]),a3
959 move.
l ([StartPointRight
,sp
]),a4
962 move.
b (-2,a0
,d3.
l*2),d7
964 move.w d7
,a3
/* sign extend */
965 move.
b (-1,a0
,d3.
l*2),d7
967 move.w d7
,a4
/* sign extend */
969 move.
b (0,a0
,d3.
l*2),d7
979 move.
b (1,a0
,d3.
l*2),d7
1001 moveq
#0,d5 /* Prevent the last add */
1004 move.
b (0,a0
,d3.
l*2),d7
/* Fetch last endpoint */
1007 move.
l d7
,([StartPointLeft
,sp
])
1009 move.
b (1,a0
,d3.
l*2),d7
/* Fetch last endpoint */
1012 move.
l d7
,([StartPointRight
,sp
])
1017 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
1018 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
1020 move.
l a1
,([Dst,sp
])
1025 _AddLofiBytesStereo
:
1030 tst.w
(StopAtZero
,sp
)
1036 bsr AddSilenceStereo
1039 0: /* .next_sampleZ */
1042 1: /* .first_sampleZ */
1043 move.
b (0,a0
,d3.
l*2),d7
1045 move.w d7
,a3
/* sign extend */
1047 move.
b (1,a0
,d3.
l*2),d7
1049 move.w d7
,a4
/* sign extend */
1057 5: /* .lastpoint_gtZ */
1060 6: /* .lastpoint_checkedZ */
1061 move.
l a3
,a5
/* update lastsample */
1069 5: /* .lastpoint_gtZ */
1072 6: /* .lastpoint_checkedZ */
1073 move.
l a4
,a6
/* update lastsample */
1086 0: /* .next_sample */
1089 2: /* .first_sample */
1090 move.
b (0,a0
,d3.
l*2),d7
1092 move.w d7
,a3
/* sign extend */
1094 move.
b (1,a0
,d3.
l*2),d7
1096 move.w d7
,a4
/* sign extend */
1110 moveq
#0,d5 /* Prevent the last add */
1116 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
1117 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
1119 move.
l a1
,([Dst,sp
])
1124 ###############################################################################
1129 tst.w
(StopAtZero
,sp
)
1136 0: /* .next_sampleZ */
1139 1: /* .first_sampleZ */
1142 move.
l ([StartPointLeft
,sp
]),a3
1144 3: /* .not_firstZ */
1145 move.w
(-2,a0
,d3.
l*2),a3
/* sign extend */
1146 4: /* .got_sampleZ */
1147 move.w
(0,a0
,d3.
l*2),d7
1162 5: /* .lastpoint_gtZ */
1165 6: /* .lastpoint_checkedZ */
1166 move.
l a3
,a5
/* update lastsample */
1176 0: /* .next_sample */
1179 2: /* .first_sample */
1182 move.
l ([StartPointLeft
,sp
]),a3
1185 move.w
(-2,a0
,d3.
l*2),a3
/* sign extend */
1186 4: /* .got_sample */
1187 move.w
(0,a0
,d3.
l*2),d7
1205 moveq
#0,d5 /* Prevent the last add */
1208 move.w
(0,a0
,d3.
l*2),d7
/* Fetch last endpoint */
1210 move.
l d7
,([StartPointLeft
,sp
])
1215 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
1216 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
1218 move.
l a1
,([Dst,sp
])
1226 tst.w
(StopAtZero
,sp
)
1233 0: /* .next_sampleZ */
1236 1: /* .first_sampleZ */
1237 move.w
(0,a0
,d3.
l*2),d7
1246 5: /* .lastpoint_gtZ */
1249 6: /* .lastpoint_checkedZ */
1250 move.
l d7
,a5
/* update lastsample */
1260 0: /* .next_sample */
1263 2: /* .first_sample */
1264 move.w
(0,a0
,d3.
l*2),d7
1276 moveq
#0,d5 /* Prevent the last add */
1282 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
1283 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
1285 move.
l a1
,([Dst,sp
])
1290 ###############################################################################
1295 tst.w
(StopAtZero
,sp
)
1304 0: /* .next_sampleZ */
1307 1: /* .first_sampleZ */
1310 move.
l ([StartPointLeft
,sp
]),a3
1311 move.
l ([StartPointRight
,sp
]),a4
1313 3: /* .not_firstZ */
1314 move.w
(-4,a0
,d3.
l*4),a3
/* sign extend */
1315 move.w
(-2,a0
,d3.
l*4),a4
/* sign extend */
1316 4: /* .got_sampleZ */
1317 move.w
(0,a0
,d3.
l*4),d7
1326 move.w
(2,a0
,d3.
l*4),d7
1341 5: /* .lastpoint_gtZ */
1344 6: /* .lastpoint_checkedZ */
1345 move.
l a3
,a5
/* update lastsample */
1353 5: /* .lastpoint_gtZ */
1356 6: /* .lastpoint_checkedZ */
1357 move.
l a4
,a6
/* update lastsample */
1370 0: /* .next_sample */
1373 2: /* .first_sample */
1376 move.
l ([StartPointLeft
,sp
]),a3
1377 move.
l ([StartPointRight
,sp
]),a4
1380 move.w
(-4,a0
,d3.
l*4),a3
/* sign extend */
1381 move.w
(-2,a0
,d3.
l*4),a4
/* sign extend */
1382 4: /* .got_sample */
1383 move.w
(0,a0
,d3.
l*4),d7
1392 move.w
(2,a0
,d3.
l*4),d7
1413 moveq
#0,d5 /* Prevent the last add */
1416 move.w
(0,a0
,d3.
l*4),d7
/* Fetch last endpoint */
1418 move.
l d7
,([StartPointLeft
,sp
])
1420 move.w
(2,a0
,d3.
l*4),d7
/* Fetch last endpoint */
1422 move.
l d7
,([StartPointRight
,sp
])
1427 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
1428 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
1430 move.
l a1
,([Dst,sp
])
1438 tst.w
(StopAtZero
,sp
)
1447 0: /* .next_sampleZ */
1450 1: /* .first_sampleZ */
1451 move.w
(0,a0
,d3.
l*4),a3
/* sign extend */
1453 move.w
(2,a0
,d3.
l*4),a4
/* sign extend */
1461 5: /* .lastpoint_gtZ */
1464 6: /* .lastpoint_checkedZ */
1465 move.
l a3
,a5
/* update lastsample */
1473 5: /* .lastpoint_gtZ */
1476 6: /* .lastpoint_checkedZ */
1477 move.
l a4
,a6
/* update lastsample */
1492 0: /* .next_sample */
1495 2: /* .first_sample */
1496 move.w
(0,a0
,d3.
l*4),a3
/* sign extend */
1498 move.w
(2,a0
,d3.
l*4),a4
/* sign extend */
1514 moveq
#0,d5 /* Prevent the last add */
1520 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
1521 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
1523 move.
l a1
,([Dst,sp
])
1528 ###############################################################################
1533 tst.w
(StopAtZero
,sp
)
1539 bsr AddSilenceStereo
1542 0: /* .next_sampleZ */
1545 1: /* .first_sampleZ */
1548 move.
l ([StartPointLeft
,sp
]),a3
1550 3: /* .not_firstZ */
1551 move.w
(-2,a0
,d3.
l*2),a3
/* sign extend */
1552 4: /* .got_sampleZ */
1553 move.w
(0,a0
,d3.
l*2),d7
1568 5: /* .lastpoint_gtZ */
1571 6: /* .lastpoint_checkedZ */
1572 move.
l a3
,a5
/* update lastsample */
1585 0: /* .next_sample */
1588 2: /* .first_sample */
1591 move.
l ([StartPointLeft
,sp
]),a3
1594 move.w
(-2,a0
,d3.
l*2),a3
/* sign extend */
1595 4: /* .got_sample */
1596 move.w
(0,a0
,d3.
l*2),d7
1617 moveq
#0,d5 /* Prevent the last add */
1620 move.w
(0,a0
,d3.
l*2),d7
/* Fetch last endpoint */
1622 move.
l d7
,([StartPointLeft
,sp
])
1627 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
1628 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
1630 move.
l a1
,([Dst,sp
])
1638 tst.w
(StopAtZero
,sp
)
1644 bsr AddSilenceStereo
1647 0: /* .next_sampleZ */
1650 1: /* .first_sampleZ */
1651 move.w
(0,a0
,d3.
l*2),a3
/* sign extend */
1659 5: /* .lastpoint_gtZ */
1662 6: /* .lastpoint_checkedZ */
1663 move.
l a3
,a5
/* update lastsample */
1678 0: /* .next_sample */
1681 2: /* .first_sample */
1682 move.w
(0,a0
,d3.
l*2),a3
/* sign extend */
1698 moveq
#0,d5 /* Prevent the last add */
1704 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
1705 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
1707 move.
l a1
,([Dst,sp
])
1712 ###############################################################################
1717 tst.w
(StopAtZero
,sp
)
1723 bsr AddSilenceStereo
1726 0: /* .next_sampleZ */
1729 1: /* .first_sampleZ */
1732 move.
l ([StartPointLeft
,sp
]),a3
1733 move.
l ([StartPointRight
,sp
]),a4
1735 3: /* .not_firstZ */
1736 move.w
(-4,a0
,d3.
l*4),a3
/* sign extend */
1737 move.w
(-2,a0
,d3.
l*4),a4
/* sign extend */
1738 4: /* .got_sampleZ */
1739 move.w
(0,a0
,d3.
l*4),d7
1748 move.w
(2,a0
,d3.
l*4),d7
1763 5: /* .lastpoint_gtZ */
1766 6: /* .lastpoint_checkedZ */
1767 move.
l a3
,a5
/* update lastsample */
1775 5: /* .lastpoint_gtZ */
1778 6: /* .lastpoint_checkedZ */
1779 move.
l a4
,a6
/* update lastsample */
1792 0: /* .next_sample */
1795 2: /* .first_sample */
1798 move.
l ([StartPointLeft
,sp
]),a3
1799 move.
l ([StartPointRight
,sp
]),a4
1802 move.w
(-4,a0
,d3.
l*4),a3
/* sign extend */
1803 move.w
(-2,a0
,d3.
l*4),a4
/* sign extend */
1804 4: /* .got_sample */
1805 move.w
(0,a0
,d3.
l*4),d7
1814 move.w
(2,a0
,d3.
l*4),d7
1835 moveq
#0,d5 /* Prevent the last add */
1838 move.w
(0,a0
,d3.
l*4),d7
/* Fetch last endpoint */
1840 move.
l d7
,([StartPointLeft
,sp
])
1842 move.w
(2,a0
,d3.
l*4),d7
/* Fetch last endpoint */
1844 move.
l d7
,([StartPointRight
,sp
])
1849 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
1850 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
1852 move.
l a1
,([Dst,sp
])
1857 _AddLofiWordsStereo
:
1860 tst.w
(StopAtZero
,sp
)
1866 bsr AddSilenceStereo
1869 0: /* .next_sampleZ */
1872 1: /* .first_sampleZ */
1873 move.w
(0,a0
,d3.
l*4),a3
/* sign extend */
1875 move.w
(2,a0
,d3.
l*4),a4
/* sign extend */
1883 5: /* .lastpoint_gtZ */
1886 6: /* .lastpoint_checkedZ */
1887 move.
l a3
,a5
/* update lastsample */
1895 5: /* .lastpoint_gtZ */
1898 6: /* .lastpoint_checkedZ */
1899 move.
l a4
,a6
/* update lastsample */
1914 0: /* .next_sample */
1917 2: /* .first_sample */
1918 move.w
(0,a0
,d3.
l*4),a3
/* sign extend */
1920 move.w
(2,a0
,d3.
l*4),a4
/* sign extend */
1936 moveq
#0,d5 /* Prevent the last add */
1942 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
1943 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
1945 move.
l a1
,([Dst,sp
])
1950 ###############################################################################
1956 tst.w
(StopAtZero
,sp
)
1963 0: /* .next_sampleZ */
1966 1: /* .first_sampleZ */
1969 move.
l ([StartPointLeft
,sp
]),a3
1971 3: /* .not_firstZ */
1972 move.
b (1,a0
,d3.
l),d7
1974 move.w d7
,a3
/* sign extend */
1975 4: /* .got_sampleZ */
1976 move.
b (0,a0
,d3.
l),d7
1992 5: /* .lastpoint_gtZ */
1995 6: /* .lastpoint_checkedZ */
1996 move.
l a3
,a5
/* update lastsample */
2006 0: /* .next_sample */
2009 2: /* .first_sample */
2012 move.
l ([StartPointLeft
,sp
]),a3
2015 move.
b (1,a0
,d3.
l),d7
2017 move.w d7
,a3
/* sign extend */
2018 4: /* .got_sample */
2019 move.
b (0,a0
,d3.
l),d7
2038 moveq
#0,d5 /* Prevent the last add */
2041 move.
b (0,a0
,d3.
l),d7
/* Fetch last endpoint */
2044 move.
l d7
,([StartPointLeft
,sp
])
2050 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
2051 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
2053 move.
l a1
,([Dst,sp
])
2064 tst.w
(StopAtZero
,sp
)
2071 0: /* .next_sampleZ */
2074 1: /* .first_sampleZ */
2075 move.
b (0,a0
,d3.
l),d7
2084 5: /* .lastpoint_gtZ */
2087 6: /* .lastpoint_checkedZ */
2088 move.
l d7
,a5
/* update lastsample */
2097 0: /* .next_sample */
2100 2: /* .first_sample */
2101 move.
b (0,a0
,d3.
l),d7
2112 moveq
#0,d5 /* Prevent the last add */
2119 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
2120 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
2122 move.
l a1
,([Dst,sp
])
2127 ###############################################################################
2133 tst.w
(StopAtZero
,sp
)
2140 0: /* .next_sampleZ */
2143 1: /* .first_sampleZ */
2146 move.
l ([StartPointLeft
,sp
]),a3
2147 move.
l ([StartPointRight
,sp
]),a4
2149 3: /* .not_firstZ */
2150 move.
b (2,a0
,d3.
l*2),d7
2152 move.w d7
,a3
/* sign extend */
2153 move.
b (3,a0
,d3.
l*2),d7
2155 move.w d7
,a4
/* sign extend */
2156 4: /* .got_sampleZ */
2157 move.
b (0,a0
,d3.
l*2),d7
2167 move.
b (1,a0
,d3.
l*2),d7
2183 5: /* .lastpoint_gtZ */
2186 6: /* .lastpoint_checkedZ */
2187 move.
l a3
,a5
/* update lastsample */
2195 5: /* .lastpoint_gtZ */
2198 6: /* .lastpoint_checkedZ */
2199 move.
l a4
,a6
/* update lastsample */
2212 0: /* .next_sample */
2215 2: /* .first_sample */
2218 move.
l ([StartPointLeft
,sp
]),a3
2219 move.
l ([StartPointRight
,sp
]),a4
2222 move.
b (2,a0
,d3.
l*2),d7
2224 move.w d7
,a3
/* sign extend */
2225 move.
b (3,a0
,d3.
l*2),d7
2227 move.w d7
,a4
/* sign extend */
2228 4: /* .got_sample */
2229 move.
b (0,a0
,d3.
l*2),d7
2239 move.
b (1,a0
,d3.
l*2),d7
2261 moveq
#0,d5 /* Prevent the last add */
2264 move.
b (0,a0
,d3.
l*2),d7
/* Fetch last endpoint */
2267 move.
l d7
,([StartPointLeft
,sp
])
2269 move.
b (1,a0
,d3.
l*2),d7
/* Fetch last endpoint */
2272 move.
l d7
,([StartPointRight
,sp
])
2278 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
2279 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
2281 move.
l a1
,([Dst,sp
])
2292 tst.w
(StopAtZero
,sp
)
2299 0: /* .next_sampleZ */
2302 1: /* .first_sampleZ */
2303 move.
b (0,a0
,d3.
l*2),d7
2305 move.w d7
,a3
/* sign extend */
2307 move.
b (1,a0
,d3.
l*2),d7
2309 move.w d7
,a4
/* sign extend */
2317 5: /* .lastpoint_gtZ */
2320 6: /* .lastpoint_checkedZ */
2321 move.
l a3
,a5
/* update lastsample */
2329 5: /* .lastpoint_gtZ */
2332 6: /* .lastpoint_checkedZ */
2333 move.
l a4
,a6
/* update lastsample */
2346 0: /* .next_sample */
2349 2: /* .first_sample */
2350 move.
b (0,a0
,d3.
l*2),d7
2352 move.w d7
,a3
/* sign extend */
2354 move.
b (1,a0
,d3.
l*2),d7
2356 move.w d7
,a4
/* sign extend */
2370 moveq
#0,d5 /* Prevent the last add */
2377 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
2378 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
2380 move.
l a1
,([Dst,sp
])
2385 ###############################################################################
2391 tst.w
(StopAtZero
,sp
)
2397 bsr AddSilenceStereoB
2400 0: /* .next_sampleZ */
2403 1: /* .first_sampleZ */
2406 move.
l ([StartPointLeft
,sp
]),a3
2408 3: /* .not_firstZ */
2409 move.
b (1,a0
,d3.
l),d7
2411 move.w d7
,a3
/* sign extend */
2412 4: /* .got_sampleZ */
2413 move.
b (0,a0
,d3.
l),d7
2429 5: /* .lastpoint_gtZ */
2432 6: /* .lastpoint_checkedZ */
2433 move.
l a3
,a5
/* update lastsample */
2446 0: /* .next_sample */
2449 2: /* .first_sample */
2452 move.
l ([StartPointLeft
,sp
]),a3
2455 move.
b (1,a0
,d3.
l),d7
2457 move.w d7
,a3
/* sign extend */
2458 4: /* .got_sample */
2459 move.
b (0,a0
,d3.
l),d7
2481 moveq
#0,d5 /* Prevent the last add */
2484 move.
b (0,a0
,d3.
l),d7
/* Fetch last endpoint */
2487 move.
l d7
,([StartPointLeft
,sp
])
2493 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
2494 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
2496 move.
l a1
,([Dst,sp
])
2501 _AddLofiByteStereoB
:
2507 tst.w
(StopAtZero
,sp
)
2513 bsr AddSilenceStereoB
2516 0: /* .next_sampleZ */
2519 1: /* .first_sampleZ */
2520 move.
b (0,a0
,d3.
l),d7
2522 move.w d7
,a3
/* sign extend */
2530 5: /* .lastpoint_gtZ */
2533 6: /* .lastpoint_checkedZ */
2534 move.
l a3
,a5
/* update lastsample */
2546 0: /* .next_sample */
2549 2: /* .first_sample */
2550 move.
b (0,a0
,d3.
l),d7
2552 move.w d7
,a3
/* sign extend */
2565 moveq
#0,d5 /* Prevent the last add */
2572 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
2573 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
2575 move.
l a1
,([Dst,sp
])
2580 ###############################################################################
2586 tst.w
(StopAtZero
,sp
)
2592 bsr AddSilenceStereoB
2595 0: /* .next_sampleZ */
2598 1: /* .first_sampleZ */
2601 move.
l ([StartPointLeft
,sp
]),a3
2602 move.
l ([StartPointRight
,sp
]),a4
2604 3: /* .not_firstZ */
2605 move.
b (2,a0
,d3.
l*2),d7
2607 move.w d7
,a3
/* sign extend */
2608 move.
b (3,a0
,d3.
l*2),d7
2610 move.w d7
,a4
/* sign extend */
2611 4: /* .got_sampleZ */
2612 move.
b (0,a0
,d3.
l*2),d7
2622 move.
b (1,a0
,d3.
l*2),d7
2638 5: /* .lastpoint_gtZ */
2641 6: /* .lastpoint_checkedZ */
2642 move.
l a3
,a5
/* update lastsample */
2650 5: /* .lastpoint_gtZ */
2653 6: /* .lastpoint_checkedZ */
2654 move.
l a4
,a6
/* update lastsample */
2667 0: /* .next_sample */
2670 2: /* .first_sample */
2673 move.
l ([StartPointLeft
,sp
]),a3
2674 move.
l ([StartPointRight
,sp
]),a4
2677 move.
b (2,a0
,d3.
l*2),d7
2679 move.w d7
,a3
/* sign extend */
2680 move.
b (3,a0
,d3.
l*2),d7
2682 move.w d7
,a4
/* sign extend */
2683 4: /* .got_sample */
2684 move.
b (0,a0
,d3.
l*2),d7
2694 move.
b (1,a0
,d3.
l*2),d7
2716 moveq
#0,d5 /* Prevent the last add */
2719 move.
b (0,a0
,d3.
l*2),d7
/* Fetch last endpoint */
2722 move.
l d7
,([StartPointLeft
,sp
])
2724 move.
b (1,a0
,d3.
l*2),d7
/* Fetch last endpoint */
2727 move.
l d7
,([StartPointRight
,sp
])
2733 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
2734 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
2736 move.
l a1
,([Dst,sp
])
2741 _AddLofiBytesStereoB
:
2747 tst.w
(StopAtZero
,sp
)
2753 bsr AddSilenceStereoB
2756 0: /* .next_sampleZ */
2759 1: /* .first_sampleZ */
2760 move.
b (0,a0
,d3.
l*2),d7
2762 move.w d7
,a3
/* sign extend */
2764 move.
b (1,a0
,d3.
l*2),d7
2766 move.w d7
,a4
/* sign extend */
2774 5: /* .lastpoint_gtZ */
2777 6: /* .lastpoint_checkedZ */
2778 move.
l a3
,a5
/* update lastsample */
2786 5: /* .lastpoint_gtZ */
2789 6: /* .lastpoint_checkedZ */
2790 move.
l a4
,a6
/* update lastsample */
2803 0: /* .next_sample */
2806 2: /* .first_sample */
2807 move.
b (0,a0
,d3.
l*2),d7
2809 move.w d7
,a3
/* sign extend */
2811 move.
b (1,a0
,d3.
l*2),d7
2813 move.w d7
,a4
/* sign extend */
2827 moveq
#0,d5 /* Prevent the last add */
2834 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
2835 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
2837 move.
l a1
,([Dst,sp
])
2842 ###############################################################################
2848 tst.w
(StopAtZero
,sp
)
2855 0: /* .next_sampleZ */
2858 1: /* .first_sampleZ */
2861 move.
l ([StartPointLeft
,sp
]),a3
2863 3: /* .not_firstZ */
2864 move.w
(2,a0
,d3.
l*2),a3
/* sign extend */
2865 4: /* .got_sampleZ */
2866 move.w
(0,a0
,d3.
l*2),d7
2881 5: /* .lastpoint_gtZ */
2884 6: /* .lastpoint_checkedZ */
2885 move.
l a3
,a5
/* update lastsample */
2895 0: /* .next_sample */
2898 2: /* .first_sample */
2901 move.
l ([StartPointLeft
,sp
]),a3
2904 move.w
(2,a0
,d3.
l*2),a3
/* sign extend */
2905 4: /* .got_sample */
2906 move.w
(0,a0
,d3.
l*2),d7
2924 moveq
#0,d5 /* Prevent the last add */
2927 move.w
(0,a0
,d3.
l*2),d7
/* Fetch last endpoint */
2929 move.
l d7
,([StartPointLeft
,sp
])
2935 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
2936 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
2938 move.
l a1
,([Dst,sp
])
2947 tst.w
(StopAtZero
,sp
)
2954 0: /* .next_sampleZ */
2957 1: /* .first_sampleZ */
2958 move.w
(0,a0
,d3.
l*2),a3
/* sign extend */
2966 5: /* .lastpoint_gtZ */
2969 6: /* .lastpoint_checkedZ */
2970 move.
l a3
,a5
/* update lastsample */
2981 0: /* .next_sample */
2984 2: /* .first_sample */
2985 move.w
(0,a0
,d3.
l*2),a3
/* sign extend */
2997 moveq
#0,d5 /* Prevent the last add */
3004 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
3005 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
3007 move.
l a1
,([Dst,sp
])
3012 ###############################################################################
3018 tst.w
(StopAtZero
,sp
)
3027 0: /* .next_sampleZ */
3030 1: /* .first_sampleZ */
3033 move.
l ([StartPointLeft
,sp
]),a3
3034 move.
l ([StartPointRight
,sp
]),a4
3036 3: /* .not_firstZ */
3037 move.w
(4,a0
,d3.
l*4),a3
/* sign extend */
3038 move.w
(6,a0
,d3.
l*4),a4
/* sign extend */
3039 4: /* .got_sampleZ */
3040 move.w
(0,a0
,d3.
l*4),d7
3049 move.w
(2,a0
,d3.
l*4),d7
3064 5: /* .lastpoint_gtZ */
3067 6: /* .lastpoint_checkedZ */
3068 move.
l a3
,a5
/* update lastsample */
3076 5: /* .lastpoint_gtZ */
3079 6: /* .lastpoint_checkedZ */
3080 move.
l a4
,a6
/* update lastsample */
3093 0: /* .next_sample */
3096 2: /* .first_sample */
3099 move.
l ([StartPointLeft
,sp
]),a3
3100 move.
l ([StartPointRight
,sp
]),a4
3103 move.w
(4,a0
,d3.
l*4),a3
/* sign extend */
3104 move.w
(6,a0
,d3.
l*4),a4
/* sign extend */
3105 4: /* .got_sample */
3106 move.w
(0,a0
,d3.
l*4),d7
3115 move.w
(2,a0
,d3.
l*4),d7
3136 moveq
#0,d5 /* Prevent the last add */
3139 move.w
(0,a0
,d3.
l*4),d7
/* Fetch last endpoint */
3141 move.
l d7
,([StartPointLeft
,sp
])
3143 move.w
(2,a0
,d3.
l*4),d7
/* Fetch last endpoint */
3145 move.
l d7
,([StartPointRight
,sp
])
3151 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
3152 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
3154 move.
l a1
,([Dst,sp
])
3163 tst.w
(StopAtZero
,sp
)
3172 0: /* .next_sampleZ */
3175 1: /* .first_sampleZ */
3176 move.w
(0,a0
,d3.
l*4),a3
/* sign extend */
3178 move.w
(2,a0
,d3.
l*4),a4
/* sign extend */
3186 5: /* .lastpoint_gtZ */
3189 6: /* .lastpoint_checkedZ */
3190 move.
l a3
,a5
/* update lastsample */
3198 5: /* .lastpoint_gtZ */
3201 6: /* .lastpoint_checkedZ */
3202 move.
l a4
,a6
/* update lastsample */
3217 0: /* .next_sample */
3220 2: /* .first_sample */
3221 move.w
(0,a0
,d3.
l*4),a3
/* sign extend */
3223 move.w
(2,a0
,d3.
l*4),a4
/* sign extend */
3239 moveq
#0,d5 /* Prevent the last add */
3246 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
3247 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
3249 move.
l a1
,([Dst,sp
])
3254 ###############################################################################
3260 tst.w
(StopAtZero
,sp
)
3266 bsr AddSilenceStereoB
3269 0: /* .next_sampleZ */
3272 1: /* .first_sampleZ */
3275 move.
l ([StartPointLeft
,sp
]),a3
3277 3: /* .not_firstZ */
3278 move.w
(2,a0
,d3.
l*2),a3
/* sign extend */
3279 4: /* .got_sampleZ */
3280 move.w
(0,a0
,d3.
l*2),d7
3295 5: /* .lastpoint_gtZ */
3298 6: /* .lastpoint_checkedZ */
3299 move.
l a3
,a5
/* update lastsample */
3312 0: /* .next_sample */
3315 2: /* .first_sample */
3318 move.
l ([StartPointLeft
,sp
]),a3
3321 move.w
(2,a0
,d3.
l*2),a3
/* sign extend */
3322 4: /* .got_sample */
3323 move.w
(0,a0
,d3.
l*2),d7
3344 moveq
#0,d5 /* Prevent the last add */
3347 move.w
(0,a0
,d3.
l*2),d7
/* Fetch last endpoint */
3349 move.
l d7
,([StartPointLeft
,sp
])
3355 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
3356 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
3358 move.
l a1
,([Dst,sp
])
3363 _AddLofiWordStereoB
:
3367 tst.w
(StopAtZero
,sp
)
3373 bsr AddSilenceStereoB
3376 0: /* .next_sampleZ */
3379 1: /* .first_sampleZ */
3380 move.w
(0,a0
,d3.
l*2),a3
/* sign extend */
3388 5: /* .lastpoint_gtZ */
3391 6: /* .lastpoint_checkedZ */
3392 move.
l a3
,a5
/* update lastsample */
3407 0: /* .next_sample */
3410 2: /* .first_sample */
3411 move.w
(0,a0
,d3.
l*2),a3
/* sign extend */
3427 moveq
#0,d5 /* Prevent the last add */
3434 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
3435 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
3437 move.
l a1
,([Dst,sp
])
3442 ###############################################################################
3448 tst.w
(StopAtZero
,sp
)
3454 bsr AddSilenceStereoB
3457 0: /* .next_sampleZ */
3460 1: /* .first_sampleZ */
3463 move.
l ([StartPointLeft
,sp
]),a3
3464 move.
l ([StartPointRight
,sp
]),a4
3466 3: /* .not_firstZ */
3467 move.w
(4,a0
,d3.
l*4),a3
/* sign extend */
3468 move.w
(6,a0
,d3.
l*4),a4
/* sign extend */
3469 4: /* .got_sampleZ */
3470 move.w
(0,a0
,d3.
l*4),d7
3479 move.w
(2,a0
,d3.
l*4),d7
3494 5: /* .lastpoint_gtZ */
3497 6: /* .lastpoint_checkedZ */
3498 move.
l a3
,a5
/* update lastsample */
3506 5: /* .lastpoint_gtZ */
3509 6: /* .lastpoint_checkedZ */
3510 move.
l a4
,a6
/* update lastsample */
3523 0: /* .next_sample */
3526 2: /* .first_sample */
3529 move.
l ([StartPointLeft
,sp
]),a3
3530 move.
l ([StartPointRight
,sp
]),a4
3533 move.w
(4,a0
,d3.
l*4),a3
/* sign extend */
3534 move.w
(6,a0
,d3.
l*4),a4
/* sign extend */
3535 4: /* .got_sample */
3536 move.w
(0,a0
,d3.
l*4),d7
3545 move.w
(2,a0
,d3.
l*4),d7
3566 moveq
#0,d5 /* Prevent the last add */
3569 move.w
(0,a0
,d3.
l*4),d7
/* Fetch last endpoint */
3571 move.
l d7
,([StartPointLeft
,sp
])
3573 move.w
(2,a0
,d3.
l*4),d7
/* Fetch last endpoint */
3575 move.
l d7
,([StartPointRight
,sp
])
3581 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
3582 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
3584 move.
l a1
,([Dst,sp
])
3589 _AddLofiWordsStereoB
:
3593 tst.w
(StopAtZero
,sp
)
3599 bsr AddSilenceStereoB
3602 0: /* .next_sampleZ */
3605 1: /* .first_sampleZ */
3606 move.w
(0,a0
,d3.
l*4),a3
/* sign extend */
3608 move.w
(2,a0
,d3.
l*4),a4
/* sign extend */
3616 5: /* .lastpoint_gtZ */
3619 6: /* .lastpoint_checkedZ */
3620 move.
l a3
,a5
/* update lastsample */
3628 5: /* .lastpoint_gtZ */
3631 6: /* .lastpoint_checkedZ */
3632 move.
l a4
,a6
/* update lastsample */
3647 0: /* .next_sample */
3650 2: /* .first_sample */
3651 move.w
(0,a0
,d3.
l*4),a3
/* sign extend */
3653 move.w
(2,a0
,d3.
l*4),a4
/* sign extend */
3669 moveq
#0,d5 /* Prevent the last add */
3676 move.
l d3
,([Offset
,sp
],0) /* Integer offset */
3677 move.w d4
,([Offset
,sp
],4) /* Fraction offset (16 bit) */
3679 move.
l a1
,([Dst,sp
])