[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