diff options
Diffstat (limited to 'apps/codecs/libmad/synth.c')
-rw-r--r-- | apps/codecs/libmad/synth.c | 308 |
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 | |||
580 | static | 714 | static |
581 | void synth_full(struct mad_synth *synth, struct mad_frame const *frame, | 715 | void 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; |