summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNils Wallménius <nils@rockbox.org>2012-10-10 22:20:18 +0200
committerNils Wallménius <nils@rockbox.org>2012-10-10 22:52:11 +0200
commit2326f1517e77d4fb029113e8e75d347cf3adb8fb (patch)
tree740da8123bf6fdc16d781f712017c4ae854fe870
parente3e53c965a39b5b3108ffa46369d233d6a2f1ff6 (diff)
downloadrockbox-2326f1517e77d4fb029113e8e75d347cf3adb8fb.tar.gz
rockbox-2326f1517e77d4fb029113e8e75d347cf3adb8fb.zip
opus: cf asm for C_MULC
saves 2.7MHz decoding a 64kbps test file on h300 Change-Id: Id63791f79b44ed398ce5d341a5f5212d9a30282e
-rw-r--r--lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h b/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h
index 33e62c6b3d..6e806bbc23 100644
--- a/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h
+++ b/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h
@@ -61,9 +61,30 @@
61 do{ (m).r = SUB32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ 61 do{ (m).r = SUB32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \
62 (m).i = ADD32(S_MUL((a).r,(b).i) , S_MUL((a).i,(b).r)); }while(0) 62 (m).i = ADD32(S_MUL((a).r,(b).i) , S_MUL((a).i,(b).r)); }while(0)
63 63
64#if defined (CPU_COLDFIRE)
65# define C_MULC(m,a,b) \
66 { \
67 asm volatile("move.l (%[bp]), %%d2;" \
68 "clr.l %%d3;" \
69 "move.w %%d2, %%d3;" \
70 "swap %%d3;" \
71 "clr.w %%d2;" \
72 "movem.l (%[ap]), %%d0-%%d1;" \
73 "mac.l %%d0, %%d2, %%acc0;" \
74 "mac.l %%d1, %%d3, %%acc0;" \
75 "mac.l %%d1, %%d2, %%acc1;" \
76 "msac.l %%d0, %%d3, %%acc1;" \
77 "movclr.l %%acc0, %[mr];" \
78 "movclr.l %%acc1, %[mi];" \
79 : [mr] "=r" ((m).r), [mi] "=r" ((m).i) \
80 : [ap] "a" (&(a)), [bp] "a" (&(b)) \
81 : "d0", "d1", "d2", "d3", "cc"); \
82 }
83#else
64# define C_MULC(m,a,b) \ 84# define C_MULC(m,a,b) \
65 do{ (m).r = ADD32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ 85 do{ (m).r = ADD32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \
66 (m).i = SUB32(S_MUL((a).i,(b).r) , S_MUL((a).r,(b).i)); }while(0) 86 (m).i = SUB32(S_MUL((a).i,(b).r) , S_MUL((a).r,(b).i)); }while(0)
87#endif
67 88
68# define C_MUL4(m,a,b) \ 89# define C_MUL4(m,a,b) \
69 do{ (m).r = SHR32(SUB32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)),2); \ 90 do{ (m).r = SHR32(SUB32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)),2); \