Faster MULT32_32_Q31 for ARM.
authorNils Wallménius <nils@rockbox.org>
Wed, 22 May 2013 21:05:07 +0000 (23:05 +0200)
committerTimothy B. Terriberry <tterribe@xiph.org>
Wed, 22 May 2013 22:33:22 +0000 (15:33 -0700)
Uses a C implementation with a 32*32 => 64 multiplication, which
 ARM has.
Speeds up decoding of a 64 kbps test file by 0.5MHz on an ARM7TDMI
 and 1.0MHz on an ARM9TDMI.
0.2% speedup on a 96 kbps enc+dec test on a Cortex A8.

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
celt/arm/fixed_armv4.h

index 73e4f43..bcacc34 100644 (file)
@@ -68,4 +68,9 @@ static inline opus_val32 MULT16_32_Q15_armv4(opus_val16 a, opus_val32 b)
 #undef MAC16_32_Q15
 #define MAC16_32_Q15(c, a, b) ADD32(c, MULT16_32_Q15(a, b))
 
+
+/** 32x32 multiplication, followed by a 31-bit shift right. Results fits in 32 bits */
+#undef MULT32_32_Q31
+#define MULT32_32_Q31(a,b) (opus_val32)((((opus_int64)(a)) * ((opus_int64)(b)))>>31)
+
 #endif