1
0
Fork 0
forked from len0rd/rockbox

libopus: asm C_MUL for coldfire

The recent merge of upstream changed the fft to use C_MUL which
wasn't implemented in asm for coldfire.

Speeds up decoding 64 kbps test file by 2.68 MHz and 128 kbps
test file by 2.80 MHz on H300.

Change-Id: I8b61fc0f9568d6350431e311a12e44fe4f60f72e
This commit is contained in:
Nils Wallménius 2014-07-13 11:49:34 +02:00
parent 9b7ec42403
commit 888e05ec12

View file

@ -32,6 +32,27 @@
#ifdef FIXED_POINT #ifdef FIXED_POINT
#undef C_MUL
#define C_MUL(m,a,b) \
{ \
asm volatile("move.l (%[bp]), %%d2;" \
"clr.l %%d3;" \
"move.w %%d2, %%d3;" \
"swap %%d3;" \
"clr.w %%d2;" \
"movem.l (%[ap]), %%d0-%%d1;" \
"mac.l %%d0, %%d2, %%acc0;" \
"msac.l %%d1, %%d3, %%acc0;" \
"mac.l %%d1, %%d2, %%acc1;" \
"mac.l %%d0, %%d3, %%acc1;" \
"movclr.l %%acc0, %[mr];" \
"movclr.l %%acc1, %[mi];" \
: [mr] "=r" ((m).r), [mi] "=r" ((m).i) \
: [ap] "a" (&(a)), [bp] "a" (&(b)) \
: "d0", "d1", "d2", "d3", "cc"); \
}
#undef C_MULC #undef C_MULC
#define C_MULC(m,a,b) \ #define C_MULC(m,a,b) \
{ \ { \