diff options
| author | Michael Giacomelli <giac2000@hotmail.com> | 2008-09-23 00:51:22 +0000 |
|---|---|---|
| committer | Michael Giacomelli <giac2000@hotmail.com> | 2008-09-23 00:51:22 +0000 |
| commit | 9bc16e491dff45c4eda193895d2d042290d7f079 (patch) | |
| tree | a45ec05a361b279ba7d70471d63811c6da415ea9 | |
| parent | 0a1d3653bdd016493189e6cc4e318d2a5cdd77a8 (diff) | |
| download | rockbox-9bc16e491dff45c4eda193895d2d042290d7f079.zip rockbox-9bc16e491dff45c4eda193895d2d042290d7f079.tar.gz rockbox-9bc16e491dff45c4eda193895d2d042290d7f079.tar.bz2 rockbox-9bc16e491dff45c4eda193895d2d042290d7f079.tar.xz | |
Add simple ASMed fixed point multiply functions for ARM to AC3. Gives a 38% speed up on my one sample with a Sansa.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18570 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/codecs/liba52/a52_internal.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/apps/codecs/liba52/a52_internal.h b/apps/codecs/liba52/a52_internal.h index cd3286b..0db16a8 100644 --- a/apps/codecs/liba52/a52_internal.h +++ b/apps/codecs/liba52/a52_internal.h @@ -166,6 +166,36 @@ typedef int16_t quantizer_t; : [A] "r" ((a)), [B] "r" ((b))); \ t; \ }) + +#elif defined(CPU_ARM) +#define MUL(x, y) \ + ({ int32_t __hi; \ + uint32_t __lo; \ + int32_t __result; \ + asm ("smull %0, %1, %3, %4\n\t" \ + "movs %2, %1, lsl #2" \ + : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \ + : "%r" (x), "r" (y) \ + : "cc"); \ + __result; \ + }) + + +#define MUL_L(x, y) \ + ({ int32_t __hi; \ + uint32_t __lo; \ + int32_t __result; \ + asm ("smull %0, %1, %3, %4\n\t" \ + "movs %0, %0, lsr %5\n\t" \ + "adc %2, %0, %1, lsl %6" \ + : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \ + : "%r" (x), "r" (y), \ + "M" (26), "M" (32 - 26) \ + : "cc"); \ + __result; \ + }) + + #elif 1 #define MUL(a,b) \ ({ int32_t _ta=(a), _tb=(b), _tc; \ |