summaryrefslogtreecommitdiff
path: root/lib/rbcodec/codecs/libopus
diff options
context:
space:
mode:
authorAndree Buschmann <AndreeBuschmann@t-online.de>2012-10-10 22:49:37 +0200
committerNils Wallménius <nils@rockbox.org>2012-10-10 22:54:02 +0200
commit823d090d6b2915d881e816571dca94714a59b4b1 (patch)
tree3a9774a38d3343145f4bfbc3000099446fd7ff35 /lib/rbcodec/codecs/libopus
parent2326f1517e77d4fb029113e8e75d347cf3adb8fb (diff)
downloadrockbox-823d090d6b2915d881e816571dca94714a59b4b1.tar.gz
rockbox-823d090d6b2915d881e816571dca94714a59b4b1.zip
opus: arm asm for C_MULC
speeds up decoding of a 64kbps test_file by 1.5MHz on c200 (pp) and 1.9MHz on fuzev1 (amsv1) Change-Id: I1db460b634eba608c3e00541d96fc93d5a05710b Signed-off-by: Nils Wallménius <nils@rockbox.org>
Diffstat (limited to 'lib/rbcodec/codecs/libopus')
-rw-r--r--lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h22
1 files changed, 22 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 6e806bbc23..b1fe8fbeb7 100644
--- a/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h
+++ b/lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h
@@ -80,6 +80,28 @@
80 : [ap] "a" (&(a)), [bp] "a" (&(b)) \ 80 : [ap] "a" (&(a)), [bp] "a" (&(b)) \
81 : "d0", "d1", "d2", "d3", "cc"); \ 81 : "d0", "d1", "d2", "d3", "cc"); \
82 } 82 }
83#elif defined(CPU_ARM)
84# define C_MULC(m,a,b) \
85 { \
86 asm volatile( \
87 "ldmia %[ap], {r0,r1} \n\t" \
88 "ldrsh r2, [%[bp], #0] \n\t" \
89 "ldrsh r3, [%[bp], #2] \n\t" \
90 \
91 "smull r4, %[mr], r0, r2 \n\t" \
92 "smlal r4, %[mr], r1, r3 \n\t" \
93 "mov r4, r4, lsr #15 \n\t" \
94 "orr %[mr], r4, %[mr], lsl #17 \n\t" \
95 \
96 "smull r4, %[mi], r1, r2 \n\t" \
97 "rsb r3, r3, #0 \n\t" \
98 "smlal r4, %[mi], r0, r3 \n\t" \
99 "mov r4, r4, lsr #15 \n\t" \
100 "orr %[mi], r4, %[mi], lsl #17 \n\t" \
101 : [mr] "=r" ((m).r), [mi] "=r" ((m).i) \
102 : [ap] "r" (&(a)), [bp] "r" (&(b)) \
103 : "r0", "r1", "r2", "r3", "r4"); \
104}
83#else 105#else
84# define C_MULC(m,a,b) \ 106# define C_MULC(m,a,b) \
85 do{ (m).r = ADD32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ 107 do{ (m).r = ADD32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \