[opus] Bug in ARM fixed-point ASM?

Timothy B. Terriberry tterribe at xiph.org
Sun Jul 26 03:29:42 PDT 2015

Andrew Lentvorski wrote:
> On My OS X machine, with no ASM, I get the following result which agrees
> with the Raspberry Pi 2:

In general, the inline ARM asm does not match the generic C fixed-point 
implementation, because ARMv5E does not have a 16x32->32 Q15 multiply. 
This is instead implemented using smulwb (a 16x32->32 Q16 multiply) 
followed by a left-shift by one, losing one LSB of the result. This has 
been tested and shows no discernible impact on quality.

What is less clear to me is why your two ARM devices differ, as the only 
distinction is whether ARMv6 Media instructions are enabled in the 
inline asm. The only extra function this currently adds is 
SIG2WORD16_armv6(), which should be a bit-exact match with the C version.

More information about the opus mailing list