diff options
Diffstat (limited to 'apps/codecs/libmad/synth.c')
-rw-r--r-- | apps/codecs/libmad/synth.c | 88 |
1 files changed, 45 insertions, 43 deletions
diff --git a/apps/codecs/libmad/synth.c b/apps/codecs/libmad/synth.c index 1575d93667..7f1c2e6fc0 100644 --- a/apps/codecs/libmad/synth.c +++ b/apps/codecs/libmad/synth.c | |||
@@ -829,55 +829,57 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame, | |||
829 | #elif defined(FPM_ARM) | 829 | #elif defined(FPM_ARM) |
830 | 830 | ||
831 | #define PROD_O(hi, lo, f, ptr) \ | 831 | #define PROD_O(hi, lo, f, ptr) \ |
832 | ({ \ | 832 | ({ \ |
833 | mad_fixed_t *__p = (f); \ | 833 | mad_fixed_t *__p = (f); \ |
834 | asm("ldmia %2!, {r0, r1, r2, r3}\n\t" \ | 834 | asm volatile ( \ |
835 | "ldr r4, [%3, #0]\n\t" \ | 835 | "ldmia %2!, {r0, r1, r2, r3} \n\t" \ |
836 | "smull %0, %1, r0, r4\n\t" \ | 836 | "ldr r4, [%3, #0] \n\t" \ |
837 | "ldr r4, [%3, #56]\n\t" \ | 837 | "smull %0, %1, r0, r4 \n\t" \ |
838 | "smlal %0, %1, r1, r4\n\t" \ | 838 | "ldr r4, [%3, #56] \n\t" \ |
839 | "ldr r4, [%3, #48]\n\t" \ | 839 | "smlal %0, %1, r1, r4 \n\t" \ |
840 | "smlal %0, %1, r2, r4\n\t" \ | 840 | "ldr r4, [%3, #48] \n\t" \ |
841 | "ldr r4, [%3, #40]\n\t" \ | 841 | "smlal %0, %1, r2, r4 \n\t" \ |
842 | "smlal %0, %1, r3, r4\n\t" \ | 842 | "ldr r4, [%3, #40] \n\t" \ |
843 | "ldmia %2, {r0, r1, r2, r3}\n\t" \ | 843 | "smlal %0, %1, r3, r4 \n\t" \ |
844 | "ldr r4, [%3, #32]\n\t" \ | 844 | "ldmia %2, {r0, r1, r2, r3} \n\t" \ |
845 | "smlal %0, %1, r0, r4\n\t" \ | 845 | "ldr r4, [%3, #32] \n\t" \ |
846 | "ldr r4, [%3, #24]\n\t" \ | 846 | "smlal %0, %1, r0, r4 \n\t" \ |
847 | "smlal %0, %1, r1, r4\n\t" \ | 847 | "ldr r4, [%3, #24] \n\t" \ |
848 | "ldr r4, [%3, #16]\n\t" \ | 848 | "smlal %0, %1, r1, r4 \n\t" \ |
849 | "smlal %0, %1, r2, r4\n\t" \ | 849 | "ldr r4, [%3, #16] \n\t" \ |
850 | "ldr r4, [%3, #8]\n\t" \ | 850 | "smlal %0, %1, r2, r4 \n\t" \ |
851 | "smlal %0, %1, r3, r4\n\t" \ | 851 | "ldr r4, [%3, #8] \n\t" \ |
852 | "smlal %0, %1, r3, r4 \n\t" \ | ||
852 | : "=&r" (lo), "=&r" (hi), "+r" (__p) \ | 853 | : "=&r" (lo), "=&r" (hi), "+r" (__p) \ |
853 | : "r" (ptr) \ | 854 | : "r" (ptr) \ |
854 | : "r0", "r1", "r2", "r3", "r4"); \ | 855 | : "r0", "r1", "r2", "r3", "r4", "memory"); \ |
855 | }) | 856 | }) |
856 | 857 | ||
857 | #define PROD_A(hi, lo, f, ptr) \ | 858 | #define PROD_A(hi, lo, f, ptr) \ |
858 | ({ \ | 859 | ({ \ |
859 | mad_fixed_t *__p = (f); \ | 860 | mad_fixed_t *__p = (f); \ |
860 | asm("ldmia %2!, {r0, r1, r2, r3}\n\t" \ | 861 | asm volatile ( \ |
861 | "ldr r4, [%3, #0]\n\t" \ | 862 | "ldmia %2!, {r0, r1, r2, r3} \n\t" \ |
862 | "smlal %0, %1, r0, r4\n\t" \ | 863 | "ldr r4, [%3, #0] \n\t" \ |
863 | "ldr r4, [%3, #56]\n\t" \ | 864 | "smlal %0, %1, r0, r4 \n\t" \ |
864 | "smlal %0, %1, r1, r4\n\t" \ | 865 | "ldr r4, [%3, #56] \n\t" \ |
865 | "ldr r4, [%3, #48]\n\t" \ | 866 | "smlal %0, %1, r1, r4 \n\t" \ |
866 | "smlal %0, %1, r2, r4\n\t" \ | 867 | "ldr r4, [%3, #48] \n\t" \ |
867 | "ldr r4, [%3, #40]\n\t" \ | 868 | "smlal %0, %1, r2, r4 \n\t" \ |
868 | "smlal %0, %1, r3, r4\n\t" \ | 869 | "ldr r4, [%3, #40] \n\t" \ |
869 | "ldmia %2, {r0, r1, r2, r3}\n\t" \ | 870 | "smlal %0, %1, r3, r4 \n\t" \ |
870 | "ldr r4, [%3, #32]\n\t" \ | 871 | "ldmia %2, {r0, r1, r2, r3} \n\t" \ |
871 | "smlal %0, %1, r0, r4\n\t" \ | 872 | "ldr r4, [%3, #32] \n\t" \ |
872 | "ldr r4, [%3, #24]\n\t" \ | 873 | "smlal %0, %1, r0, r4 \n\t" \ |
873 | "smlal %0, %1, r1, r4\n\t" \ | 874 | "ldr r4, [%3, #24] \n\t" \ |
874 | "ldr r4, [%3, #16]\n\t" \ | 875 | "smlal %0, %1, r1, r4 \n\t" \ |
875 | "smlal %0, %1, r2, r4\n\t" \ | 876 | "ldr r4, [%3, #16] \n\t" \ |
876 | "ldr r4, [%3, #8]\n\t" \ | 877 | "smlal %0, %1, r2, r4 \n\t" \ |
877 | "smlal %0, %1, r3, r4\n\t" \ | 878 | "ldr r4, [%3, #8] \n\t" \ |
879 | "smlal %0, %1, r3, r4 \n\t" \ | ||
878 | : "+r" (lo), "+r" (hi), "+r" (__p) \ | 880 | : "+r" (lo), "+r" (hi), "+r" (__p) \ |
879 | : "r" (ptr) \ | 881 | : "r" (ptr) \ |
880 | : "r0", "r1", "r2", "r3", "r4"); \ | 882 | : "r0", "r1", "r2", "r3", "r4", "memory"); \ |
881 | }) | 883 | }) |
882 | 884 | ||
883 | void synth_full_odd_sbsample (mad_fixed_t *pcm, | 885 | void synth_full_odd_sbsample (mad_fixed_t *pcm, |