summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/codecs/liba52/a52_internal.h30
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; \