summaryrefslogtreecommitdiff
path: root/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h')
-rw-r--r--lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h b/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h
index 1194a7d3ec..36a6321101 100644
--- a/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h
+++ b/lib/rbcodec/codecs/libopus/celt/arm/fixed_armv5e.h
@@ -82,6 +82,23 @@ static OPUS_INLINE opus_val32 MAC16_32_Q15_armv5e(opus_val32 c, opus_val16 a,
82} 82}
83#define MAC16_32_Q15(c, a, b) (MAC16_32_Q15_armv5e(c, a, b)) 83#define MAC16_32_Q15(c, a, b) (MAC16_32_Q15_armv5e(c, a, b))
84 84
85/** 16x32 multiply, followed by a 16-bit shift right and 32-bit add.
86 Result fits in 32 bits. */
87#undef MAC16_32_Q16
88static OPUS_INLINE opus_val32 MAC16_32_Q16_armv5e(opus_val32 c, opus_val16 a,
89 opus_val32 b)
90{
91 int res;
92 __asm__(
93 "#MAC16_32_Q16\n\t"
94 "smlawb %0, %1, %2, %3;\n"
95 : "=r"(res)
96 : "r"(b), "r"(a), "r"(c)
97 );
98 return res;
99}
100#define MAC16_32_Q16(c, a, b) (MAC16_32_Q16_armv5e(c, a, b))
101
85/** 16x16 multiply-add where the result fits in 32 bits */ 102/** 16x16 multiply-add where the result fits in 32 bits */
86#undef MAC16_16 103#undef MAC16_16
87static OPUS_INLINE opus_val32 MAC16_16_armv5e(opus_val32 c, opus_val16 a, 104static OPUS_INLINE opus_val32 MAC16_16_armv5e(opus_val32 c, opus_val16 a,
@@ -113,4 +130,22 @@ static OPUS_INLINE opus_val32 MULT16_16_armv5e(opus_val16 a, opus_val16 b)
113} 130}
114#define MULT16_16(a, b) (MULT16_16_armv5e(a, b)) 131#define MULT16_16(a, b) (MULT16_16_armv5e(a, b))
115 132
133#ifdef OPUS_ARM_INLINE_MEDIA
134
135#undef SIG2WORD16
136static OPUS_INLINE opus_val16 SIG2WORD16_armv6(opus_val32 x)
137{
138 celt_sig res;
139 __asm__(
140 "#SIG2WORD16\n\t"
141 "ssat %0, #16, %1, ASR #12\n\t"
142 : "=r"(res)
143 : "r"(x+2048)
144 );
145 return EXTRACT16(res);
146}
147#define SIG2WORD16(x) (SIG2WORD16_armv6(x))
148
149#endif /* OPUS_ARM_INLINE_MEDIA */
150
116#endif 151#endif