summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/codecs/libmad/synth.c76
1 files changed, 40 insertions, 36 deletions
diff --git a/apps/codecs/libmad/synth.c b/apps/codecs/libmad/synth.c
index 19129fc7b5..a928864b77 100644
--- a/apps/codecs/libmad/synth.c
+++ b/apps/codecs/libmad/synth.c
@@ -580,46 +580,50 @@ void synth_full(struct mad_synth *, struct mad_frame const *,
580 580
581#define SYNTH_EMAC1(res, f1, pD) \ 581#define SYNTH_EMAC1(res, f1, pD) \
582 asm volatile( \ 582 asm volatile( \
583 "movem.l (%1), %%d0-%%d7 \n\t" \ 583 "movem.l (%0), %%d0-%%d7 \n\t" \
584 "move.l (%2), %%a5 \n\t" \ 584 "move.l (%1), %%a5 \n\t" \
585 "mac.l %%d0, %%a5, 56(%2), %%a5, %%acc0\n\t" \ 585 "mac.l %%d0, %%a5, 56(%1), %%a5, %%acc0\n\t" \
586 "mac.l %%d1, %%a5, 48(%2), %%a5, %%acc0\n\t" \ 586 "mac.l %%d1, %%a5, 48(%1), %%a5, %%acc0\n\t" \
587 "mac.l %%d2, %%a5, 40(%2), %%a5, %%acc0\n\t" \ 587 "mac.l %%d2, %%a5, 40(%1), %%a5, %%acc0\n\t" \
588 "mac.l %%d3, %%a5, 32(%2), %%a5, %%acc0\n\t" \ 588 "mac.l %%d3, %%a5, 32(%1), %%a5, %%acc0\n\t" \
589 "mac.l %%d4, %%a5, 24(%2), %%a5, %%acc0\n\t" \ 589 "mac.l %%d4, %%a5, 24(%1), %%a5, %%acc0\n\t" \
590 "mac.l %%d5, %%a5, 16(%2), %%a5, %%acc0\n\t" \ 590 "mac.l %%d5, %%a5, 16(%1), %%a5, %%acc0\n\t" \
591 "mac.l %%d6, %%a5, 8(%2), %%a5, %%acc0\n\t" \ 591 "mac.l %%d6, %%a5, 8(%1), %%a5, %%acc0\n\t" \
592 "mac.l %%d7, %%a5, %%acc0\n\t" \ 592 "mac.l %%d7, %%a5, %%acc0\n\t" \
593 "movclr.l %%acc0, %0 \n\t" \ 593 : \
594 : "=r" (res) \
595 : "a" (*f1), "a" (*pD) \ 594 : "a" (*f1), "a" (*pD) \
596 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5"); 595 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5"); \
596 asm volatile ( \
597 "movclr.l %%acc0, %0 \n\t" \
598 : "=d" (res));
597 599
598#define SYNTH_EMAC2(res, f1, f2, pD) \ 600#define SYNTH_EMAC2(res, f1, f2, pD) \
599 asm volatile( \ 601 asm volatile( \
600 "movem.l (%1), %%d0-%%d7 \n\t" \ 602 "movem.l (%0), %%d0-%%d7 \n\t" \
601 "move.l 4(%2), %%a5 \n\t" \ 603 "move.l 4(%1), %%a5 \n\t" \
602 "msac.l %%d0, %%a5, 60(%2), %%a5, %%acc0\n\t" \ 604 "msac.l %%d0, %%a5, 60(%1), %%a5, %%acc0\n\t" \
603 "msac.l %%d1, %%a5, 52(%2), %%a5, %%acc0\n\t" \ 605 "msac.l %%d1, %%a5, 52(%1), %%a5, %%acc0\n\t" \
604 "msac.l %%d2, %%a5, 44(%2), %%a5, %%acc0\n\t" \ 606 "msac.l %%d2, %%a5, 44(%1), %%a5, %%acc0\n\t" \
605 "msac.l %%d3, %%a5, 36(%2), %%a5, %%acc0\n\t" \ 607 "msac.l %%d3, %%a5, 36(%1), %%a5, %%acc0\n\t" \
606 "msac.l %%d4, %%a5, 28(%2), %%a5, %%acc0\n\t" \ 608 "msac.l %%d4, %%a5, 28(%1), %%a5, %%acc0\n\t" \
607 "msac.l %%d5, %%a5, 20(%2), %%a5, %%acc0\n\t" \ 609 "msac.l %%d5, %%a5, 20(%1), %%a5, %%acc0\n\t" \
608 "msac.l %%d6, %%a5, 12(%2), %%a5, %%acc0\n\t" \ 610 "msac.l %%d6, %%a5, 12(%1), %%a5, %%acc0\n\t" \
609 "msac.l %%d7, %%a5, (%2), %%a5, %%acc0\n\t" \ 611 "msac.l %%d7, %%a5, (%1), %%a5, %%acc0\n\t" \
610 "movem.l (%3), %%d0-%%d7 \n\t" \ 612 "movem.l (%2), %%d0-%%d7 \n\t" \
611 "mac.l %%d0, %%a5, 56(%2), %%a5, %%acc0\n\t" \ 613 "mac.l %%d0, %%a5, 56(%1), %%a5, %%acc0\n\t" \
612 "mac.l %%d1, %%a5, 48(%2), %%a5, %%acc0\n\t" \ 614 "mac.l %%d1, %%a5, 48(%1), %%a5, %%acc0\n\t" \
613 "mac.l %%d2, %%a5, 40(%2), %%a5, %%acc0\n\t" \ 615 "mac.l %%d2, %%a5, 40(%1), %%a5, %%acc0\n\t" \
614 "mac.l %%d3, %%a5, 32(%2), %%a5, %%acc0\n\t" \ 616 "mac.l %%d3, %%a5, 32(%1), %%a5, %%acc0\n\t" \
615 "mac.l %%d4, %%a5, 24(%2), %%a5, %%acc0\n\t" \ 617 "mac.l %%d4, %%a5, 24(%1), %%a5, %%acc0\n\t" \
616 "mac.l %%d5, %%a5, 16(%2), %%a5, %%acc0\n\t" \ 618 "mac.l %%d5, %%a5, 16(%1), %%a5, %%acc0\n\t" \
617 "mac.l %%d6, %%a5, 8(%2), %%a5, %%acc0\n\t" \ 619 "mac.l %%d6, %%a5, 8(%1), %%a5, %%acc0\n\t" \
618 "mac.l %%d7, %%a5, %%acc0\n\t" \ 620 "mac.l %%d7, %%a5, %%acc0\n\t" \
619 "movclr.l %%acc0, %0 \n\t" \ 621 : \
620 : "=r" (res) \
621 : "a" (*f1), "a" (*pD), "a" (*f2) \ 622 : "a" (*f1), "a" (*pD), "a" (*f2) \
622 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5", "memory"); 623 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5", "memory"); \
624 asm volatile ( \
625 "movclr.l %%acc0, %0 \n\t" \
626 : "=d" (res));
623 627
624#define SYNTH_EMAC_ODD_SBSAMPLE(f1, f2, pD1, pD2, res1, res2) \ 628#define SYNTH_EMAC_ODD_SBSAMPLE(f1, f2, pD1, pD2, res1, res2) \
625 asm volatile ( \ 629 asm volatile ( \
@@ -762,12 +766,12 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
762 } 766 }
763 767
764 ++D0ptr; 768 ++D0ptr;
765 SYNTH_EMAC1(hi0,fo,D0ptr+1); 769 SYNTH_EMAC1(hi0, fo, D0ptr+1);
766 pcm[0] = -(hi0 << 3); 770 pcm[0] = -(hi0 << 3);
767 } 771 }
768 else 772 else
769 { 773 {
770 SYNTH_EMAC2(hi0,fe,fx,D0ptr); 774 SYNTH_EMAC2(hi0, fe, fx, D0ptr);
771 pcm[0] = -(hi0 << 3); /* shift result to libmad's fixed point format */ 775 pcm[0] = -(hi0 << 3); /* shift result to libmad's fixed point format */
772 pcm += 16; 776 pcm += 16;
773 777
@@ -783,7 +787,7 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
783 } 787 }
784 788
785 ++D0ptr; 789 ++D0ptr;
786 SYNTH_EMAC1(hi0,fo,D0ptr); 790 SYNTH_EMAC1(hi0, fo, D0ptr);
787 pcm[0] = -(hi0 << 3); 791 pcm[0] = -(hi0 << 3);
788 } 792 }
789 pcm += 16; 793 pcm += 16;