diff options
author | Nils Wallménius <nils@rockbox.org> | 2010-07-23 08:47:31 +0000 |
---|---|---|
committer | Nils Wallménius <nils@rockbox.org> | 2010-07-23 08:47:31 +0000 |
commit | f3a0ae59f5b425bf371c83e4c011303213c5dd73 (patch) | |
tree | 2cc8d2d56d9ece6527bf48af7e3454e155045fa6 /apps | |
parent | e6fd3d0318d0f53c51cf4cc87ccdc8f9741957e7 (diff) | |
download | rockbox-f3a0ae59f5b425bf371c83e4c011303213c5dd73.tar.gz rockbox-f3a0ae59f5b425bf371c83e4c011303213c5dd73.zip |
libmad: small tweak to coldfire inline asm, gives a slight speedup and now builds fine with gcc 4.4.4
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27529 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/codecs/libmad/synth.c | 76 |
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; |