diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2014-01-22 19:22:05 -0500 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2014-01-22 19:22:05 -0500 |
commit | 2e6876c07a2771462eff862bc6fcc423f2cd95af (patch) | |
tree | 7b3405e2dc42a7d25ca0bd694a0efcfb4cc2ce89 /celt/arm | |
parent | 9b3a3ad7ff3db7f43640be02faa0f869ecff5b99 (diff) | |
download | libopus-2e6876c07a2771462eff862bc6fcc423f2cd95af.tar.gz |
Using SSAT in SIG2WORD16() on ARMv6
Diffstat (limited to 'celt/arm')
-rw-r--r-- | celt/arm/fixed_armv5e.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/celt/arm/fixed_armv5e.h b/celt/arm/fixed_armv5e.h index 36d6bed0..36a63211 100644 --- a/celt/arm/fixed_armv5e.h +++ b/celt/arm/fixed_armv5e.h @@ -130,4 +130,22 @@ static OPUS_INLINE opus_val32 MULT16_16_armv5e(opus_val16 a, opus_val16 b) } #define MULT16_16(a, b) (MULT16_16_armv5e(a, b)) +#ifdef OPUS_ARM_INLINE_MEDIA + +#undef SIG2WORD16 +static OPUS_INLINE opus_val16 SIG2WORD16_armv6(opus_val32 x) +{ + celt_sig res; + __asm__( + "#SIG2WORD16\n\t" + "ssat %0, #16, %1, ASR #12\n\t" + : "=r"(res) + : "r"(x+2048) + ); + return EXTRACT16(res); +} +#define SIG2WORD16(x) (SIG2WORD16_armv6(x)) + +#endif /* OPUS_ARM_INLINE_MEDIA */ + #endif |