summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/codecs/libmad/synth.c308
1 files changed, 141 insertions, 167 deletions
diff --git a/apps/codecs/libmad/synth.c b/apps/codecs/libmad/synth.c
index 0e7c683783..19129fc7b5 100644
--- a/apps/codecs/libmad/synth.c
+++ b/apps/codecs/libmad/synth.c
@@ -577,6 +577,140 @@ void synth_full(struct mad_synth *, struct mad_frame const *,
577 577
578/* optimised version of synth_full */ 578/* optimised version of synth_full */
579# ifdef FPM_COLDFIRE_EMAC 579# ifdef FPM_COLDFIRE_EMAC
580
581#define SYNTH_EMAC1(res, f1, pD) \
582 asm volatile( \
583 "movem.l (%1), %%d0-%%d7 \n\t" \
584 "move.l (%2), %%a5 \n\t" \
585 "mac.l %%d0, %%a5, 56(%2), %%a5, %%acc0\n\t" \
586 "mac.l %%d1, %%a5, 48(%2), %%a5, %%acc0\n\t" \
587 "mac.l %%d2, %%a5, 40(%2), %%a5, %%acc0\n\t" \
588 "mac.l %%d3, %%a5, 32(%2), %%a5, %%acc0\n\t" \
589 "mac.l %%d4, %%a5, 24(%2), %%a5, %%acc0\n\t" \
590 "mac.l %%d5, %%a5, 16(%2), %%a5, %%acc0\n\t" \
591 "mac.l %%d6, %%a5, 8(%2), %%a5, %%acc0\n\t" \
592 "mac.l %%d7, %%a5, %%acc0\n\t" \
593 "movclr.l %%acc0, %0 \n\t" \
594 : "=r" (res) \
595 : "a" (*f1), "a" (*pD) \
596 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5");
597
598#define SYNTH_EMAC2(res, f1, f2, pD) \
599 asm volatile( \
600 "movem.l (%1), %%d0-%%d7 \n\t" \
601 "move.l 4(%2), %%a5 \n\t" \
602 "msac.l %%d0, %%a5, 60(%2), %%a5, %%acc0\n\t" \
603 "msac.l %%d1, %%a5, 52(%2), %%a5, %%acc0\n\t" \
604 "msac.l %%d2, %%a5, 44(%2), %%a5, %%acc0\n\t" \
605 "msac.l %%d3, %%a5, 36(%2), %%a5, %%acc0\n\t" \
606 "msac.l %%d4, %%a5, 28(%2), %%a5, %%acc0\n\t" \
607 "msac.l %%d5, %%a5, 20(%2), %%a5, %%acc0\n\t" \
608 "msac.l %%d6, %%a5, 12(%2), %%a5, %%acc0\n\t" \
609 "msac.l %%d7, %%a5, (%2), %%a5, %%acc0\n\t" \
610 "movem.l (%3), %%d0-%%d7 \n\t" \
611 "mac.l %%d0, %%a5, 56(%2), %%a5, %%acc0\n\t" \
612 "mac.l %%d1, %%a5, 48(%2), %%a5, %%acc0\n\t" \
613 "mac.l %%d2, %%a5, 40(%2), %%a5, %%acc0\n\t" \
614 "mac.l %%d3, %%a5, 32(%2), %%a5, %%acc0\n\t" \
615 "mac.l %%d4, %%a5, 24(%2), %%a5, %%acc0\n\t" \
616 "mac.l %%d5, %%a5, 16(%2), %%a5, %%acc0\n\t" \
617 "mac.l %%d6, %%a5, 8(%2), %%a5, %%acc0\n\t" \
618 "mac.l %%d7, %%a5, %%acc0\n\t" \
619 "movclr.l %%acc0, %0 \n\t" \
620 : "=r" (res) \
621 : "a" (*f1), "a" (*pD), "a" (*f2) \
622 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5", "memory");
623
624#define SYNTH_EMAC_ODD_SBSAMPLE(f1, f2, pD1, pD2, res1, res2) \
625 asm volatile ( \
626 "movem.l (%0), %%d0-%%d7 \n\t" \
627 "move.l 4(%2), %%a5 \n\t" \
628 "msac.l %%d0, %%a5, 60(%2), %%a5, %%acc0\n\t" \
629 "msac.l %%d1, %%a5, 52(%2), %%a5, %%acc0\n\t" \
630 "msac.l %%d2, %%a5, 44(%2), %%a5, %%acc0\n\t" \
631 "msac.l %%d3, %%a5, 36(%2), %%a5, %%acc0\n\t" \
632 "msac.l %%d4, %%a5, 28(%2), %%a5, %%acc0\n\t" \
633 "msac.l %%d5, %%a5, 20(%2), %%a5, %%acc0\n\t" \
634 "msac.l %%d6, %%a5, 12(%2), %%a5, %%acc0\n\t" \
635 "msac.l %%d7, %%a5, 112(%3), %%a5, %%acc0\n\t" \
636 "mac.l %%d7, %%a5, 104(%3), %%a5, %%acc1\n\t" \
637 "mac.l %%d6, %%a5, 96(%3), %%a5, %%acc1\n\t" \
638 "mac.l %%d5, %%a5, 88(%3), %%a5, %%acc1\n\t" \
639 "mac.l %%d4, %%a5, 80(%3), %%a5, %%acc1\n\t" \
640 "mac.l %%d3, %%a5, 72(%3), %%a5, %%acc1\n\t" \
641 "mac.l %%d2, %%a5, 64(%3), %%a5, %%acc1\n\t" \
642 "mac.l %%d1, %%a5, 120(%3), %%a5, %%acc1\n\t" \
643 "mac.l %%d0, %%a5, 8(%2), %%a5, %%acc1\n\t" \
644 "movem.l (%1), %%d0-%%d7 \n\t" \
645 "mac.l %%d7, %%a5, 16(%2), %%a5, %%acc0\n\t" \
646 "mac.l %%d6, %%a5, 24(%2), %%a5, %%acc0\n\t" \
647 "mac.l %%d5, %%a5, 32(%2), %%a5, %%acc0\n\t" \
648 "mac.l %%d4, %%a5, 40(%2), %%a5, %%acc0\n\t" \
649 "mac.l %%d3, %%a5, 48(%2), %%a5, %%acc0\n\t" \
650 "mac.l %%d2, %%a5, 56(%2), %%a5, %%acc0\n\t" \
651 "mac.l %%d1, %%a5, (%2), %%a5, %%acc0\n\t" \
652 "mac.l %%d0, %%a5, 60(%3), %%a5, %%acc0\n\t" \
653 "mac.l %%d0, %%a5, 68(%3), %%a5, %%acc1\n\t" \
654 "mac.l %%d1, %%a5, 76(%3), %%a5, %%acc1\n\t" \
655 "mac.l %%d2, %%a5, 84(%3), %%a5, %%acc1\n\t" \
656 "mac.l %%d3, %%a5, 92(%3), %%a5, %%acc1\n\t" \
657 "mac.l %%d4, %%a5, 100(%3), %%a5, %%acc1\n\t" \
658 "mac.l %%d5, %%a5, 108(%3), %%a5, %%acc1\n\t" \
659 "mac.l %%d6, %%a5, 116(%3), %%a5, %%acc1\n\t" \
660 "mac.l %%d7, %%a5, %%acc1\n\t" \
661 : \
662 : "a" (*f1), "a" (*f2), "a" (*pD1), "a" (*pD2) \
663 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5", "memory"); \
664 asm volatile( \
665 "movclr.l %%acc0, %0\n\t" \
666 "movclr.l %%acc1, %1\n\t" \
667 : "=d" (res1), "=d" (res2) );
668
669#define SYNTH_EMAC_EVEN_SBSAMPLE(f1, f2, pD1, pD2, res1, res2) \
670 asm volatile ( \
671 "movem.l (%0), %%d0-%%d7 \n\t" \
672 "move.l (%2), %%a5 \n\t" \
673 "msac.l %%d0, %%a5, 56(%2), %%a5, %%acc0\n\t" \
674 "msac.l %%d1, %%a5, 48(%2), %%a5, %%acc0\n\t" \
675 "msac.l %%d2, %%a5, 40(%2), %%a5, %%acc0\n\t" \
676 "msac.l %%d3, %%a5, 32(%2), %%a5, %%acc0\n\t" \
677 "msac.l %%d4, %%a5, 24(%2), %%a5, %%acc0\n\t" \
678 "msac.l %%d5, %%a5, 16(%2), %%a5, %%acc0\n\t" \
679 "msac.l %%d6, %%a5, 8(%2), %%a5, %%acc0\n\t" \
680 "msac.l %%d7, %%a5, 116(%3), %%a5, %%acc0\n\t" \
681 "mac.l %%d7, %%a5, 108(%3), %%a5, %%acc1\n\t" \
682 "mac.l %%d6, %%a5, 100(%3), %%a5, %%acc1\n\t" \
683 "mac.l %%d5, %%a5, 92(%3), %%a5, %%acc1\n\t" \
684 "mac.l %%d4, %%a5, 84(%3), %%a5, %%acc1\n\t" \
685 "mac.l %%d3, %%a5, 76(%3), %%a5, %%acc1\n\t" \
686 "mac.l %%d2, %%a5, 68(%3), %%a5, %%acc1\n\t" \
687 "mac.l %%d1, %%a5, 60(%3), %%a5, %%acc1\n\t" \
688 "mac.l %%d0, %%a5, 12(%2), %%a5, %%acc1\n\t" \
689 "movem.l (%1), %%d0-%%d7 \n\t" \
690 "mac.l %%d7, %%a5, 20(%2), %%a5, %%acc0\n\t" \
691 "mac.l %%d6, %%a5, 28(%2), %%a5, %%acc0\n\t" \
692 "mac.l %%d5, %%a5, 36(%2), %%a5, %%acc0\n\t" \
693 "mac.l %%d4, %%a5, 44(%2), %%a5, %%acc0\n\t" \
694 "mac.l %%d3, %%a5, 52(%2), %%a5, %%acc0\n\t" \
695 "mac.l %%d2, %%a5, 60(%2), %%a5, %%acc0\n\t" \
696 "mac.l %%d1, %%a5, 4(%2), %%a5, %%acc0\n\t" \
697 "mac.l %%d0, %%a5, 120(%3), %%a5, %%acc0\n\t" \
698 "mac.l %%d0, %%a5, 64(%3), %%a5, %%acc1\n\t" \
699 "mac.l %%d1, %%a5, 72(%3), %%a5, %%acc1\n\t" \
700 "mac.l %%d2, %%a5, 80(%3), %%a5, %%acc1\n\t" \
701 "mac.l %%d3, %%a5, 88(%3), %%a5, %%acc1\n\t" \
702 "mac.l %%d4, %%a5, 96(%3), %%a5, %%acc1\n\t" \
703 "mac.l %%d5, %%a5, 104(%3), %%a5, %%acc1\n\t" \
704 "mac.l %%d6, %%a5, 112(%3), %%a5, %%acc1\n\t" \
705 "mac.l %%d7, %%a5, %%acc1\n\t" \
706 : \
707 : "a" (*f1), "a" (*f2), "a" (*pD1), "a" (*pD2) \
708 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5", "memory"); \
709 asm volatile( \
710 "movclr.l %%acc0, %0\n\t" \
711 "movclr.l %%acc1, %1\n\t" \
712 : "=d" (res1), "=d" (res2) );
713
580static 714static
581void synth_full(struct mad_synth *synth, struct mad_frame const *frame, 715void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
582 unsigned int nch, unsigned int ns) 716 unsigned int nch, unsigned int ns)
@@ -612,31 +746,7 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
612 746
613 if(s & 1) 747 if(s & 1)
614 { 748 {
615 asm volatile( 749 SYNTH_EMAC2(hi0, fx, fe, D0ptr);
616 "movem.l (%1), %%d0-%%d7\n\t"
617 "move.l 4(%2), %%a5\n\t"
618 "msac.l %%d0, %%a5, 60(%2), %%a5, %%acc0\n\t"
619 "msac.l %%d1, %%a5, 52(%2), %%a5, %%acc0\n\t"
620 "msac.l %%d2, %%a5, 44(%2), %%a5, %%acc0\n\t"
621 "msac.l %%d3, %%a5, 36(%2), %%a5, %%acc0\n\t"
622 "msac.l %%d4, %%a5, 28(%2), %%a5, %%acc0\n\t"
623 "msac.l %%d5, %%a5, 20(%2), %%a5, %%acc0\n\t"
624 "msac.l %%d6, %%a5, 12(%2), %%a5, %%acc0\n\t"
625 "msac.l %%d7, %%a5, (%2), %%a5, %%acc0\n\t"
626
627 "movem.l (%3), %%d0-%%d7\n\t"
628 "mac.l %%d0, %%a5, 56(%2), %%a5, %%acc0\n\t"
629 "mac.l %%d1, %%a5, 48(%2), %%a5, %%acc0\n\t"
630 "mac.l %%d2, %%a5, 40(%2), %%a5, %%acc0\n\t"
631 "mac.l %%d3, %%a5, 32(%2), %%a5, %%acc0\n\t"
632 "mac.l %%d4, %%a5, 24(%2), %%a5, %%acc0\n\t"
633 "mac.l %%d5, %%a5, 16(%2), %%a5, %%acc0\n\t"
634 "mac.l %%d6, %%a5, 8(%2), %%a5, %%acc0\n\t"
635 "mac.l %%d7, %%a5, %%acc0\n\t"
636 "movclr.l %%acc0, %0\n\t"
637 : "=r" (hi0) : "a" (*fx), "a" (*D0ptr), "a" (*fe)
638 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5");
639
640 pcm[0] = hi0 << 3; /* shift result to libmad's fixed point format */ 750 pcm[0] = hi0 << 3; /* shift result to libmad's fixed point format */
641 pcm += 16; 751 pcm += 16;
642 752
@@ -646,99 +756,19 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
646 ++D1ptr; 756 ++D1ptr;
647 757
648 /* D[32 - sb][i] == -D[sb][31 - i] */ 758 /* D[32 - sb][i] == -D[sb][31 - i] */
649 asm volatile ( 759 SYNTH_EMAC_ODD_SBSAMPLE(fo, fe, D0ptr, D1ptr, hi0, hi1);
650 "movem.l (%0), %%d0-%%d7\n\t"
651 "move.l 4(%2), %%a5\n\t"
652 "msac.l %%d0, %%a5, 60(%2), %%a5, %%acc0\n\t"
653 "msac.l %%d1, %%a5, 52(%2), %%a5, %%acc0\n\t"
654 "msac.l %%d2, %%a5, 44(%2), %%a5, %%acc0\n\t"
655 "msac.l %%d3, %%a5, 36(%2), %%a5, %%acc0\n\t"
656 "msac.l %%d4, %%a5, 28(%2), %%a5, %%acc0\n\t"
657 "msac.l %%d5, %%a5, 20(%2), %%a5, %%acc0\n\t"
658 "msac.l %%d6, %%a5, 12(%2), %%a5, %%acc0\n\t"
659 "msac.l %%d7, %%a5, 112(%3), %%a5, %%acc0\n\t"
660 "mac.l %%d7, %%a5, 104(%3), %%a5, %%acc1\n\t"
661 "mac.l %%d6, %%a5, 96(%3), %%a5, %%acc1\n\t"
662 "mac.l %%d5, %%a5, 88(%3), %%a5, %%acc1\n\t"
663 "mac.l %%d4, %%a5, 80(%3), %%a5, %%acc1\n\t"
664 "mac.l %%d3, %%a5, 72(%3), %%a5, %%acc1\n\t"
665 "mac.l %%d2, %%a5, 64(%3), %%a5, %%acc1\n\t"
666 "mac.l %%d1, %%a5, 120(%3), %%a5, %%acc1\n\t"
667 "mac.l %%d0, %%a5, 8(%2), %%a5, %%acc1\n\t"
668 "movem.l (%1), %%d0-%%d7\n\t"
669 "mac.l %%d7, %%a5, 16(%2), %%a5, %%acc0\n\t"
670 "mac.l %%d6, %%a5, 24(%2), %%a5, %%acc0\n\t"
671 "mac.l %%d5, %%a5, 32(%2), %%a5, %%acc0\n\t"
672 "mac.l %%d4, %%a5, 40(%2), %%a5, %%acc0\n\t"
673 "mac.l %%d3, %%a5, 48(%2), %%a5, %%acc0\n\t"
674 "mac.l %%d2, %%a5, 56(%2), %%a5, %%acc0\n\t"
675 "mac.l %%d1, %%a5, (%2), %%a5, %%acc0\n\t"
676 "mac.l %%d0, %%a5, 60(%3), %%a5, %%acc0\n\t"
677 "mac.l %%d0, %%a5, 68(%3), %%a5, %%acc1\n\t"
678 "mac.l %%d1, %%a5, 76(%3), %%a5, %%acc1\n\t"
679 "mac.l %%d2, %%a5, 84(%3), %%a5, %%acc1\n\t"
680 "mac.l %%d3, %%a5, 92(%3), %%a5, %%acc1\n\t"
681 "mac.l %%d4, %%a5, 100(%3), %%a5, %%acc1\n\t"
682 "mac.l %%d5, %%a5, 108(%3), %%a5, %%acc1\n\t"
683 "mac.l %%d6, %%a5, 116(%3), %%a5, %%acc1\n\t"
684 "mac.l %%d7, %%a5, %%acc1\n\t"
685 : : "a" (*fo), "a" (*fe), "a" (*D0ptr), "a" (*D1ptr)
686 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5");
687
688 asm volatile(
689 "movclr.l %%acc0, %0\n\t"
690 "movclr.l %%acc1, %1\n\t" : "=d" (hi0), "=d" (hi1) );
691
692 pcm[-sb] = hi0 << 3; 760 pcm[-sb] = hi0 << 3;
693 pcm[ sb] = hi1 << 3; 761 pcm[ sb] = hi1 << 3;
694 } 762 }
695 763
696 ++D0ptr; 764 ++D0ptr;
697 asm volatile( 765 SYNTH_EMAC1(hi0,fo,D0ptr+1);
698 "movem.l (%1), %%d0-%%d7\n\t"
699 "move.l 4(%2), %%a5\n\t"
700 "mac.l %%d0, %%a5, 60(%2), %%a5, %%acc0\n\t"
701 "mac.l %%d1, %%a5, 52(%2), %%a5, %%acc0\n\t"
702 "mac.l %%d2, %%a5, 44(%2), %%a5, %%acc0\n\t"
703 "mac.l %%d3, %%a5, 36(%2), %%a5, %%acc0\n\t"
704 "mac.l %%d4, %%a5, 28(%2), %%a5, %%acc0\n\t"
705 "mac.l %%d5, %%a5, 20(%2), %%a5, %%acc0\n\t"
706 "mac.l %%d6, %%a5, 12(%2), %%a5, %%acc0\n\t"
707 "mac.l %%d7, %%a5, %%acc0\n\t"
708 "movclr.l %%acc0, %0\n\t"
709 : "=r" (hi0) : "a" (*fo), "a" (*D0ptr)
710 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5");
711
712 pcm[0] = -(hi0 << 3); 766 pcm[0] = -(hi0 << 3);
713 } 767 }
714 else 768 else
715 { 769 {
716 asm volatile( 770 SYNTH_EMAC2(hi0,fe,fx,D0ptr);
717 "movem.l (%1), %%d0-%%d7\n\t" 771 pcm[0] = -(hi0 << 3); /* shift result to libmad's fixed point format */
718 "move.l (%2), %%a5\n\t"
719 "msac.l %%d0, %%a5, 56(%2), %%a5, %%acc0\n\t"
720 "msac.l %%d1, %%a5, 48(%2), %%a5, %%acc0\n\t"
721 "msac.l %%d2, %%a5, 40(%2), %%a5, %%acc0\n\t"
722 "msac.l %%d3, %%a5, 32(%2), %%a5, %%acc0\n\t"
723 "msac.l %%d4, %%a5, 24(%2), %%a5, %%acc0\n\t"
724 "msac.l %%d5, %%a5, 16(%2), %%a5, %%acc0\n\t"
725 "msac.l %%d6, %%a5, 8(%2), %%a5, %%acc0\n\t"
726 "msac.l %%d7, %%a5, 4(%2), %%a5, %%acc0\n\t"
727
728 "movem.l (%3), %%d0-%%d7\n\t"
729 "mac.l %%d0, %%a5, 60(%2), %%a5, %%acc0\n\t"
730 "mac.l %%d1, %%a5, 52(%2), %%a5, %%acc0\n\t"
731 "mac.l %%d2, %%a5, 44(%2), %%a5, %%acc0\n\t"
732 "mac.l %%d3, %%a5, 36(%2), %%a5, %%acc0\n\t"
733 "mac.l %%d4, %%a5, 28(%2), %%a5, %%acc0\n\t"
734 "mac.l %%d5, %%a5, 20(%2), %%a5, %%acc0\n\t"
735 "mac.l %%d6, %%a5, 12(%2), %%a5, %%acc0\n\t"
736 "mac.l %%d7, %%a5, %%acc0\n\t"
737 "movclr.l %%acc0, %0\n\t"
738 : "=r" (hi0) : "a" (*fx), "a" (*D0ptr), "a" (*fe)
739 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5");
740
741 pcm[0] = hi0 << 3; /* shift result to libmad's fixed point format */
742 pcm += 16; 772 pcm += 16;
743 773
744 for (sb = 15; sb; sb--, fo++) { 774 for (sb = 15; sb; sb--, fo++) {
@@ -747,69 +777,13 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
747 ++D1ptr; 777 ++D1ptr;
748 778
749 /* D[32 - sb][i] == -D[sb][31 - i] */ 779 /* D[32 - sb][i] == -D[sb][31 - i] */
750 asm volatile ( 780 SYNTH_EMAC_EVEN_SBSAMPLE(fo, fe, D0ptr, D1ptr, hi0, hi1);
751 "movem.l (%0), %%d0-%%d7\n\t"
752 "move.l (%2), %%a5\n\t"
753 "msac.l %%d0, %%a5, 56(%2), %%a5, %%acc0\n\t"
754 "msac.l %%d1, %%a5, 48(%2), %%a5, %%acc0\n\t"
755 "msac.l %%d2, %%a5, 40(%2), %%a5, %%acc0\n\t"
756 "msac.l %%d3, %%a5, 32(%2), %%a5, %%acc0\n\t"
757 "msac.l %%d4, %%a5, 24(%2), %%a5, %%acc0\n\t"
758 "msac.l %%d5, %%a5, 16(%2), %%a5, %%acc0\n\t"
759 "msac.l %%d6, %%a5, 8(%2), %%a5, %%acc0\n\t"
760 "msac.l %%d7, %%a5, 116(%3), %%a5, %%acc0\n\t"
761 "mac.l %%d7, %%a5, 108(%3), %%a5, %%acc1\n\t"
762 "mac.l %%d6, %%a5, 100(%3), %%a5, %%acc1\n\t"
763 "mac.l %%d5, %%a5, 92(%3), %%a5, %%acc1\n\t"
764 "mac.l %%d4, %%a5, 84(%3), %%a5, %%acc1\n\t"
765 "mac.l %%d3, %%a5, 76(%3), %%a5, %%acc1\n\t"
766 "mac.l %%d2, %%a5, 68(%3), %%a5, %%acc1\n\t"
767 "mac.l %%d1, %%a5, 60(%3), %%a5, %%acc1\n\t"
768 "mac.l %%d0, %%a5, 12(%2), %%a5, %%acc1\n\t"
769 "movem.l (%1), %%d0-%%d7\n\t"
770 "mac.l %%d7, %%a5, 20(%2), %%a5, %%acc0\n\t"
771 "mac.l %%d6, %%a5, 28(%2), %%a5, %%acc0\n\t"
772 "mac.l %%d5, %%a5, 36(%2), %%a5, %%acc0\n\t"
773 "mac.l %%d4, %%a5, 44(%2), %%a5, %%acc0\n\t"
774 "mac.l %%d3, %%a5, 52(%2), %%a5, %%acc0\n\t"
775 "mac.l %%d2, %%a5, 60(%2), %%a5, %%acc0\n\t"
776 "mac.l %%d1, %%a5, 4(%2), %%a5, %%acc0\n\t"
777 "mac.l %%d0, %%a5, 120(%3), %%a5, %%acc0\n\t"
778 "mac.l %%d0, %%a5, 64(%3), %%a5, %%acc1\n\t"
779 "mac.l %%d1, %%a5, 72(%3), %%a5, %%acc1\n\t"
780 "mac.l %%d2, %%a5, 80(%3), %%a5, %%acc1\n\t"
781 "mac.l %%d3, %%a5, 88(%3), %%a5, %%acc1\n\t"
782 "mac.l %%d4, %%a5, 96(%3), %%a5, %%acc1\n\t"
783 "mac.l %%d5, %%a5, 104(%3), %%a5, %%acc1\n\t"
784 "mac.l %%d6, %%a5, 112(%3), %%a5, %%acc1\n\t"
785 "mac.l %%d7, %%a5, %%acc1\n\t"
786 : : "a" (*fo), "a" (*fe), "a" (*D0ptr), "a" (*D1ptr)
787 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5");
788
789 asm volatile(
790 "movclr.l %%acc0, %0\n\t"
791 "movclr.l %%acc1, %1\n\t" : "=d" (hi0), "=d" (hi1) );
792
793 pcm[-sb] = hi0 << 3; 781 pcm[-sb] = hi0 << 3;
794 pcm[ sb] = hi1 << 3; 782 pcm[ sb] = hi1 << 3;
795 } 783 }
796 784
797 ++D0ptr; 785 ++D0ptr;
798 asm volatile( 786 SYNTH_EMAC1(hi0,fo,D0ptr);
799 "movem.l (%1), %%d0-%%d7\n\t"
800 "move.l (%2), %%a5\n\t"
801 "mac.l %%d0, %%a5, 56(%2), %%a5, %%acc0\n\t"
802 "mac.l %%d1, %%a5, 48(%2), %%a5, %%acc0\n\t"
803 "mac.l %%d2, %%a5, 40(%2), %%a5, %%acc0\n\t"
804 "mac.l %%d3, %%a5, 32(%2), %%a5, %%acc0\n\t"
805 "mac.l %%d4, %%a5, 24(%2), %%a5, %%acc0\n\t"
806 "mac.l %%d5, %%a5, 16(%2), %%a5, %%acc0\n\t"
807 "mac.l %%d6, %%a5, 8(%2), %%a5, %%acc0\n\t"
808 "mac.l %%d7, %%a5, %%acc0\n\t"
809 "movclr.l %%acc0, %0\n\t"
810 : "=r" (hi0) : "a" (*fo), "a" (*D0ptr)
811 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5");
812
813 pcm[0] = -(hi0 << 3); 787 pcm[0] = -(hi0 << 3);
814 } 788 }
815 pcm += 16; 789 pcm += 16;