From 823d090d6b2915d881e816571dca94714a59b4b1 Mon Sep 17 00:00:00 2001 From: Andree Buschmann Date: Wed, 10 Oct 2012 22:49:37 +0200 Subject: opus: arm asm for C_MULC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- lib/rbcodec/codecs/libopus/celt/_kiss_fft_guts.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'lib/rbcodec/codecs/libopus/celt') 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 @@ : [ap] "a" (&(a)), [bp] "a" (&(b)) \ : "d0", "d1", "d2", "d3", "cc"); \ } +#elif defined(CPU_ARM) +# define C_MULC(m,a,b) \ + { \ + asm volatile( \ + "ldmia %[ap], {r0,r1} \n\t" \ + "ldrsh r2, [%[bp], #0] \n\t" \ + "ldrsh r3, [%[bp], #2] \n\t" \ + \ + "smull r4, %[mr], r0, r2 \n\t" \ + "smlal r4, %[mr], r1, r3 \n\t" \ + "mov r4, r4, lsr #15 \n\t" \ + "orr %[mr], r4, %[mr], lsl #17 \n\t" \ + \ + "smull r4, %[mi], r1, r2 \n\t" \ + "rsb r3, r3, #0 \n\t" \ + "smlal r4, %[mi], r0, r3 \n\t" \ + "mov r4, r4, lsr #15 \n\t" \ + "orr %[mi], r4, %[mi], lsl #17 \n\t" \ + : [mr] "=r" ((m).r), [mi] "=r" ((m).i) \ + : [ap] "r" (&(a)), [bp] "r" (&(b)) \ + : "r0", "r1", "r2", "r3", "r4"); \ +} #else # define C_MULC(m,a,b) \ do{ (m).r = ADD32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \ -- cgit v1.2.3