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.tar.gz rockbox-9bc16e491dff45c4eda193895d2d042290d7f079.zip |
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 cd3286b17a..0db16a8bcf 100644 --- a/apps/codecs/liba52/a52_internal.h +++ b/apps/codecs/liba52/a52_internal.h | |||
@@ -166,6 +166,36 @@ typedef int16_t quantizer_t; | |||
166 | : [A] "r" ((a)), [B] "r" ((b))); \ | 166 | : [A] "r" ((a)), [B] "r" ((b))); \ |
167 | t; \ | 167 | t; \ |
168 | }) | 168 | }) |
169 | |||
170 | #elif defined(CPU_ARM) | ||
171 | #define MUL(x, y) \ | ||
172 | ({ int32_t __hi; \ | ||
173 | uint32_t __lo; \ | ||
174 | int32_t __result; \ | ||
175 | asm ("smull %0, %1, %3, %4\n\t" \ | ||
176 | "movs %2, %1, lsl #2" \ | ||
177 | : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \ | ||
178 | : "%r" (x), "r" (y) \ | ||
179 | : "cc"); \ | ||
180 | __result; \ | ||
181 | }) | ||
182 | |||
183 | |||
184 | #define MUL_L(x, y) \ | ||
185 | ({ int32_t __hi; \ | ||
186 | uint32_t __lo; \ | ||
187 | int32_t __result; \ | ||
188 | asm ("smull %0, %1, %3, %4\n\t" \ | ||
189 | "movs %0, %0, lsr %5\n\t" \ | ||
190 | "adc %2, %0, %1, lsl %6" \ | ||
191 | : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \ | ||
192 | : "%r" (x), "r" (y), \ | ||
193 | "M" (26), "M" (32 - 26) \ | ||
194 | : "cc"); \ | ||
195 | __result; \ | ||
196 | }) | ||
197 | |||
198 | |||
169 | #elif 1 | 199 | #elif 1 |
170 | #define MUL(a,b) \ | 200 | #define MUL(a,b) \ |
171 | ({ int32_t _ta=(a), _tb=(b), _tc; \ | 201 | ({ int32_t _ta=(a), _tb=(b), _tc; \ |