summaryrefslogtreecommitdiff
path: root/apps/codecs/libmad
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/libmad')
-rw-r--r--apps/codecs/libmad/synth.c88
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
883void synth_full_odd_sbsample (mad_fixed_t *pcm, 885void synth_full_odd_sbsample (mad_fixed_t *pcm,