w.i.p - correctly remap ColorModel_TrueColor images.
[AROS.git] / workbench / devs / AHI / Device / addroutines_68k.s
blob42c10a2f926ab9b087e86060599bdbd44758458e
1 /*
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,
18 MA 02139, USA.
21 /******************************************************************************
22 ** Add-Routines ***************************************************************
23 ******************************************************************************/
25 /* m68k:
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
46 .set Src, 11*4 + 24
47 .set Dst, 11*4 + 28
48 .set FirstOffsetI, 11*4 + 32
49 .set AddI, 11*4 + 36
50 .set AddF, 11*4 + 40
51 .set Offset, 11*4 + 44
52 .set StopAtZero, 11*4 + 50
56 Register usage:
58 d0 counter
59 d1 scaleleft
60 d2 scaleright
61 d3 int offset
62 d4.w fract offset
63 d5 int add
64 d6.w fract offset
65 a0 src
66 a1 dst
67 a2 firstoffset
68 a5 left lastpoint
69 a6 right lastpoint
73 .text
75 .globl _AddByteMono
76 .globl _AddLofiByteMono
77 .globl _AddByteStereo
78 .globl _AddLofiByteStereo
79 .globl _AddBytesMono
80 .globl _AddLofiBytesMono
81 .globl _AddBytesStereo
82 .globl _AddLofiBytesStereo
83 .globl _AddWordMono
84 .globl _AddLofiWordMono
85 .globl _AddWordStereo
86 .globl _AddLofiWordStereo
87 .globl _AddWordsMono
88 .globl _AddLofiWordsMono
89 .globl _AddWordsStereo
90 .globl _AddLofiWordsStereo
91 .globl _AddByteMonoB
92 .globl _AddLofiByteMonoB
93 .globl _AddByteStereoB
94 .globl _AddLofiByteStereoB
95 .globl _AddBytesMonoB
96 .globl _AddLofiBytesMonoB
97 .globl _AddBytesStereoB
98 .globl _AddLofiBytesStereoB
99 .globl _AddWordMonoB
100 .globl _AddLofiWordMonoB
101 .globl _AddWordStereoB
102 .globl _AddLofiWordStereoB
103 .globl _AddWordsMonoB
104 .globl _AddLofiWordsMonoB
105 .globl _AddWordsStereoB
106 .globl _AddLofiWordsStereoB
108 AddSilenceMono:
109 .if CPU < 68060
110 move.w d5,d1 /* AddI<65535 */
111 swap.w d1
112 move.w d6,d1 /* d1=Add<<16 */
113 mulu.l d0,d2:d1
114 add.w d1,d4 /* New OffsetF (X) */
115 move.w d2,d1
116 swap.w d1 /* d1=d2:d1>>16 */
117 addx.l d1,d3 /* New OffsetI */
118 .else
119 move.l d5,d1
120 mulu.l d0,d1 /* OffsI*Samples */
121 move.l d6,d2
122 add.l d1,d3 /* New OffsetI (1) */
123 mulu.l d0,d2 /* OffsF*Samples... */
124 add.w d2,d4 /* New OffsetF (X) */
125 clr.w d2
126 swap.w d2 /* ...>>16 */
127 addx.l d2,d3 /* New OffsetI (2) */
128 .endif
129 lsl.l #2,d0
130 add.l d0,a1 /* Update dst pointer */
131 moveq #0,d0
134 AddSilenceStereo:
135 .if CPU < 68060
136 move.w d5,d1 /* AddI<65535 */
137 swap.w d1
138 move.w d6,d1 /* d1=Add<<16 */
139 mulu.l d0,d2:d1
140 add.w d1,d4 /* New OffsetF (X) */
141 move.w d2,d1
142 swap.w d1 /* d1=d2:d1>>16 */
143 addx.l d1,d3 /* New OffsetI */
144 .else
145 move.l d5,d1
146 mulu.l d0,d1 /* OffsI*Samples */
147 move.l d6,d2
148 add.l d1,d3 /* New OffsetI (1) */
149 mulu.l d0,d2 /* OffsF*Samples... */
150 add.w d2,d4 /* New OffsetF (X) */
151 clr.w d2
152 swap.w d2 /* ...>>16 */
153 addx.l d2,d3 /* New OffsetI (2) */
154 .endif
155 lsl.l #3,d0
156 add.l d0,a1 /* Update dst pointer */
157 moveq #0,d0
160 AddSilenceMonoB:
161 .if CPU < 68060
162 move.w d5,d1 /* AddI<65535 */
163 swap.w d1
164 move.w d6,d1 /* d1=Add<<16 */
165 mulu.l d0,d2:d1
166 sub.w d1,d4 /* New OffsetF (X) */
167 move.w d2,d1
168 swap.w d1 /* d1=d2:d1>>16 */
169 subx.l d1,d3 /* New OffsetI */
170 .else
171 move.l d5,d1
172 mulu.l d0,d1 /* OffsI*Samples */
173 move.l d6,d2
174 sub.l d1,d3 /* New OffsetI (1) */
175 mulu.l d0,d2 /* OffsF*Samples... */
176 sub.w d2,d4 /* New OffsetF (X) */
177 clr.w d2
178 swap.w d2 /* ...>>16 */
179 subx.l d2,d3 /* New OffsetI (2) */
180 .endif
181 lsl.l #2,d0
182 add.l d0,a1 /* Update dst pointer */
183 moveq #0,d0
186 AddSilenceStereoB:
187 .if CPU < 68060
188 move.w d5,d1 /* AddI<65535 */
189 swap.w d1
190 move.w d6,d1 /* d1=Add<<16 */
191 mulu.l d0,d2:d1
192 sub.w d1,d4 /* New OffsetF (X) */
193 move.w d2,d1
194 swap.w d1 /* d1=d2:d1>>16 */
195 subx.l d1,d3 /* New OffsetI */
196 .else
197 move.l d5,d1
198 mulu.l d0,d1 /* OffsI*Samples */
199 move.l d6,d2
200 sub.l d1,d3 /* New OffsetI (1) */
201 mulu.l d0,d2 /* OffsF*Samples... */
202 sub.w d2,d4 /* New OffsetF (X) */
203 clr.w d2
204 swap.w d2 /* ...>>16 */
205 subx.l d2,d3 /* New OffsetI (2) */
206 .endif
207 lsl.l #3,d0
208 add.l d0,a1 /* Update dst pointer */
209 moveq #0,d0
212 .macro prelude
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
218 move.l (Src,sp),a0
219 move.l ([Dst,sp]),a1
220 move.l (FirstOffsetI,sp),a2
221 move.l (AddI,sp),d5 /* Integer add */
222 moveq #0,d6
223 move.w (AddF,sp),d6 /* Fraction add (upper 16 bits) */
224 move.l ([Offset,sp],0),d3 /* Integer offset */
225 moveq #0,d4
226 move.w ([Offset,sp],4),d4 /* Fraction offset (upper 16 bits) */
227 suba.l a5,a5
228 suba.l a6,a6
230 .endm
232 .macro postlude
234 sub.l (Samples,sp),d0
235 neg.l d0 /* Return Samples - d0 */
236 movem.l (sp)+,d2-d7/a2-a6
238 .endm
240 ###############################################################################
242 _AddByteMono:
243 prelude
245 tst.w (StopAtZero,sp)
246 bne.b 1f
247 tst.l d1
248 bne.b 2f
249 bsr AddSilenceMono
250 bra 7f
252 0: /* .next_sampleZ */
253 add.w d6,d4
254 addx.l d5,d3
255 1: /* .first_sampleZ */
256 cmp.l a2,d3
257 bne.b 3f
258 move.l ([StartPointLeft,sp]),a3
259 bra.b 4f
260 3: /* .not_firstZ */
261 move.b (-1,a0,d3.l),d7
262 lsl.w #8,d7
263 move.w d7,a3 /* sign extend */
264 4: /* .got_sampleZ */
265 move.b (0,a0,d3.l),d7
266 lsl.w #8,d7
267 ext.l d7
268 sub.l a3,d7
269 asr.l #1,d7
270 muls.l d4,d7
271 asr.l #7,d7
272 asr.l #8,d7
273 add.l d7,a3
275 tst.l a5
276 bgt.b 5f
277 beq.b 6f
278 tst.l a3
279 bge.b 7f
280 bra.b 6f
281 5: /* .lastpoint_gtZ */
282 tst.l a3
283 ble.b 7f
284 6: /* .lastpoint_checkedZ */
285 move.l a3,a5 /* update lastsample */
287 move.l a3,d7
288 muls.l d1,d7
289 add.l d7,(a1)+
291 subq.l #1,d0
292 bne.b 0b
293 bra.b 8f
295 0: /* .next_sample */
296 add.w d6,d4
297 addx.l d5,d3
298 2: /* .first_sample */
299 cmp.l a2,d3
300 bne.b 3f
301 move.l ([StartPointLeft,sp]),a3
302 bra.b 4f
303 3: /* .not_first */
304 move.b (-1,a0,d3.l),d7
305 lsl.w #8,d7
306 move.w d7,a3 /* sign extend */
307 4: /* .got_sample */
308 move.b (0,a0,d3.l),d7
309 lsl.w #8,d7
310 ext.l d7
311 sub.l a3,d7
312 asr.l #1,d7
313 muls.l d4,d7
314 asr.l #7,d7
315 asr.l #8,d7
316 add.l d7,a3
318 move.l a3,d7
319 muls.l d1,d7
320 add.l d7,(a1)+
322 subq.l #1,d0
323 bne.b 0b
324 bra.b 8f
326 7: /* .abort */
327 moveq #0,d5 /* Prevent the last add */
328 moveq #0,d6
329 8: /* .exit */
330 move.b (0,a0,d3.l),d7 /* Fetch last endpoint */
331 lsl.w #8,d7
332 ext.l d7
333 move.l d7,([StartPointLeft,sp])
335 add.w d6,d4
336 addx.l d5,d3
338 move.l d3,([Offset,sp],0) /* Integer offset */
339 move.w d4,([Offset,sp],4) /* Fraction offset (16 bit) */
341 move.l a1,([Dst,sp])
343 postlude
347 _AddLofiByteMono:
348 prelude
349 asr.l #8,d1
350 asr.l #8,d2
352 tst.w (StopAtZero,sp)
353 bne.b 1f
354 tst.l d1
355 bne.b 2f
356 bsr AddSilenceMono
357 bra 7f
359 0: /* .next_sampleZ */
360 add.w d6,d4
361 addx.l d5,d3
362 1: /* .first_sampleZ */
363 move.b (0,a0,d3.l),d7
364 extb.l d7
366 tst.l a5
367 bgt.b 5f
368 beq.b 6f
369 tst.l d7
370 bge.b 7f
371 bra.b 6f
372 5: /* .lastpoint_gtZ */
373 tst.l d7
374 ble.b 7f
375 6: /* .lastpoint_checkedZ */
376 move.l d7,a5 /* update lastsample */
378 muls.w d1,d7
379 add.w d7,(a1)+
381 subq.l #1,d0
382 bne.b 0b
383 bra.b 8f
385 0: /* .next_sample */
386 add.w d6,d4
387 addx.l d5,d3
388 2: /* .first_sample */
389 move.b (0,a0,d3.l),d7
390 ext.w d7
392 muls.w d1,d7
393 add.w d7,(a1)+
395 subq.l #1,d0
396 bne.b 0b
397 bra.b 8f
399 7: /* .abort */
400 moveq #0,d5 /* Prevent the last add */
401 moveq #0,d6
402 8: /* .exit */
403 add.w d6,d4
404 addx.l d5,d3
406 move.l d3,([Offset,sp],0) /* Integer offset */
407 move.w d4,([Offset,sp],4) /* Fraction offset (16 bit) */
409 move.l a1,([Dst,sp])
411 postlude
414 ###############################################################################
416 _AddBytesMono:
417 prelude
419 tst.w (StopAtZero,sp)
420 bne.b 1f
421 tst.l d1
422 bne 2f
423 tst.l d2
424 bne 2f
425 bsr AddSilenceMono
426 bra 7f
428 0: /* .next_sampleZ */
429 add.w d6,d4
430 addx.l d5,d3
431 1: /* .first_sampleZ */
432 cmp.l a2,d3
433 bne.b 3f
434 move.l ([StartPointLeft,sp]),a3
435 move.l ([StartPointRight,sp]),a4
436 bra.b 4f
437 3: /* .not_firstZ */
438 move.b (-2,a0,d3.l*2),d7
439 lsl.w #8,d7
440 move.w d7,a3 /* sign extend */
441 move.b (-1,a0,d3.l*2),d7
442 lsl.w #8,d7
443 move.w d7,a4 /* sign extend */
444 4: /* .got_sampleZ */
445 move.b (0,a0,d3.l*2),d7
446 lsl.w #8,d7
447 ext.l d7
448 sub.l a3,d7
449 asr.l #1,d7
450 muls.l d4,d7
451 asr.l #7,d7
452 asr.l #8,d7
453 add.l d7,a3
455 move.b (1,a0,d3.l*2),d7
456 lsl.w #8,d7
457 ext.l d7
458 sub.l a4,d7
459 asr.l #1,d7
460 muls.l d4,d7
461 asr.l #7,d7
462 asr.l #8,d7
463 add.l d7,a4
465 tst.l a5
466 bgt.b 5f
467 beq.b 6f
468 tst.l a3
469 bge 7f
470 bra.b 6f
471 5: /* .lastpoint_gtZ */
472 tst.l a3
473 ble 7f
474 6: /* .lastpoint_checkedZ */
475 move.l a3,a5 /* update lastsample */
477 tst.l a6
478 bgt.b 5f
479 beq.b 6f
480 tst.l a4
481 bge 7f
482 bra.b 6f
483 5: /* .lastpoint_gtZ */
484 tst.l a4
485 ble 7f
486 6: /* .lastpoint_checkedZ */
487 move.l a4,a6 /* update lastsample */
489 move.l a3,d7
490 muls.l d1,d7
491 add.l d7,(a1)
492 move.l a4,d7
493 muls.l d2,d7
494 add.l d7,(a1)+
496 subq.l #1,d0
497 bne 0b
498 bra.b 8f
500 0: /* .next_sample */
501 add.w d6,d4
502 addx.l d5,d3
503 2: /* .first_sample */
504 cmp.l a2,d3
505 bne.b 3f
506 move.l ([StartPointLeft,sp]),a3
507 move.l ([StartPointRight,sp]),a4
508 bra.b 4f
509 3: /* .not_first */
510 move.b (-2,a0,d3.l*2),d7
511 lsl.w #8,d7
512 move.w d7,a3 /* sign extend */
513 move.b (-1,a0,d3.l*2),d7
514 lsl.w #8,d7
515 move.w d7,a4 /* sign extend */
516 4: /* .got_sample */
517 move.b (0,a0,d3.l*2),d7
518 lsl.w #8,d7
519 ext.l d7
520 sub.l a3,d7
521 asr.l #1,d7
522 muls.l d4,d7
523 asr.l #7,d7
524 asr.l #8,d7
525 add.l d7,a3
527 move.b (1,a0,d3.l*2),d7
528 lsl.w #8,d7
529 ext.l d7
530 sub.l a4,d7
531 asr.l #1,d7
532 muls.l d4,d7
533 asr.l #7,d7
534 asr.l #8,d7
535 add.l d7,a4
537 move.l a3,d7
538 muls.l d1,d7
539 add.l d7,(a1)
540 move.l a4,d7
541 muls.l d2,d7
542 add.l d7,(a1)+
544 subq.l #1,d0
545 bne.b 0b
546 bra.b 8f
548 7: /* .abort */
549 moveq #0,d5 /* Prevent the last add */
550 moveq #0,d6
551 8: /* .exit */
552 move.b (0,a0,d3.l*2),d7 /* Fetch last endpoint */
553 lsl.w #8,d7
554 ext.l d7
555 move.l d7,([StartPointLeft,sp])
557 move.b (1,a0,d3.l*2),d7 /* Fetch last endpoint */
558 lsl.w #8,d7
559 ext.l d7
560 move.l d7,([StartPointRight,sp])
562 add.w d6,d4
563 addx.l d5,d3
565 move.l d3,([Offset,sp],0) /* Integer offset */
566 move.w d4,([Offset,sp],4) /* Fraction offset (16 bit) */
568 move.l a1,([Dst,sp])
570 postlude
573 _AddLofiBytesMono:
574 prelude
575 asr.l #8,d1
576 asr.l #8,d2
578 tst.w (StopAtZero,sp)
579 bne.b 1f
580 tst.l d1
581 bne.b 2f
582 tst.l d2
583 bne.b 2f
584 bsr AddSilenceMono
585 bra 7f
587 0: /* .next_sampleZ */
588 add.w d6,d4
589 addx.l d5,d3
590 1: /* .first_sampleZ */
591 move.b (0,a0,d3.l*2),d7
592 ext.w d7
593 move.w d7,a3 /* sign extend */
595 move.b (1,a0,d3.l*2),d7
596 ext.w d7
597 move.w d7,a4 /* sign extend */
599 tst.l a5
600 bgt.b 5f
601 beq.b 6f
602 tst.l d7
603 bge.b 7f
604 bra.b 6f
605 5: /* .lastpoint_gtZ */
606 tst.l d7
607 ble.b 7f
608 6: /* .lastpoint_checkedZ */
609 move.l d7,a5 /* update lastsample */
611 tst.l a6
612 bgt.b 5f
613 beq.b 6f
614 tst.l a4
615 bge.b 7f
616 bra.b 6f
617 5: /* .lastpoint_gtZ */
618 tst.l a4
619 ble.b 7f
620 6: /* .lastpoint_checkedZ */
621 move.l a4,a6 /* update lastsample */
623 move.l a3,d7
624 muls.w d1,d7
625 add.w d7,(a1)
626 move.l a4,d7
627 muls.w d2,d7
628 add.w d7,(a1)+
630 subq.l #1,d0
631 bne.b 0b
632 bra.b 8f
634 0: /* .next_sample */
635 add.w d6,d4
636 addx.l d5,d3
637 2: /* .first_sample */
638 move.b (0,a0,d3.l*2),d7
639 ext.w d7
640 move.w d7,a3 /* sign extend */
642 move.b (1,a0,d3.l*2),d7
643 ext.w d7
644 move.w d7,a4 /* sign extend */
646 move.l a3,d7
647 muls.w d1,d7
648 add.w d7,(a1)
649 move.l a4,d7
650 muls.w d2,d7
651 add.w d7,(a1)+
653 subq.l #1,d0
654 bne.b 0b
655 bra.b 8f
657 7: /* .abort */
658 moveq #0,d5 /* Prevent the last add */
659 moveq #0,d6
660 8: /* .exit */
661 add.w d6,d4
662 addx.l d5,d3
664 move.l d3,([Offset,sp],0) /* Integer offset */
665 move.w d4,([Offset,sp],4) /* Fraction offset (16 bit) */
667 move.l a1,([Dst,sp])
669 postlude
672 ###############################################################################
674 _AddByteStereo:
675 prelude
677 tst.w (StopAtZero,sp)
678 bne.b 1f
679 tst.l d1
680 bne.b 2f
681 tst.l d2
682 bne.b 2f
683 bsr AddSilenceStereo
684 bra 7f
686 0: /* .next_sampleZ */
687 add.w d6,d4
688 addx.l d5,d3
689 1: /* .first_sampleZ */
690 cmp.l a2,d3
691 bne.b 3f
692 move.l ([StartPointLeft,sp]),a3
693 bra.b 4f
694 3: /* .not_firstZ */
695 move.b (-1,a0,d3.l),d7
696 lsl.w #8,d7
697 move.w d7,a3 /* sign extend */
698 4: /* .got_sampleZ */
699 move.b (0,a0,d3.l),d7
700 lsl.w #8,d7
701 ext.l d7
702 sub.l a3,d7
703 asr.l #1,d7
704 muls.l d4,d7
705 asr.l #7,d7
706 asr.l #8,d7
707 add.l d7,a3
709 tst.l a5
710 bgt.b 5f
711 beq.b 6f
712 tst.l a3
713 bge.b 7f
714 bra.b 6f
715 5: /* .lastpoint_gtZ */
716 tst.l a3
717 ble.b 7f
718 6: /* .lastpoint_checkedZ */
719 move.l a3,a5 /* update lastsample */
721 move.l a3,d7
722 muls.l d1,d7
723 add.l d7,(a1)+
724 move.l a3,d7
725 muls.l d2,d7
726 add.l d7,(a1)+
728 subq.l #1,d0
729 bne.b 0b
730 bra.b 8f
732 0: /* .next_sample */
733 add.w d6,d4
734 addx.l d5,d3
735 2: /* .first_sample */
736 cmp.l a2,d3
737 bne.b 3f
738 move.l ([StartPointLeft,sp]),a3
739 bra.b 4f
740 3: /* .not_first */
741 move.b (-1,a0,d3.l),d7
742 lsl.w #8,d7
743 move.w d7,a3 /* sign extend */
744 4: /* .got_sample */
745 move.b (0,a0,d3.l),d7
746 lsl.w #8,d7
747 ext.l d7
748 sub.l a3,d7
749 asr.l #1,d7
750 muls.l d4,d7
751 asr.l #7,d7
752 asr.l #8,d7
753 add.l d7,a3
755 move.l a3,d7
756 muls.l d1,d7
757 add.l d7,(a1)+
758 move.l a3,d7
759 muls.l d2,d7
760 add.l d7,(a1)+
762 subq.l #1,d0
763 bne.b 0b
764 bra.b 8f
766 7: /* .abort */
767 moveq #0,d5 /* Prevent the last add */
768 moveq #0,d6
769 8: /* .exit */
770 move.b (0,a0,d3.l),d7 /* Fetch last endpoint */
771 lsl.w #8,d7
772 ext.l d7
773 move.l d7,([StartPointLeft,sp])
775 add.w d6,d4
776 addx.l d5,d3
778 move.l d3,([Offset,sp],0) /* Integer offset */
779 move.w d4,([Offset,sp],4) /* Fraction offset (16 bit) */
781 move.l a1,([Dst,sp])
783 postlude
786 _AddLofiByteStereo:
787 prelude
788 asr.l #8,d1
789 asr.l #8,d2
791 tst.w (StopAtZero,sp)
792 bne.b 1f
793 tst.l d1
794 bne.b 2f
795 tst.l d2
796 bne.b 2f
797 bsr AddSilenceStereo
798 bra 7f
800 0: /* .next_sampleZ */
801 add.w d6,d4
802 addx.l d5,d3
803 1: /* .first_sampleZ */
804 move.b (0,a0,d3.l),d7
805 ext.w d7
806 move.w d7,a3 /* sign extend */
808 tst.l a5
809 bgt.b 5f
810 beq.b 6f
811 tst.l a3
812 bge.b 7f
813 bra.b 6f
814 5: /* .lastpoint_gtZ */
815 tst.l a3
816 ble.b 7f
817 6: /* .lastpoint_checkedZ */
818 move.l a3,a5 /* update lastsample */
820 move.l a3,d7
821 muls.w d1,d7
822 add.w d7,(a1)+
823 move.l a3,d7
824 muls.w d2,d7
825 add.w d7,(a1)+
827 subq.l #1,d0
828 bne.b 0b
829 bra.b 8f
831 0: /* .next_sample */
832 add.w d6,d4
833 addx.l d5,d3
834 2: /* .first_sample */
835 4: /* .got_sample */
836 move.b (0,a0,d3.l),d7
837 ext.w d7
838 move.w d7,a3 /* sign extend */
840 move.l a3,d7
841 muls.w d1,d7
842 add.w d7,(a1)+
843 move.l a3,d7
844 muls.w d2,d7
845 add.w d7,(a1)+
847 subq.l #1,d0
848 bne.b 0b
849 bra.b 8f
851 7: /* .abort */
852 moveq #0,d5 /* Prevent the last add */
853 moveq #0,d6
854 8: /* .exit */
855 add.w d6,d4
856 addx.l d5,d3
858 move.l d3,([Offset,sp],0) /* Integer offset */
859 move.w d4,([Offset,sp],4) /* Fraction offset (16 bit) */
861 move.l a1,([Dst,sp])
863 postlude
866 ###############################################################################
868 _AddBytesStereo:
869 prelude
871 tst.w (StopAtZero,sp)
872 bne.b 1f
873 tst.l d1
874 bne 2f
875 tst.l d2
876 bne 2f
877 bsr AddSilenceStereo
878 bra 7f
880 0: /* .next_sampleZ */
881 add.w d6,d4
882 addx.l d5,d3
883 1: /* .first_sampleZ */
884 cmp.l a2,d3
885 bne.b 3f
886 move.l ([StartPointLeft,sp]),a3
887 move.l ([StartPointRight,sp]),a4
888 bra.b 4f
889 3: /* .not_firstZ */
890 move.b (-2,a0,d3.l*2),d7
891 lsl.w #8,d7
892 move.w d7,a3 /* sign extend */
893 move.b (-1,a0,d3.l*2),d7
894 lsl.w #8,d7
895 move.w d7,a4 /* sign extend */
896 4: /* .got_sampleZ */
897 move.b (0,a0,d3.l*2),d7
898 lsl.w #8,d7
899 ext.l d7
900 sub.l a3,d7
901 asr.l #1,d7
902 muls.l d4,d7
903 asr.l #7,d7
904 asr.l #8,d7
905 add.l d7,a3
907 move.b (1,a0,d3.l*2),d7
908 lsl.w #8,d7
909 ext.l d7
910 sub.l a4,d7
911 asr.l #1,d7
912 muls.l d4,d7
913 asr.l #7,d7
914 asr.l #8,d7
915 add.l d7,a4
917 tst.l a5
918 bgt.b 5f
919 beq.b 6f
920 tst.l a3
921 bge 7f
922 bra.b 6f
923 5: /* .lastpoint_gtZ */
924 tst.l a3
925 ble 7f
926 6: /* .lastpoint_checkedZ */
927 move.l a3,a5 /* update lastsample */
929 tst.l a6
930 bgt.b 5f
931 beq.b 6f
932 tst.l a4
933 bge 7f
934 bra.b 6f
935 5: /* .lastpoint_gtZ */
936 tst.l a4
937 ble 7f
938 6: /* .lastpoint_checkedZ */
939 move.l a4,a6 /* update lastsample */
941 move.l a3,d7
942 muls.l d1,d7
943 add.l d7,(a1)+
944 move.l a4,d7
945 muls.l d2,d7
946 add.l d7,(a1)+
948 subq.l #1,d0
949 bne 0b
950 bra.b 8f
952 0: /* .next_sample */
953 add.w d6,d4
954 addx.l d5,d3
955 2: /* .first_sample */
956 cmp.l a2,d3
957 bne.b 3f
958 move.l ([StartPointLeft,sp]),a3
959 move.l ([StartPointRight,sp]),a4
960 bra.b 4f
961 3: /* .not_first */
962 move.b (-2,a0,d3.l*2),d7
963 lsl.w #8,d7
964 move.w d7,a3 /* sign extend */
965 move.b (-1,a0,d3.l*2),d7
966 lsl.w #8,d7
967 move.w d7,a4 /* sign extend */
968 4: /* .got_sample */
969 move.b (0,a0,d3.l*2),d7
970 lsl.w #8,d7
971 ext.l d7
972 sub.l a3,d7
973 asr.l #1,d7
974 muls.l d4,d7
975 asr.l #7,d7
976 asr.l #8,d7
977 add.l d7,a3
979 move.b (1,a0,d3.l*2),d7
980 lsl.w #8,d7
981 ext.l d7
982 sub.l a4,d7
983 asr.l #1,d7
984 muls.l d4,d7
985 asr.l #7,d7
986 asr.l #8,d7
987 add.l d7,a4
989 move.l a3,d7
990 muls.l d1,d7
991 add.l d7,(a1)+
992 move.l a4,d7
993 muls.l d2,d7
994 add.l d7,(a1)+
996 subq.l #1,d0
997 bne.b 0b
998 bra.b 8f
1000 7: /* .abort */
1001 moveq #0,d5 /* Prevent the last add */
1002 moveq #0,d6
1003 8: /* .exit */
1004 move.b (0,a0,d3.l*2),d7 /* Fetch last endpoint */
1005 lsl.w #8,d7
1006 ext.l d7
1007 move.l d7,([StartPointLeft,sp])
1009 move.b (1,a0,d3.l*2),d7 /* Fetch last endpoint */
1010 lsl.w #8,d7
1011 ext.l d7
1012 move.l d7,([StartPointRight,sp])
1014 add.w d6,d4
1015 addx.l d5,d3
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])
1022 postlude
1025 _AddLofiBytesStereo:
1026 prelude
1027 asr.l #8,d1
1028 asr.l #8,d2
1030 tst.w (StopAtZero,sp)
1031 bne.b 1f
1032 tst.l d1
1033 bne.b 2f
1034 tst.l d2
1035 bne.b 2f
1036 bsr AddSilenceStereo
1037 bra 7f
1039 0: /* .next_sampleZ */
1040 add.w d6,d4
1041 addx.l d5,d3
1042 1: /* .first_sampleZ */
1043 move.b (0,a0,d3.l*2),d7
1044 ext.w d7
1045 move.w d7,a3 /* sign extend */
1047 move.b (1,a0,d3.l*2),d7
1048 ext.w d7
1049 move.w d7,a4 /* sign extend */
1051 tst.l a5
1052 bgt.b 5f
1053 beq.b 6f
1054 tst.l a3
1055 bge.b 7f
1056 bra.b 6f
1057 5: /* .lastpoint_gtZ */
1058 tst.l a3
1059 ble.b 7f
1060 6: /* .lastpoint_checkedZ */
1061 move.l a3,a5 /* update lastsample */
1063 tst.l a6
1064 bgt.b 5f
1065 beq.b 6f
1066 tst.l a4
1067 bge.b 7f
1068 bra.b 6f
1069 5: /* .lastpoint_gtZ */
1070 tst.l a4
1071 ble.b 7f
1072 6: /* .lastpoint_checkedZ */
1073 move.l a4,a6 /* update lastsample */
1075 move.l a3,d7
1076 muls.w d1,d7
1077 add.w d7,(a1)+
1078 move.l a4,d7
1079 muls.w d2,d7
1080 add.w d7,(a1)+
1082 subq.l #1,d0
1083 bne.b 0b
1084 bra.b 8f
1086 0: /* .next_sample */
1087 add.w d6,d4
1088 addx.l d5,d3
1089 2: /* .first_sample */
1090 move.b (0,a0,d3.l*2),d7
1091 ext.w d7
1092 move.w d7,a3 /* sign extend */
1094 move.b (1,a0,d3.l*2),d7
1095 ext.w d7
1096 move.w d7,a4 /* sign extend */
1098 move.l a3,d7
1099 muls.w d1,d7
1100 add.w d7,(a1)+
1101 move.l a4,d7
1102 muls.w d2,d7
1103 add.w d7,(a1)+
1105 subq.l #1,d0
1106 bne.b 0b
1107 bra.b 8f
1109 7: /* .abort */
1110 moveq #0,d5 /* Prevent the last add */
1111 moveq #0,d6
1112 8: /* .exit */
1113 add.w d6,d4
1114 addx.l d5,d3
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])
1121 postlude
1124 ###############################################################################
1126 _AddWordMono:
1127 prelude
1129 tst.w (StopAtZero,sp)
1130 bne.b 1f
1131 tst.l d1
1132 bne.b 2f
1133 bsr AddSilenceMono
1134 bra 7f
1136 0: /* .next_sampleZ */
1137 add.w d6,d4
1138 addx.l d5,d3
1139 1: /* .first_sampleZ */
1140 cmp.l a2,d3
1141 bne.b 3f
1142 move.l ([StartPointLeft,sp]),a3
1143 bra.b 4f
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
1148 ext.l d7
1149 sub.l a3,d7
1150 asr.l #1,d7
1151 muls.l d4,d7
1152 asr.l #7,d7
1153 asr.l #8,d7
1154 add.l d7,a3
1156 tst.l a5
1157 bgt.b 5f
1158 beq.b 6f
1159 tst.l a3
1160 bge.b 7f
1161 bra.b 6f
1162 5: /* .lastpoint_gtZ */
1163 tst.l a3
1164 ble.b 7f
1165 6: /* .lastpoint_checkedZ */
1166 move.l a3,a5 /* update lastsample */
1168 move.l a3,d7
1169 muls.l d1,d7
1170 add.l d7,(a1)+
1172 subq.l #1,d0
1173 bne.b 0b
1174 bra.b 8f
1176 0: /* .next_sample */
1177 add.w d6,d4
1178 addx.l d5,d3
1179 2: /* .first_sample */
1180 cmp.l a2,d3
1181 bne.b 3f
1182 move.l ([StartPointLeft,sp]),a3
1183 bra.b 4f
1184 3: /* .not_first */
1185 move.w (-2,a0,d3.l*2),a3 /* sign extend */
1186 4: /* .got_sample */
1187 move.w (0,a0,d3.l*2),d7
1188 ext.l d7
1189 sub.l a3,d7
1190 asr.l #1,d7
1191 muls.l d4,d7
1192 asr.l #7,d7
1193 asr.l #8,d7
1194 add.l d7,a3
1196 move.l a3,d7
1197 muls.l d1,d7
1198 add.l d7,(a1)+
1200 subq.l #1,d0
1201 bne.b 0b
1202 bra.b 8f
1204 7: /* .abort */
1205 moveq #0,d5 /* Prevent the last add */
1206 moveq #0,d6
1207 8: /* .exit */
1208 move.w (0,a0,d3.l*2),d7 /* Fetch last endpoint */
1209 ext.l d7
1210 move.l d7,([StartPointLeft,sp])
1212 add.w d6,d4
1213 addx.l d5,d3
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])
1220 postlude
1223 _AddLofiWordMono:
1224 prelude
1226 tst.w (StopAtZero,sp)
1227 bne.b 1f
1228 tst.l d1
1229 bne.b 2f
1230 bsr AddSilenceMono
1231 bra 7f
1233 0: /* .next_sampleZ */
1234 add.w d6,d4
1235 addx.l d5,d3
1236 1: /* .first_sampleZ */
1237 move.w (0,a0,d3.l*2),d7
1238 ext.l d7
1240 tst.l a5
1241 bgt.b 5f
1242 beq.b 6f
1243 tst.l d7
1244 bge.b 7f
1245 bra.b 6f
1246 5: /* .lastpoint_gtZ */
1247 tst.l d7
1248 ble.b 7f
1249 6: /* .lastpoint_checkedZ */
1250 move.l d7,a5 /* update lastsample */
1252 muls.l d1,d7
1253 swap.w d7
1254 add.w d7,(a1)+
1256 subq.l #1,d0
1257 bne.b 0b
1258 bra.b 8f
1260 0: /* .next_sample */
1261 add.w d6,d4
1262 addx.l d5,d3
1263 2: /* .first_sample */
1264 move.w (0,a0,d3.l*2),d7
1265 ext.l d7
1267 muls.l d1,d7
1268 swap.w d7
1269 add.w d7,(a1)+
1271 subq.l #1,d0
1272 bne.b 0b
1273 bra.b 8f
1275 7: /* .abort */
1276 moveq #0,d5 /* Prevent the last add */
1277 moveq #0,d6
1278 8: /* .exit */
1279 add.w d6,d4
1280 addx.l d5,d3
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])
1287 postlude
1290 ###############################################################################
1292 _AddWordsMono:
1293 prelude
1295 tst.w (StopAtZero,sp)
1296 bne.b 1f
1297 tst.l d1
1298 bne 2f
1299 tst.l d2
1300 bne 2f
1301 bsr AddSilenceMono
1302 bra 7f
1304 0: /* .next_sampleZ */
1305 add.w d6,d4
1306 addx.l d5,d3
1307 1: /* .first_sampleZ */
1308 cmp.l a2,d3
1309 bne.b 3f
1310 move.l ([StartPointLeft,sp]),a3
1311 move.l ([StartPointRight,sp]),a4
1312 bra.b 4f
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
1318 ext.l d7
1319 sub.l a3,d7
1320 asr.l #1,d7
1321 muls.l d4,d7
1322 asr.l #7,d7
1323 asr.l #8,d7
1324 add.l d7,a3
1326 move.w (2,a0,d3.l*4),d7
1327 ext.l d7
1328 sub.l a4,d7
1329 asr.l #1,d7
1330 muls.l d4,d7
1331 asr.l #7,d7
1332 asr.l #8,d7
1333 add.l d7,a4
1335 tst.l a5
1336 bgt.b 5f
1337 beq.b 6f
1338 tst.l a3
1339 bge 7f
1340 bra.b 6f
1341 5: /* .lastpoint_gtZ */
1342 tst.l a3
1343 ble 7f
1344 6: /* .lastpoint_checkedZ */
1345 move.l a3,a5 /* update lastsample */
1347 tst.l a6
1348 bgt.b 5f
1349 beq.b 6f
1350 tst.l a4
1351 bge.b 7f
1352 bra.b 6f
1353 5: /* .lastpoint_gtZ */
1354 tst.l a4
1355 ble.b 7f
1356 6: /* .lastpoint_checkedZ */
1357 move.l a4,a6 /* update lastsample */
1359 move.l a3,d7
1360 muls.l d1,d7
1361 add.l d7,(a1)
1362 move.l a4,d7
1363 muls.l d2,d7
1364 add.l d7,(a1)+
1366 subq.l #1,d0
1367 bne 0b
1368 bra.b 8f
1370 0: /* .next_sample */
1371 add.w d6,d4
1372 addx.l d5,d3
1373 2: /* .first_sample */
1374 cmp.l a2,d3
1375 bne.b 3f
1376 move.l ([StartPointLeft,sp]),a3
1377 move.l ([StartPointRight,sp]),a4
1378 bra.b 4f
1379 3: /* .not_first */
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
1384 ext.l d7
1385 sub.l a3,d7
1386 asr.l #1,d7
1387 muls.l d4,d7
1388 asr.l #7,d7
1389 asr.l #8,d7
1390 add.l d7,a3
1392 move.w (2,a0,d3.l*4),d7
1393 ext.l d7
1394 sub.l a4,d7
1395 asr.l #1,d7
1396 muls.l d4,d7
1397 asr.l #7,d7
1398 asr.l #8,d7
1399 add.l d7,a4
1401 move.l a3,d7
1402 muls.l d1,d7
1403 add.l d7,(a1)
1404 move.l a4,d7
1405 muls.l d2,d7
1406 add.l d7,(a1)+
1408 subq.l #1,d0
1409 bne.b 0b
1410 bra.b 8f
1412 7: /* .abort */
1413 moveq #0,d5 /* Prevent the last add */
1414 moveq #0,d6
1415 8: /* .exit */
1416 move.w (0,a0,d3.l*4),d7 /* Fetch last endpoint */
1417 ext.l d7
1418 move.l d7,([StartPointLeft,sp])
1420 move.w (2,a0,d3.l*4),d7 /* Fetch last endpoint */
1421 ext.l d7
1422 move.l d7,([StartPointRight,sp])
1424 add.w d6,d4
1425 addx.l d5,d3
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])
1432 postlude
1435 _AddLofiWordsMono:
1436 prelude
1438 tst.w (StopAtZero,sp)
1439 bne.b 1f
1440 tst.l d1
1441 bne.b 2f
1442 tst.l d2
1443 bne.b 2f
1444 bsr AddSilenceMono
1445 bra 7f
1447 0: /* .next_sampleZ */
1448 add.w d6,d4
1449 addx.l d5,d3
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 */
1455 tst.l a5
1456 bgt.b 5f
1457 beq.b 6f
1458 tst.l a3
1459 bge.b 7f
1460 bra.b 6f
1461 5: /* .lastpoint_gtZ */
1462 tst.l a3
1463 ble.b 7f
1464 6: /* .lastpoint_checkedZ */
1465 move.l a3,a5 /* update lastsample */
1467 tst.l a6
1468 bgt.b 5f
1469 beq.b 6f
1470 tst.l a4
1471 bge.b 7f
1472 bra.b 6f
1473 5: /* .lastpoint_gtZ */
1474 tst.l a4
1475 ble.b 7f
1476 6: /* .lastpoint_checkedZ */
1477 move.l a4,a6 /* update lastsample */
1479 move.l a3,d7
1480 muls.l d1,d7
1481 swap.w d7
1482 add.w d7,(a1)
1483 move.l a4,d7
1484 muls.l d2,d7
1485 swap.w d7
1486 add.w d7,(a1)+
1488 subq.l #1,d0
1489 bne.b 0b
1490 bra.b 8f
1492 0: /* .next_sample */
1493 add.w d6,d4
1494 addx.l d5,d3
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 */
1500 move.l a3,d7
1501 muls.l d1,d7
1502 swap.w d7
1503 add.w d7,(a1)
1504 move.l a4,d7
1505 muls.l d2,d7
1506 swap.w d7
1507 add.w d7,(a1)+
1509 subq.l #1,d0
1510 bne.b 0b
1511 bra.b 8f
1513 7: /* .abort */
1514 moveq #0,d5 /* Prevent the last add */
1515 moveq #0,d6
1516 8: /* .exit */
1517 add.w d6,d4
1518 addx.l d5,d3
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])
1525 postlude
1528 ###############################################################################
1530 _AddWordStereo:
1531 prelude
1533 tst.w (StopAtZero,sp)
1534 bne.b 1f
1535 tst.l d1
1536 bne.b 2f
1537 tst.l d2
1538 bne.b 2f
1539 bsr AddSilenceStereo
1540 bra 7f
1542 0: /* .next_sampleZ */
1543 add.w d6,d4
1544 addx.l d5,d3
1545 1: /* .first_sampleZ */
1546 cmp.l a2,d3
1547 bne.b 3f
1548 move.l ([StartPointLeft,sp]),a3
1549 bra.b 4f
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
1554 ext.l d7
1555 sub.l a3,d7
1556 asr.l #1,d7
1557 muls.l d4,d7
1558 asr.l #7,d7
1559 asr.l #8,d7
1560 add.l d7,a3
1562 tst.l a5
1563 bgt.b 5f
1564 beq.b 6f
1565 tst.l a3
1566 bge.b 7f
1567 bra.b 6f
1568 5: /* .lastpoint_gtZ */
1569 tst.l a3
1570 ble.b 7f
1571 6: /* .lastpoint_checkedZ */
1572 move.l a3,a5 /* update lastsample */
1574 move.l a3,d7
1575 muls.l d1,d7
1576 add.l d7,(a1)+
1577 move.l a3,d7
1578 muls.l d2,d7
1579 add.l d7,(a1)+
1581 subq.l #1,d0
1582 bne.b 0b
1583 bra.b 8f
1585 0: /* .next_sample */
1586 add.w d6,d4
1587 addx.l d5,d3
1588 2: /* .first_sample */
1589 cmp.l a2,d3
1590 bne.b 3f
1591 move.l ([StartPointLeft,sp]),a3
1592 bra.b 4f
1593 3: /* .not_first */
1594 move.w (-2,a0,d3.l*2),a3 /* sign extend */
1595 4: /* .got_sample */
1596 move.w (0,a0,d3.l*2),d7
1597 ext.l d7
1598 sub.l a3,d7
1599 asr.l #1,d7
1600 muls.l d4,d7
1601 asr.l #7,d7
1602 asr.l #8,d7
1603 add.l d7,a3
1605 move.l a3,d7
1606 muls.l d1,d7
1607 add.l d7,(a1)+
1608 move.l a3,d7
1609 muls.l d2,d7
1610 add.l d7,(a1)+
1612 subq.l #1,d0
1613 bne.b 0b
1614 bra.b 8f
1616 7: /* .abort */
1617 moveq #0,d5 /* Prevent the last add */
1618 moveq #0,d6
1619 8: /* .exit */
1620 move.w (0,a0,d3.l*2),d7 /* Fetch last endpoint */
1621 ext.l d7
1622 move.l d7,([StartPointLeft,sp])
1624 add.w d6,d4
1625 addx.l d5,d3
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])
1632 postlude
1635 _AddLofiWordStereo:
1636 prelude
1638 tst.w (StopAtZero,sp)
1639 bne.b 1f
1640 tst.l d1
1641 bne.b 2f
1642 tst.l d2
1643 bne.b 2f
1644 bsr AddSilenceStereo
1645 bra 7f
1647 0: /* .next_sampleZ */
1648 add.w d6,d4
1649 addx.l d5,d3
1650 1: /* .first_sampleZ */
1651 move.w (0,a0,d3.l*2),a3 /* sign extend */
1653 tst.l a5
1654 bgt.b 5f
1655 beq.b 6f
1656 tst.l a3
1657 bge.b 7f
1658 bra.b 6f
1659 5: /* .lastpoint_gtZ */
1660 tst.l a3
1661 ble.b 7f
1662 6: /* .lastpoint_checkedZ */
1663 move.l a3,a5 /* update lastsample */
1665 move.l a3,d7
1666 muls.l d1,d7
1667 swap.w d7
1668 add.w d7,(a1)+
1669 move.l a3,d7
1670 muls.l d2,d7
1671 swap.w d7
1672 add.w d7,(a1)+
1674 subq.l #1,d0
1675 bne.b 0b
1676 bra.b 8f
1678 0: /* .next_sample */
1679 add.w d6,d4
1680 addx.l d5,d3
1681 2: /* .first_sample */
1682 move.w (0,a0,d3.l*2),a3 /* sign extend */
1684 move.l a3,d7
1685 muls.l d1,d7
1686 swap.w d7
1687 add.w d7,(a1)+
1688 move.l a3,d7
1689 muls.l d2,d7
1690 swap.w d7
1691 add.w d7,(a1)+
1693 subq.l #1,d0
1694 bne.b 0b
1695 bra.b 8f
1697 7: /* .abort */
1698 moveq #0,d5 /* Prevent the last add */
1699 moveq #0,d6
1700 8: /* .exit */
1701 add.w d6,d4
1702 addx.l d5,d3
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])
1709 postlude
1712 ###############################################################################
1714 _AddWordsStereo:
1715 prelude
1717 tst.w (StopAtZero,sp)
1718 bne.b 1f
1719 tst.l d1
1720 bne 2f
1721 tst.l d2
1722 bne 2f
1723 bsr AddSilenceStereo
1724 bra 7f
1726 0: /* .next_sampleZ */
1727 add.w d6,d4
1728 addx.l d5,d3
1729 1: /* .first_sampleZ */
1730 cmp.l a2,d3
1731 bne.b 3f
1732 move.l ([StartPointLeft,sp]),a3
1733 move.l ([StartPointRight,sp]),a4
1734 bra.b 4f
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
1740 ext.l d7
1741 sub.l a3,d7
1742 asr.l #1,d7
1743 muls.l d4,d7
1744 asr.l #7,d7
1745 asr.l #8,d7
1746 add.l d7,a3
1748 move.w (2,a0,d3.l*4),d7
1749 ext.l d7
1750 sub.l a4,d7
1751 asr.l #1,d7
1752 muls.l d4,d7
1753 asr.l #7,d7
1754 asr.l #8,d7
1755 add.l d7,a4
1757 tst.l a5
1758 bgt.b 5f
1759 beq.b 6f
1760 tst.l a3
1761 bge 7f
1762 bra.b 6f
1763 5: /* .lastpoint_gtZ */
1764 tst.l a3
1765 ble 7f
1766 6: /* .lastpoint_checkedZ */
1767 move.l a3,a5 /* update lastsample */
1769 tst.l a6
1770 bgt.b 5f
1771 beq.b 6f
1772 tst.l a4
1773 bge.b 7f
1774 bra.b 6f
1775 5: /* .lastpoint_gtZ */
1776 tst.l a4
1777 ble.b 7f
1778 6: /* .lastpoint_checkedZ */
1779 move.l a4,a6 /* update lastsample */
1781 move.l a3,d7
1782 muls.l d1,d7
1783 add.l d7,(a1)+
1784 move.l a4,d7
1785 muls.l d2,d7
1786 add.l d7,(a1)+
1788 subq.l #1,d0
1789 bne 0b
1790 bra.b 8f
1792 0: /* .next_sample */
1793 add.w d6,d4
1794 addx.l d5,d3
1795 2: /* .first_sample */
1796 cmp.l a2,d3
1797 bne.b 3f
1798 move.l ([StartPointLeft,sp]),a3
1799 move.l ([StartPointRight,sp]),a4
1800 bra.b 4f
1801 3: /* .not_first */
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
1806 ext.l d7
1807 sub.l a3,d7
1808 asr.l #1,d7
1809 muls.l d4,d7
1810 asr.l #7,d7
1811 asr.l #8,d7
1812 add.l d7,a3
1814 move.w (2,a0,d3.l*4),d7
1815 ext.l d7
1816 sub.l a4,d7
1817 asr.l #1,d7
1818 muls.l d4,d7
1819 asr.l #7,d7
1820 asr.l #8,d7
1821 add.l d7,a4
1823 move.l a3,d7
1824 muls.l d1,d7
1825 add.l d7,(a1)+
1826 move.l a4,d7
1827 muls.l d2,d7
1828 add.l d7,(a1)+
1830 subq.l #1,d0
1831 bne.b 0b
1832 bra.b 8f
1834 7: /* .abort */
1835 moveq #0,d5 /* Prevent the last add */
1836 moveq #0,d6
1837 8: /* .exit */
1838 move.w (0,a0,d3.l*4),d7 /* Fetch last endpoint */
1839 ext.l d7
1840 move.l d7,([StartPointLeft,sp])
1842 move.w (2,a0,d3.l*4),d7 /* Fetch last endpoint */
1843 ext.l d7
1844 move.l d7,([StartPointRight,sp])
1846 add.w d6,d4
1847 addx.l d5,d3
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])
1854 postlude
1857 _AddLofiWordsStereo:
1858 prelude
1860 tst.w (StopAtZero,sp)
1861 bne.b 1f
1862 tst.l d1
1863 bne.b 2f
1864 tst.l d2
1865 bne.b 2f
1866 bsr AddSilenceStereo
1867 bra 7f
1869 0: /* .next_sampleZ */
1870 add.w d6,d4
1871 addx.l d5,d3
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 */
1877 tst.l a5
1878 bgt.b 5f
1879 beq.b 6f
1880 tst.l a3
1881 bge.b 7f
1882 bra.b 6f
1883 5: /* .lastpoint_gtZ */
1884 tst.l a3
1885 ble.b 7f
1886 6: /* .lastpoint_checkedZ */
1887 move.l a3,a5 /* update lastsample */
1889 tst.l a6
1890 bgt.b 5f
1891 beq.b 6f
1892 tst.l a4
1893 bge.b 7f
1894 bra.b 6f
1895 5: /* .lastpoint_gtZ */
1896 tst.l a4
1897 ble.b 7f
1898 6: /* .lastpoint_checkedZ */
1899 move.l a4,a6 /* update lastsample */
1901 move.l a3,d7
1902 muls.l d1,d7
1903 swap.w d7
1904 add.w d7,(a1)+
1905 move.l a4,d7
1906 muls.l d2,d7
1907 swap.w d7
1908 add.w d7,(a1)+
1910 subq.l #1,d0
1911 bne.b 0b
1912 bra.b 8f
1914 0: /* .next_sample */
1915 add.w d6,d4
1916 addx.l d5,d3
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 */
1922 move.l a3,d7
1923 muls.l d1,d7
1924 swap.w d7
1925 add.w d7,(a1)+
1926 move.l a4,d7
1927 muls.l d2,d7
1928 swap.w d7
1929 add.w d7,(a1)+
1931 subq.l #1,d0
1932 bne.b 0b
1933 bra.b 8f
1935 7: /* .abort */
1936 moveq #0,d5 /* Prevent the last add */
1937 moveq #0,d6
1938 8: /* .exit */
1939 add.w d6,d4
1940 addx.l d5,d3
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])
1947 postlude
1950 ###############################################################################
1952 _AddByteMonoB:
1953 prelude
1954 neg.w d4
1956 tst.w (StopAtZero,sp)
1957 bne.b 1f
1958 tst.l d1
1959 bne.b 2f
1960 bsr AddSilenceMonoB
1961 bra 7f
1963 0: /* .next_sampleZ */
1964 add.w d6,d4
1965 subx.l d5,d3
1966 1: /* .first_sampleZ */
1967 cmp.l a2,d3
1968 bne.b 3f
1969 move.l ([StartPointLeft,sp]),a3
1970 bra.b 4f
1971 3: /* .not_firstZ */
1972 move.b (1,a0,d3.l),d7
1973 lsl.w #8,d7
1974 move.w d7,a3 /* sign extend */
1975 4: /* .got_sampleZ */
1976 move.b (0,a0,d3.l),d7
1977 lsl.w #8,d7
1978 ext.l d7
1979 sub.l a3,d7
1980 asr.l #1,d7
1981 muls.l d4,d7
1982 asr.l #7,d7
1983 asr.l #8,d7
1984 add.l d7,a3
1986 tst.l a5
1987 bgt.b 5f
1988 beq.b 6f
1989 tst.l a3
1990 bge.b 7f
1991 bra.b 6f
1992 5: /* .lastpoint_gtZ */
1993 tst.l a3
1994 ble.b 7f
1995 6: /* .lastpoint_checkedZ */
1996 move.l a3,a5 /* update lastsample */
1998 move.l a3,d7
1999 muls.l d1,d7
2000 add.l d7,(a1)+
2002 subq.l #1,d0
2003 bne.b 0b
2004 bra.b 8f
2006 0: /* .next_sample */
2007 add.w d6,d4
2008 subx.l d5,d3
2009 2: /* .first_sample */
2010 cmp.l a2,d3
2011 bne.b 3f
2012 move.l ([StartPointLeft,sp]),a3
2013 bra.b 4f
2014 3: /* .not_first */
2015 move.b (1,a0,d3.l),d7
2016 lsl.w #8,d7
2017 move.w d7,a3 /* sign extend */
2018 4: /* .got_sample */
2019 move.b (0,a0,d3.l),d7
2020 lsl.w #8,d7
2021 ext.l d7
2022 sub.l a3,d7
2023 asr.l #1,d7
2024 muls.l d4,d7
2025 asr.l #7,d7
2026 asr.l #8,d7
2027 add.l d7,a3
2029 move.l a3,d7
2030 muls.l d1,d7
2031 add.l d7,(a1)+
2033 subq.l #1,d0
2034 bne.b 0b
2035 bra.b 8f
2037 7: /* .abort */
2038 moveq #0,d5 /* Prevent the last add */
2039 moveq #0,d6
2040 8: /* .exit */
2041 move.b (0,a0,d3.l),d7 /* Fetch last endpoint */
2042 lsl.w #8,d7
2043 ext.l d7
2044 move.l d7,([StartPointLeft,sp])
2046 add.w d6,d4
2047 subx.l d5,d3
2049 neg.w d4
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])
2055 postlude
2058 _AddLofiByteMonoB:
2059 prelude
2060 asr.l #8,d1
2061 asr.l #8,d2
2062 neg.w d4
2064 tst.w (StopAtZero,sp)
2065 bne.b 1f
2066 tst.l d1
2067 bne.b 2f
2068 bsr AddSilenceMonoB
2069 bra 7f
2071 0: /* .next_sampleZ */
2072 add.w d6,d4
2073 subx.l d5,d3
2074 1: /* .first_sampleZ */
2075 move.b (0,a0,d3.l),d7
2076 extb.l d7
2078 tst.l a5
2079 bgt.b 5f
2080 beq.b 6f
2081 tst.l d7
2082 bge.b 7f
2083 bra.b 6f
2084 5: /* .lastpoint_gtZ */
2085 tst.l d7
2086 ble.b 7f
2087 6: /* .lastpoint_checkedZ */
2088 move.l d7,a5 /* update lastsample */
2090 muls.w d1,d7
2091 add.w d7,(a1)+
2093 subq.l #1,d0
2094 bne.b 0b
2095 bra.b 8f
2097 0: /* .next_sample */
2098 add.w d6,d4
2099 subx.l d5,d3
2100 2: /* .first_sample */
2101 move.b (0,a0,d3.l),d7
2102 ext.w d7
2104 muls.w d1,d7
2105 add.w d7,(a1)+
2107 subq.l #1,d0
2108 bne.b 0b
2109 bra.b 8f
2111 7: /* .abort */
2112 moveq #0,d5 /* Prevent the last add */
2113 moveq #0,d6
2114 8: /* .exit */
2115 add.w d6,d4
2116 subx.l d5,d3
2118 neg.w d4
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])
2124 postlude
2127 ###############################################################################
2129 _AddBytesMonoB:
2130 prelude
2131 neg.w d4
2133 tst.w (StopAtZero,sp)
2134 bne.b 1f
2135 tst.l d1
2136 bne 2f
2137 bsr AddSilenceMonoB
2138 bra 7f
2140 0: /* .next_sampleZ */
2141 add.w d6,d4
2142 subx.l d5,d3
2143 1: /* .first_sampleZ */
2144 cmp.l a2,d3
2145 bne.b 3f
2146 move.l ([StartPointLeft,sp]),a3
2147 move.l ([StartPointRight,sp]),a4
2148 bra.b 4f
2149 3: /* .not_firstZ */
2150 move.b (2,a0,d3.l*2),d7
2151 lsl.w #8,d7
2152 move.w d7,a3 /* sign extend */
2153 move.b (3,a0,d3.l*2),d7
2154 lsl.w #8,d7
2155 move.w d7,a4 /* sign extend */
2156 4: /* .got_sampleZ */
2157 move.b (0,a0,d3.l*2),d7
2158 lsl.w #8,d7
2159 ext.l d7
2160 sub.l a3,d7
2161 asr.l #1,d7
2162 muls.l d4,d7
2163 asr.l #7,d7
2164 asr.l #8,d7
2165 add.l d7,a3
2167 move.b (1,a0,d3.l*2),d7
2168 lsl.w #8,d7
2169 ext.l d7
2170 sub.l a4,d7
2171 asr.l #1,d7
2172 muls.l d4,d7
2173 asr.l #7,d7
2174 asr.l #8,d7
2175 add.l d7,a4
2177 tst.l a5
2178 bgt.b 5f
2179 beq.b 6f
2180 tst.l a3
2181 bge 7f
2182 bra.b 6f
2183 5: /* .lastpoint_gtZ */
2184 tst.l a3
2185 ble 7f
2186 6: /* .lastpoint_checkedZ */
2187 move.l a3,a5 /* update lastsample */
2189 tst.l a6
2190 bgt.b 5f
2191 beq.b 6f
2192 tst.l a4
2193 bge 7f
2194 bra.b 6f
2195 5: /* .lastpoint_gtZ */
2196 tst.l a4
2197 ble 7f
2198 6: /* .lastpoint_checkedZ */
2199 move.l a4,a6 /* update lastsample */
2201 move.l a3,d7
2202 muls.l d1,d7
2203 add.l d7,(a1)
2204 move.l a4,d7
2205 muls.l d2,d7
2206 add.l d7,(a1)+
2208 subq.l #1,d0
2209 bne 0b
2210 bra.b 8f
2212 0: /* .next_sample */
2213 add.w d6,d4
2214 subx.l d5,d3
2215 2: /* .first_sample */
2216 cmp.l a2,d3
2217 bne.b 3f
2218 move.l ([StartPointLeft,sp]),a3
2219 move.l ([StartPointRight,sp]),a4
2220 bra.b 4f
2221 3: /* .not_first */
2222 move.b (2,a0,d3.l*2),d7
2223 lsl.w #8,d7
2224 move.w d7,a3 /* sign extend */
2225 move.b (3,a0,d3.l*2),d7
2226 lsl.w #8,d7
2227 move.w d7,a4 /* sign extend */
2228 4: /* .got_sample */
2229 move.b (0,a0,d3.l*2),d7
2230 lsl.w #8,d7
2231 ext.l d7
2232 sub.l a3,d7
2233 asr.l #1,d7
2234 muls.l d4,d7
2235 asr.l #7,d7
2236 asr.l #8,d7
2237 add.l d7,a3
2239 move.b (1,a0,d3.l*2),d7
2240 lsl.w #8,d7
2241 ext.l d7
2242 sub.l a4,d7
2243 asr.l #1,d7
2244 muls.l d4,d7
2245 asr.l #7,d7
2246 asr.l #8,d7
2247 add.l d7,a4
2249 move.l a3,d7
2250 muls.l d1,d7
2251 add.l d7,(a1)
2252 move.l a4,d7
2253 muls.l d2,d7
2254 add.l d7,(a1)+
2256 subq.l #1,d0
2257 bne.b 0b
2258 bra.b 8f
2260 7: /* .abort */
2261 moveq #0,d5 /* Prevent the last add */
2262 moveq #0,d6
2263 8: /* .exit */
2264 move.b (0,a0,d3.l*2),d7 /* Fetch last endpoint */
2265 lsl.w #8,d7
2266 ext.l d7
2267 move.l d7,([StartPointLeft,sp])
2269 move.b (1,a0,d3.l*2),d7 /* Fetch last endpoint */
2270 lsl.w #8,d7
2271 ext.l d7
2272 move.l d7,([StartPointRight,sp])
2274 add.w d6,d4
2275 subx.l d5,d3
2277 neg.w d4
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])
2283 postlude
2286 _AddLofiBytesMonoB:
2287 prelude
2288 asr.l #8,d1
2289 asr.l #8,d2
2290 neg.w d4
2292 tst.w (StopAtZero,sp)
2293 bne.b 1f
2294 tst.l d1
2295 bne.b 2f
2296 bsr AddSilenceMonoB
2297 bra 7f
2299 0: /* .next_sampleZ */
2300 add.w d6,d4
2301 subx.l d5,d3
2302 1: /* .first_sampleZ */
2303 move.b (0,a0,d3.l*2),d7
2304 ext.w d7
2305 move.w d7,a3 /* sign extend */
2307 move.b (1,a0,d3.l*2),d7
2308 ext.w d7
2309 move.w d7,a4 /* sign extend */
2311 tst.l a5
2312 bgt.b 5f
2313 beq.b 6f
2314 tst.l a3
2315 bge.b 7f
2316 bra.b 6f
2317 5: /* .lastpoint_gtZ */
2318 tst.l a3
2319 ble.b 7f
2320 6: /* .lastpoint_checkedZ */
2321 move.l a3,a5 /* update lastsample */
2323 tst.l a6
2324 bgt.b 5f
2325 beq.b 6f
2326 tst.l a4
2327 bge.b 7f
2328 bra.b 6f
2329 5: /* .lastpoint_gtZ */
2330 tst.l a4
2331 ble.b 7f
2332 6: /* .lastpoint_checkedZ */
2333 move.l a4,a6 /* update lastsample */
2335 move.l a3,d7
2336 muls.w d1,d7
2337 add.w d7,(a1)
2338 move.l a4,d7
2339 muls.w d2,d7
2340 add.w d7,(a1)+
2342 subq.l #1,d0
2343 bne.b 0b
2344 bra.b 8f
2346 0: /* .next_sample */
2347 add.w d6,d4
2348 subx.l d5,d3
2349 2: /* .first_sample */
2350 move.b (0,a0,d3.l*2),d7
2351 ext.w d7
2352 move.w d7,a3 /* sign extend */
2354 move.b (1,a0,d3.l*2),d7
2355 ext.w d7
2356 move.w d7,a4 /* sign extend */
2358 move.l a3,d7
2359 muls.w d1,d7
2360 add.w d7,(a1)
2361 move.l a4,d7
2362 muls.w d2,d7
2363 add.w d7,(a1)+
2365 subq.l #1,d0
2366 bne.b 0b
2367 bra.b 8f
2369 7: /* .abort */
2370 moveq #0,d5 /* Prevent the last add */
2371 moveq #0,d6
2372 8: /* .exit */
2373 add.w d6,d4
2374 subx.l d5,d3
2376 neg.w d4
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])
2382 postlude
2385 ###############################################################################
2387 _AddByteStereoB:
2388 prelude
2389 neg.w d4
2391 tst.w (StopAtZero,sp)
2392 bne.b 1f
2393 tst.l d1
2394 bne.b 2f
2395 tst.l d2
2396 bne.b 2f
2397 bsr AddSilenceStereoB
2398 bra 7f
2400 0: /* .next_sampleZ */
2401 add.w d6,d4
2402 subx.l d5,d3
2403 1: /* .first_sampleZ */
2404 cmp.l a2,d3
2405 bne.b 3f
2406 move.l ([StartPointLeft,sp]),a3
2407 bra.b 4f
2408 3: /* .not_firstZ */
2409 move.b (1,a0,d3.l),d7
2410 lsl.w #8,d7
2411 move.w d7,a3 /* sign extend */
2412 4: /* .got_sampleZ */
2413 move.b (0,a0,d3.l),d7
2414 lsl.w #8,d7
2415 ext.l d7
2416 sub.l a3,d7
2417 asr.l #1,d7
2418 muls.l d4,d7
2419 asr.l #7,d7
2420 asr.l #8,d7
2421 add.l d7,a3
2423 tst.l a5
2424 bgt.b 5f
2425 beq.b 6f
2426 tst.l a3
2427 bge.b 7f
2428 bra.b 6f
2429 5: /* .lastpoint_gtZ */
2430 tst.l a3
2431 ble.b 7f
2432 6: /* .lastpoint_checkedZ */
2433 move.l a3,a5 /* update lastsample */
2435 move.l a3,d7
2436 muls.l d1,d7
2437 add.l d7,(a1)+
2438 move.l a3,d7
2439 muls.l d2,d7
2440 add.l d7,(a1)+
2442 subq.l #1,d0
2443 bne.b 0b
2444 bra.b 8f
2446 0: /* .next_sample */
2447 add.w d6,d4
2448 subx.l d5,d3
2449 2: /* .first_sample */
2450 cmp.l a2,d3
2451 bne.b 3f
2452 move.l ([StartPointLeft,sp]),a3
2453 bra.b 4f
2454 3: /* .not_first */
2455 move.b (1,a0,d3.l),d7
2456 lsl.w #8,d7
2457 move.w d7,a3 /* sign extend */
2458 4: /* .got_sample */
2459 move.b (0,a0,d3.l),d7
2460 lsl.w #8,d7
2461 ext.l d7
2462 sub.l a3,d7
2463 asr.l #1,d7
2464 muls.l d4,d7
2465 asr.l #7,d7
2466 asr.l #8,d7
2467 add.l d7,a3
2469 move.l a3,d7
2470 muls.l d1,d7
2471 add.l d7,(a1)+
2472 move.l a3,d7
2473 muls.l d2,d7
2474 add.l d7,(a1)+
2476 subq.l #1,d0
2477 bne.b 0b
2478 bra.b 8f
2480 7: /* .abort */
2481 moveq #0,d5 /* Prevent the last add */
2482 moveq #0,d6
2483 8: /* .exit */
2484 move.b (0,a0,d3.l),d7 /* Fetch last endpoint */
2485 lsl.w #8,d7
2486 ext.l d7
2487 move.l d7,([StartPointLeft,sp])
2489 add.w d6,d4
2490 subx.l d5,d3
2492 neg.w d4
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])
2498 postlude
2501 _AddLofiByteStereoB:
2502 prelude
2503 asr.l #8,d1
2504 asr.l #8,d2
2505 neg.w d4
2507 tst.w (StopAtZero,sp)
2508 bne.b 1f
2509 tst.l d1
2510 bne.b 2f
2511 tst.l d2
2512 bne.b 2f
2513 bsr AddSilenceStereoB
2514 bra 7f
2516 0: /* .next_sampleZ */
2517 add.w d6,d4
2518 subx.l d5,d3
2519 1: /* .first_sampleZ */
2520 move.b (0,a0,d3.l),d7
2521 ext.w d7
2522 move.w d7,a3 /* sign extend */
2524 tst.l a5
2525 bgt.b 5f
2526 beq.b 6f
2527 tst.l a3
2528 bge.b 7f
2529 bra.b 6f
2530 5: /* .lastpoint_gtZ */
2531 tst.l a3
2532 ble.b 7f
2533 6: /* .lastpoint_checkedZ */
2534 move.l a3,a5 /* update lastsample */
2536 muls.w d1,d7
2537 add.w d7,(a1)+
2538 move.l a3,d7
2539 muls.w d2,d7
2540 add.w d7,(a1)+
2542 subq.l #1,d0
2543 bne.b 0b
2544 bra.b 8f
2546 0: /* .next_sample */
2547 add.w d6,d4
2548 subx.l d5,d3
2549 2: /* .first_sample */
2550 move.b (0,a0,d3.l),d7
2551 ext.w d7
2552 move.w d7,a3 /* sign extend */
2554 muls.w d1,d7
2555 add.w d7,(a1)+
2556 move.l a3,d7
2557 muls.w d2,d7
2558 add.w d7,(a1)+
2560 subq.l #1,d0
2561 bne.b 0b
2562 bra.b 8f
2564 7: /* .abort */
2565 moveq #0,d5 /* Prevent the last add */
2566 moveq #0,d6
2567 8: /* .exit */
2568 add.w d6,d4
2569 subx.l d5,d3
2571 neg.w d4
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])
2577 postlude
2580 ###############################################################################
2582 _AddBytesStereoB:
2583 prelude
2584 neg.w d4
2586 tst.w (StopAtZero,sp)
2587 bne.b 1f
2588 tst.l d1
2589 bne 2f
2590 tst.l d2
2591 bne 2f
2592 bsr AddSilenceStereoB
2593 bra 7f
2595 0: /* .next_sampleZ */
2596 add.w d6,d4
2597 subx.l d5,d3
2598 1: /* .first_sampleZ */
2599 cmp.l a2,d3
2600 bne.b 3f
2601 move.l ([StartPointLeft,sp]),a3
2602 move.l ([StartPointRight,sp]),a4
2603 bra.b 4f
2604 3: /* .not_firstZ */
2605 move.b (2,a0,d3.l*2),d7
2606 lsl.w #8,d7
2607 move.w d7,a3 /* sign extend */
2608 move.b (3,a0,d3.l*2),d7
2609 lsl.w #8,d7
2610 move.w d7,a4 /* sign extend */
2611 4: /* .got_sampleZ */
2612 move.b (0,a0,d3.l*2),d7
2613 lsl.w #8,d7
2614 ext.l d7
2615 sub.l a3,d7
2616 asr.l #1,d7
2617 muls.l d4,d7
2618 asr.l #7,d7
2619 asr.l #8,d7
2620 add.l d7,a3
2622 move.b (1,a0,d3.l*2),d7
2623 lsl.w #8,d7
2624 ext.l d7
2625 sub.l a4,d7
2626 asr.l #1,d7
2627 muls.l d4,d7
2628 asr.l #7,d7
2629 asr.l #8,d7
2630 add.l d7,a4
2632 tst.l a5
2633 bgt.b 5f
2634 beq.b 6f
2635 tst.l a3
2636 bge 7f
2637 bra.b 6f
2638 5: /* .lastpoint_gtZ */
2639 tst.l a3
2640 ble 7f
2641 6: /* .lastpoint_checkedZ */
2642 move.l a3,a5 /* update lastsample */
2644 tst.l a6
2645 bgt.b 5f
2646 beq.b 6f
2647 tst.l a4
2648 bge 7f
2649 bra.b 6f
2650 5: /* .lastpoint_gtZ */
2651 tst.l a4
2652 ble 7f
2653 6: /* .lastpoint_checkedZ */
2654 move.l a4,a6 /* update lastsample */
2656 move.l a3,d7
2657 muls.l d1,d7
2658 add.l d7,(a1)+
2659 move.l a4,d7
2660 muls.l d2,d7
2661 add.l d7,(a1)+
2663 subq.l #1,d0
2664 bne 0b
2665 bra.b 8f
2667 0: /* .next_sample */
2668 add.w d6,d4
2669 subx.l d5,d3
2670 2: /* .first_sample */
2671 cmp.l a2,d3
2672 bne.b 3f
2673 move.l ([StartPointLeft,sp]),a3
2674 move.l ([StartPointRight,sp]),a4
2675 bra.b 4f
2676 3: /* .not_first */
2677 move.b (2,a0,d3.l*2),d7
2678 lsl.w #8,d7
2679 move.w d7,a3 /* sign extend */
2680 move.b (3,a0,d3.l*2),d7
2681 lsl.w #8,d7
2682 move.w d7,a4 /* sign extend */
2683 4: /* .got_sample */
2684 move.b (0,a0,d3.l*2),d7
2685 lsl.w #8,d7
2686 ext.l d7
2687 sub.l a3,d7
2688 asr.l #1,d7
2689 muls.l d4,d7
2690 asr.l #7,d7
2691 asr.l #8,d7
2692 add.l d7,a3
2694 move.b (1,a0,d3.l*2),d7
2695 lsl.w #8,d7
2696 ext.l d7
2697 sub.l a4,d7
2698 asr.l #1,d7
2699 muls.l d4,d7
2700 asr.l #7,d7
2701 asr.l #8,d7
2702 add.l d7,a4
2704 move.l a3,d7
2705 muls.l d1,d7
2706 add.l d7,(a1)+
2707 move.l a4,d7
2708 muls.l d2,d7
2709 add.l d7,(a1)+
2711 subq.l #1,d0
2712 bne.b 0b
2713 bra.b 8f
2715 7: /* .abort */
2716 moveq #0,d5 /* Prevent the last add */
2717 moveq #0,d6
2718 8: /* .exit */
2719 move.b (0,a0,d3.l*2),d7 /* Fetch last endpoint */
2720 lsl.w #8,d7
2721 ext.l d7
2722 move.l d7,([StartPointLeft,sp])
2724 move.b (1,a0,d3.l*2),d7 /* Fetch last endpoint */
2725 lsl.w #8,d7
2726 ext.l d7
2727 move.l d7,([StartPointRight,sp])
2729 add.w d6,d4
2730 subx.l d5,d3
2732 neg.w d4
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])
2738 postlude
2741 _AddLofiBytesStereoB:
2742 prelude
2743 asr.l #8,d1
2744 asr.l #8,d2
2745 neg.w d4
2747 tst.w (StopAtZero,sp)
2748 bne.b 1f
2749 tst.l d1
2750 bne.b 2f
2751 tst.l d2
2752 bne.b 2f
2753 bsr AddSilenceStereoB
2754 bra 7f
2756 0: /* .next_sampleZ */
2757 add.w d6,d4
2758 subx.l d5,d3
2759 1: /* .first_sampleZ */
2760 move.b (0,a0,d3.l*2),d7
2761 ext.w d7
2762 move.w d7,a3 /* sign extend */
2764 move.b (1,a0,d3.l*2),d7
2765 ext.w d7
2766 move.w d7,a4 /* sign extend */
2768 tst.l a5
2769 bgt.b 5f
2770 beq.b 6f
2771 tst.l a3
2772 bge.b 7f
2773 bra.b 6f
2774 5: /* .lastpoint_gtZ */
2775 tst.l a3
2776 ble.b 7f
2777 6: /* .lastpoint_checkedZ */
2778 move.l a3,a5 /* update lastsample */
2780 tst.l a6
2781 bgt.b 5f
2782 beq.b 6f
2783 tst.l a4
2784 bge.b 7f
2785 bra.b 6f
2786 5: /* .lastpoint_gtZ */
2787 tst.l a4
2788 ble.b 7f
2789 6: /* .lastpoint_checkedZ */
2790 move.l a4,a6 /* update lastsample */
2792 move.l a3,d7
2793 muls.w d1,d7
2794 add.w d7,(a1)+
2795 move.l a4,d7
2796 muls.w d2,d7
2797 add.w d7,(a1)+
2799 subq.l #1,d0
2800 bne.b 0b
2801 bra.b 8f
2803 0: /* .next_sample */
2804 add.w d6,d4
2805 subx.l d5,d3
2806 2: /* .first_sample */
2807 move.b (0,a0,d3.l*2),d7
2808 ext.w d7
2809 move.w d7,a3 /* sign extend */
2811 move.b (1,a0,d3.l*2),d7
2812 ext.w d7
2813 move.w d7,a4 /* sign extend */
2815 move.l a3,d7
2816 muls.w d1,d7
2817 add.w d7,(a1)+
2818 move.l a4,d7
2819 muls.w d2,d7
2820 add.w d7,(a1)+
2822 subq.l #1,d0
2823 bne.b 0b
2824 bra.b 8f
2826 7: /* .abort */
2827 moveq #0,d5 /* Prevent the last add */
2828 moveq #0,d6
2829 8: /* .exit */
2830 add.w d6,d4
2831 subx.l d5,d3
2833 neg.w d4
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])
2839 postlude
2842 ###############################################################################
2844 _AddWordMonoB:
2845 prelude
2846 neg.w d4
2848 tst.w (StopAtZero,sp)
2849 bne.b 1f
2850 tst.l d1
2851 bne.b 2f
2852 bsr AddSilenceMonoB
2853 bra 7f
2855 0: /* .next_sampleZ */
2856 add.w d6,d4
2857 subx.l d5,d3
2858 1: /* .first_sampleZ */
2859 cmp.l a2,d3
2860 bne.b 3f
2861 move.l ([StartPointLeft,sp]),a3
2862 bra.b 4f
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
2867 ext.l d7
2868 sub.l a3,d7
2869 asr.l #1,d7
2870 muls.l d4,d7
2871 asr.l #7,d7
2872 asr.l #8,d7
2873 add.l d7,a3
2875 tst.l a5
2876 bgt.b 5f
2877 beq.b 6f
2878 tst.l a3
2879 bge.b 7f
2880 bra.b 6f
2881 5: /* .lastpoint_gtZ */
2882 tst.l a3
2883 ble.b 7f
2884 6: /* .lastpoint_checkedZ */
2885 move.l a3,a5 /* update lastsample */
2887 move.l a3,d7
2888 muls.l d1,d7
2889 add.l d7,(a1)+
2891 subq.l #1,d0
2892 bne.b 0b
2893 bra.b 8f
2895 0: /* .next_sample */
2896 add.w d6,d4
2897 subx.l d5,d3
2898 2: /* .first_sample */
2899 cmp.l a2,d3
2900 bne.b 3f
2901 move.l ([StartPointLeft,sp]),a3
2902 bra.b 4f
2903 3: /* .not_first */
2904 move.w (2,a0,d3.l*2),a3 /* sign extend */
2905 4: /* .got_sample */
2906 move.w (0,a0,d3.l*2),d7
2907 ext.l d7
2908 sub.l a3,d7
2909 asr.l #1,d7
2910 muls.l d4,d7
2911 asr.l #7,d7
2912 asr.l #8,d7
2913 add.l d7,a3
2915 move.l a3,d7
2916 muls.l d1,d7
2917 add.l d7,(a1)+
2919 subq.l #1,d0
2920 bne.b 0b
2921 bra.b 8f
2923 7: /* .abort */
2924 moveq #0,d5 /* Prevent the last add */
2925 moveq #0,d6
2926 8: /* .exit */
2927 move.w (0,a0,d3.l*2),d7 /* Fetch last endpoint */
2928 ext.l d7
2929 move.l d7,([StartPointLeft,sp])
2931 add.w d6,d4
2932 subx.l d5,d3
2934 neg.w d4
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])
2940 postlude
2943 _AddLofiWordMonoB:
2944 prelude
2945 neg.w d4
2947 tst.w (StopAtZero,sp)
2948 bne.b 1f
2949 tst.l d1
2950 bne.b 2f
2951 bsr AddSilenceMonoB
2952 bra 7f
2954 0: /* .next_sampleZ */
2955 add.w d6,d4
2956 subx.l d5,d3
2957 1: /* .first_sampleZ */
2958 move.w (0,a0,d3.l*2),a3 /* sign extend */
2960 tst.l a5
2961 bgt.b 5f
2962 beq.b 6f
2963 tst.l a3
2964 bge.b 7f
2965 bra.b 6f
2966 5: /* .lastpoint_gtZ */
2967 tst.l a3
2968 ble.b 7f
2969 6: /* .lastpoint_checkedZ */
2970 move.l a3,a5 /* update lastsample */
2972 move.l a3,d7
2973 muls.l d1,d7
2974 swap.w d7
2975 add.w d7,(a1)+
2977 subq.l #1,d0
2978 bne.b 0b
2979 bra.b 8f
2981 0: /* .next_sample */
2982 add.w d6,d4
2983 subx.l d5,d3
2984 2: /* .first_sample */
2985 move.w (0,a0,d3.l*2),a3 /* sign extend */
2987 move.l a3,d7
2988 muls.l d1,d7
2989 swap.w d7
2990 add.w d7,(a1)+
2992 subq.l #1,d0
2993 bne.b 0b
2994 bra.b 8f
2996 7: /* .abort */
2997 moveq #0,d5 /* Prevent the last add */
2998 moveq #0,d6
2999 8: /* .exit */
3000 add.w d6,d4
3001 subx.l d5,d3
3003 neg.w d4
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])
3009 postlude
3012 ###############################################################################
3014 _AddWordsMonoB:
3015 prelude
3016 neg.w d4
3018 tst.w (StopAtZero,sp)
3019 bne.b 1f
3020 tst.l d1
3021 bne 2f
3022 tst.l d2
3023 bne 2f
3024 bsr AddSilenceMonoB
3025 bra 7f
3027 0: /* .next_sampleZ */
3028 add.w d6,d4
3029 subx.l d5,d3
3030 1: /* .first_sampleZ */
3031 cmp.l a2,d3
3032 bne.b 3f
3033 move.l ([StartPointLeft,sp]),a3
3034 move.l ([StartPointRight,sp]),a4
3035 bra.b 4f
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
3041 ext.l d7
3042 sub.l a3,d7
3043 asr.l #1,d7
3044 muls.l d4,d7
3045 asr.l #7,d7
3046 asr.l #8,d7
3047 add.l d7,a3
3049 move.w (2,a0,d3.l*4),d7
3050 ext.l d7
3051 sub.l a4,d7
3052 asr.l #1,d7
3053 muls.l d4,d7
3054 asr.l #7,d7
3055 asr.l #8,d7
3056 add.l d7,a4
3058 tst.l a5
3059 bgt.b 5f
3060 beq.b 6f
3061 tst.l a3
3062 bge 7f
3063 bra.b 6f
3064 5: /* .lastpoint_gtZ */
3065 tst.l a3
3066 ble 7f
3067 6: /* .lastpoint_checkedZ */
3068 move.l a3,a5 /* update lastsample */
3070 tst.l a6
3071 bgt.b 5f
3072 beq.b 6f
3073 tst.l a4
3074 bge.b 7f
3075 bra.b 6f
3076 5: /* .lastpoint_gtZ */
3077 tst.l a4
3078 ble.b 7f
3079 6: /* .lastpoint_checkedZ */
3080 move.l a4,a6 /* update lastsample */
3082 move.l a3,d7
3083 muls.l d1,d7
3084 add.l d7,(a1)
3085 move.l a4,d7
3086 muls.l d2,d7
3087 add.l d7,(a1)+
3089 subq.l #1,d0
3090 bne 0b
3091 bra.b 8f
3093 0: /* .next_sample */
3094 add.w d6,d4
3095 subx.l d5,d3
3096 2: /* .first_sample */
3097 cmp.l a2,d3
3098 bne.b 3f
3099 move.l ([StartPointLeft,sp]),a3
3100 move.l ([StartPointRight,sp]),a4
3101 bra.b 4f
3102 3: /* .not_first */
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
3107 ext.l d7
3108 sub.l a3,d7
3109 asr.l #1,d7
3110 muls.l d4,d7
3111 asr.l #7,d7
3112 asr.l #8,d7
3113 add.l d7,a3
3115 move.w (2,a0,d3.l*4),d7
3116 ext.l d7
3117 sub.l a4,d7
3118 asr.l #1,d7
3119 muls.l d4,d7
3120 asr.l #7,d7
3121 asr.l #8,d7
3122 add.l d7,a4
3124 move.l a3,d7
3125 muls.l d1,d7
3126 add.l d7,(a1)
3127 move.l a4,d7
3128 muls.l d2,d7
3129 add.l d7,(a1)+
3131 subq.l #1,d0
3132 bne.b 0b
3133 bra.b 8f
3135 7: /* .abort */
3136 moveq #0,d5 /* Prevent the last add */
3137 moveq #0,d6
3138 8: /* .exit */
3139 move.w (0,a0,d3.l*4),d7 /* Fetch last endpoint */
3140 ext.l d7
3141 move.l d7,([StartPointLeft,sp])
3143 move.w (2,a0,d3.l*4),d7 /* Fetch last endpoint */
3144 ext.l d7
3145 move.l d7,([StartPointRight,sp])
3147 add.w d6,d4
3148 subx.l d5,d3
3150 neg.w d4
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])
3156 postlude
3159 _AddLofiWordsMonoB:
3160 prelude
3161 neg.w d4
3163 tst.w (StopAtZero,sp)
3164 bne.b 1f
3165 tst.l d1
3166 bne.b 2f
3167 tst.l d2
3168 bne.b 2f
3169 bsr AddSilenceMonoB
3170 bra 7f
3172 0: /* .next_sampleZ */
3173 add.w d6,d4
3174 subx.l d5,d3
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 */
3180 tst.l a5
3181 bgt.b 5f
3182 beq.b 6f
3183 tst.l a3
3184 bge.b 7f
3185 bra.b 6f
3186 5: /* .lastpoint_gtZ */
3187 tst.l a3
3188 ble.b 7f
3189 6: /* .lastpoint_checkedZ */
3190 move.l a3,a5 /* update lastsample */
3192 tst.l a6
3193 bgt.b 5f
3194 beq.b 6f
3195 tst.l a4
3196 bge.b 7f
3197 bra.b 6f
3198 5: /* .lastpoint_gtZ */
3199 tst.l a4
3200 ble.b 7f
3201 6: /* .lastpoint_checkedZ */
3202 move.l a4,a6 /* update lastsample */
3204 move.l a3,d7
3205 muls.l d1,d7
3206 swap.w d7
3207 add.w d7,(a1)
3208 move.l a4,d7
3209 muls.w d2,d7
3210 swap.w d7
3211 add.w d7,(a1)+
3213 subq.l #1,d0
3214 bne.b 0b
3215 bra.b 8f
3217 0: /* .next_sample */
3218 add.w d6,d4
3219 subx.l d5,d3
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 */
3225 move.l a3,d7
3226 muls.w d1,d7
3227 swap.w d7
3228 add.w d7,(a1)
3229 move.l a4,d7
3230 muls.l d2,d7
3231 swap.w d7
3232 add.w d7,(a1)+
3234 subq.l #1,d0
3235 bne.b 0b
3236 bra.b 8f
3238 7: /* .abort */
3239 moveq #0,d5 /* Prevent the last add */
3240 moveq #0,d6
3241 8: /* .exit */
3242 add.w d6,d4
3243 subx.l d5,d3
3245 neg.w d4
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])
3251 postlude
3254 ###############################################################################
3256 _AddWordStereoB:
3257 prelude
3258 neg.w d4
3260 tst.w (StopAtZero,sp)
3261 bne.b 1f
3262 tst.l d1
3263 bne.b 2f
3264 tst.l d2
3265 bne.b 2f
3266 bsr AddSilenceStereoB
3267 bra 7f
3269 0: /* .next_sampleZ */
3270 add.w d6,d4
3271 subx.l d5,d3
3272 1: /* .first_sampleZ */
3273 cmp.l a2,d3
3274 bne.b 3f
3275 move.l ([StartPointLeft,sp]),a3
3276 bra.b 4f
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
3281 ext.l d7
3282 sub.l a3,d7
3283 asr.l #1,d7
3284 muls.l d4,d7
3285 asr.l #7,d7
3286 asr.l #8,d7
3287 add.l d7,a3
3289 tst.l a5
3290 bgt.b 5f
3291 beq.b 6f
3292 tst.l a3
3293 bge.b 7f
3294 bra.b 6f
3295 5: /* .lastpoint_gtZ */
3296 tst.l a3
3297 ble.b 7f
3298 6: /* .lastpoint_checkedZ */
3299 move.l a3,a5 /* update lastsample */
3301 move.l a3,d7
3302 muls.l d1,d7
3303 add.l d7,(a1)+
3304 move.l a3,d7
3305 muls.l d2,d7
3306 add.l d7,(a1)+
3308 subq.l #1,d0
3309 bne.b 0b
3310 bra.b 8f
3312 0: /* .next_sample */
3313 add.w d6,d4
3314 subx.l d5,d3
3315 2: /* .first_sample */
3316 cmp.l a2,d3
3317 bne.b 3f
3318 move.l ([StartPointLeft,sp]),a3
3319 bra.b 4f
3320 3: /* .not_first */
3321 move.w (2,a0,d3.l*2),a3 /* sign extend */
3322 4: /* .got_sample */
3323 move.w (0,a0,d3.l*2),d7
3324 ext.l d7
3325 sub.l a3,d7
3326 asr.l #1,d7
3327 muls.l d4,d7
3328 asr.l #7,d7
3329 asr.l #8,d7
3330 add.l d7,a3
3332 move.l a3,d7
3333 muls.l d1,d7
3334 add.l d7,(a1)+
3335 move.l a3,d7
3336 muls.l d2,d7
3337 add.l d7,(a1)+
3339 subq.l #1,d0
3340 bne.b 0b
3341 bra.b 8f
3343 7: /* .abort */
3344 moveq #0,d5 /* Prevent the last add */
3345 moveq #0,d6
3346 8: /* .exit */
3347 move.w (0,a0,d3.l*2),d7 /* Fetch last endpoint */
3348 ext.l d7
3349 move.l d7,([StartPointLeft,sp])
3351 add.w d6,d4
3352 subx.l d5,d3
3354 neg.w d4
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])
3360 postlude
3363 _AddLofiWordStereoB:
3364 prelude
3365 neg.w d4
3367 tst.w (StopAtZero,sp)
3368 bne.b 1f
3369 tst.l d1
3370 bne.b 2f
3371 tst.l d2
3372 bne.b 2f
3373 bsr AddSilenceStereoB
3374 bra 7f
3376 0: /* .next_sampleZ */
3377 add.w d6,d4
3378 subx.l d5,d3
3379 1: /* .first_sampleZ */
3380 move.w (0,a0,d3.l*2),a3 /* sign extend */
3382 tst.l a5
3383 bgt.b 5f
3384 beq.b 6f
3385 tst.l a3
3386 bge.b 7f
3387 bra.b 6f
3388 5: /* .lastpoint_gtZ */
3389 tst.l a3
3390 ble.b 7f
3391 6: /* .lastpoint_checkedZ */
3392 move.l a3,a5 /* update lastsample */
3394 move.l a3,d7
3395 muls.l d1,d7
3396 swap.w d7
3397 add.w d7,(a1)+
3398 move.l a3,d7
3399 muls.l d2,d7
3400 swap.w d7
3401 add.w d7,(a1)+
3403 subq.l #1,d0
3404 bne.b 0b
3405 bra.b 8f
3407 0: /* .next_sample */
3408 add.w d6,d4
3409 subx.l d5,d3
3410 2: /* .first_sample */
3411 move.w (0,a0,d3.l*2),a3 /* sign extend */
3413 move.l a3,d7
3414 muls.l d1,d7
3415 swap.w d7
3416 add.w d7,(a1)+
3417 move.l a3,d7
3418 muls.l d2,d7
3419 swap.w d7
3420 add.w d7,(a1)+
3422 subq.l #1,d0
3423 bne.b 0b
3424 bra.b 8f
3426 7: /* .abort */
3427 moveq #0,d5 /* Prevent the last add */
3428 moveq #0,d6
3429 8: /* .exit */
3430 add.w d6,d4
3431 subx.l d5,d3
3433 neg.w d4
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])
3439 postlude
3442 ###############################################################################
3444 _AddWordsStereoB:
3445 prelude
3446 neg.w d4
3448 tst.w (StopAtZero,sp)
3449 bne.b 1f
3450 tst.l d1
3451 bne 2f
3452 tst.l d2
3453 bne 2f
3454 bsr AddSilenceStereoB
3455 bra 7f
3457 0: /* .next_sampleZ */
3458 add.w d6,d4
3459 subx.l d5,d3
3460 1: /* .first_sampleZ */
3461 cmp.l a2,d3
3462 bne.b 3f
3463 move.l ([StartPointLeft,sp]),a3
3464 move.l ([StartPointRight,sp]),a4
3465 bra.b 4f
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
3471 ext.l d7
3472 sub.l a3,d7
3473 asr.l #1,d7
3474 muls.l d4,d7
3475 asr.l #7,d7
3476 asr.l #8,d7
3477 add.l d7,a3
3479 move.w (2,a0,d3.l*4),d7
3480 ext.l d7
3481 sub.l a4,d7
3482 asr.l #1,d7
3483 muls.l d4,d7
3484 asr.l #7,d7
3485 asr.l #8,d7
3486 add.l d7,a4
3488 tst.l a5
3489 bgt.b 5f
3490 beq.b 6f
3491 tst.l a3
3492 bge 7f
3493 bra.b 6f
3494 5: /* .lastpoint_gtZ */
3495 tst.l a3
3496 ble 7f
3497 6: /* .lastpoint_checkedZ */
3498 move.l a3,a5 /* update lastsample */
3500 tst.l a6
3501 bgt.b 5f
3502 beq.b 6f
3503 tst.l a4
3504 bge.b 7f
3505 bra.b 6f
3506 5: /* .lastpoint_gtZ */
3507 tst.l a4
3508 ble.b 7f
3509 6: /* .lastpoint_checkedZ */
3510 move.l a4,a6 /* update lastsample */
3512 move.l a3,d7
3513 muls.l d1,d7
3514 add.l d7,(a1)+
3515 move.l a4,d7
3516 muls.l d2,d7
3517 add.l d7,(a1)+
3519 subq.l #1,d0
3520 bne 0b
3521 bra.b 8f
3523 0: /* .next_sample */
3524 add.w d6,d4
3525 subx.l d5,d3
3526 2: /* .first_sample */
3527 cmp.l a2,d3
3528 bne.b 3f
3529 move.l ([StartPointLeft,sp]),a3
3530 move.l ([StartPointRight,sp]),a4
3531 bra.b 4f
3532 3: /* .not_first */
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
3537 ext.l d7
3538 sub.l a3,d7
3539 asr.l #1,d7
3540 muls.l d4,d7
3541 asr.l #7,d7
3542 asr.l #8,d7
3543 add.l d7,a3
3545 move.w (2,a0,d3.l*4),d7
3546 ext.l d7
3547 sub.l a4,d7
3548 asr.l #1,d7
3549 muls.l d4,d7
3550 asr.l #7,d7
3551 asr.l #8,d7
3552 add.l d7,a4
3554 move.l a3,d7
3555 muls.l d1,d7
3556 add.l d7,(a1)+
3557 move.l a4,d7
3558 muls.l d2,d7
3559 add.l d7,(a1)+
3561 subq.l #1,d0
3562 bne.b 0b
3563 bra.b 8f
3565 7: /* .abort */
3566 moveq #0,d5 /* Prevent the last add */
3567 moveq #0,d6
3568 8: /* .exit */
3569 move.w (0,a0,d3.l*4),d7 /* Fetch last endpoint */
3570 ext.l d7
3571 move.l d7,([StartPointLeft,sp])
3573 move.w (2,a0,d3.l*4),d7 /* Fetch last endpoint */
3574 ext.l d7
3575 move.l d7,([StartPointRight,sp])
3577 add.w d6,d4
3578 subx.l d5,d3
3580 neg.w d4
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])
3586 postlude
3589 _AddLofiWordsStereoB:
3590 prelude
3591 neg.w d4
3593 tst.w (StopAtZero,sp)
3594 bne.b 1f
3595 tst.l d1
3596 bne.b 2f
3597 tst.l d2
3598 bne.b 2f
3599 bsr AddSilenceStereoB
3600 bra 7f
3602 0: /* .next_sampleZ */
3603 add.w d6,d4
3604 subx.l d5,d3
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 */
3610 tst.l a5
3611 bgt.b 5f
3612 beq.b 6f
3613 tst.l a3
3614 bge.b 7f
3615 bra.b 6f
3616 5: /* .lastpoint_gtZ */
3617 tst.l a3
3618 ble.b 7f
3619 6: /* .lastpoint_checkedZ */
3620 move.l a3,a5 /* update lastsample */
3622 tst.l a6
3623 bgt.b 5f
3624 beq.b 6f
3625 tst.l a4
3626 bge.b 7f
3627 bra.b 6f
3628 5: /* .lastpoint_gtZ */
3629 tst.l a4
3630 ble.b 7f
3631 6: /* .lastpoint_checkedZ */
3632 move.l a4,a6 /* update lastsample */
3634 move.l a3,d7
3635 muls.l d1,d7
3636 swap.w d7
3637 add.w d7,(a1)+
3638 move.l a4,d7
3639 muls.l d2,d7
3640 swap.w d7
3641 add.w d7,(a1)+
3643 subq.l #1,d0
3644 bne.b 0b
3645 bra.b 8f
3647 0: /* .next_sample */
3648 add.w d6,d4
3649 subx.l d5,d3
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 */
3655 move.l a3,d7
3656 muls.l d1,d7
3657 swap.w d7
3658 add.w d7,(a1)+
3659 move.l a4,d7
3660 muls.l d2,d7
3661 swap.w d7
3662 add.w d7,(a1)+
3664 subq.l #1,d0
3665 bne.b 0b
3666 bra.b 8f
3668 7: /* .abort */
3669 moveq #0,d5 /* Prevent the last add */
3670 moveq #0,d6
3671 8: /* .exit */
3672 add.w d6,d4
3673 subx.l d5,d3
3675 neg.w d4
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])
3681 postlude
3684 .end