summaryrefslogtreecommitdiff
path: root/apps/codecs
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs')
-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 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; \