92 uint32_t j, k, blkCnt, tapCnt;
95 q31_t acc0, acc1, acc2, acc3;
98 q7_t out0, out1, out2, out3;
103 if(srcALen >= srcBLen)
129 px = pIn2 + srcBLen - 1;
173 pScr1 += (srcBLen - 1u);
184 x4 = (
q15_t) * pIn1++;
186 x4 = (
q15_t) * pIn1++;
188 x4 = (
q15_t) * pIn1++;
190 x4 = (
q15_t) * pIn1++;
204 x4 = (
q15_t) * pIn1++;
211 #ifndef UNALIGNED_SUPPORT_DISABLE 217 pScr1 += (srcBLen - 1u);
222 k = (srcBLen - 1u) >> 2u;
240 k = (srcBLen - 1u) % 0x4u;
262 blkCnt = (srcALen + srcBLen - 1u) >> 2;
281 tapCnt = (srcBLen) >> 2u;
290 acc0 = __SMLAD(x1, y1, acc0);
291 acc2 = __SMLAD(x2, y1, acc2);
294 #ifndef ARM_MATH_BIG_ENDIAN 295 x3 = __PKHBT(x2, x1, 0);
297 x3 = __PKHBT(x1, x2, 0);
301 acc1 = __SMLADX(x3, y1, acc1);
307 #ifndef ARM_MATH_BIG_ENDIAN 308 x3 = __PKHBT(x1, x2, 0);
310 x3 = __PKHBT(x2, x1, 0);
313 acc3 = __SMLADX(x3, y1, acc3);
318 acc0 = __SMLAD(x2, y1, acc0);
320 acc2 = __SMLAD(x1, y1, acc2);
322 acc1 = __SMLADX(x3, y1, acc1);
326 #ifndef ARM_MATH_BIG_ENDIAN 327 x3 = __PKHBT(x2, x1, 0);
329 x3 = __PKHBT(x1, x2, 0);
332 acc3 = __SMLADX(x3, y1, acc3);
348 tapCnt = (srcBLen) & 3u;
354 acc0 += (*pScr1++ * *pScr2);
355 acc1 += (*pScr1++ * *pScr2);
356 acc2 += (*pScr1++ * *pScr2);
357 acc3 += (*pScr1++ * *pScr2++);
368 out0 = (
q7_t) (__SSAT(acc0 >> 7u, 8));
369 out1 = (
q7_t) (__SSAT(acc1 >> 7u, 8));
370 out2 = (
q7_t) (__SSAT(acc2 >> 7u, 8));
371 out3 = (
q7_t) (__SSAT(acc3 >> 7u, 8));
383 blkCnt = (srcALen + srcBLen - 1u) & 0x3;
394 tapCnt = (srcBLen) >> 1u;
398 acc0 += (*pScr1++ * *pScr2++);
399 acc0 += (*pScr1++ * *pScr2++);
405 tapCnt = (srcBLen) & 1u;
412 acc0 += (*pScr1++ * *pScr2++);
421 *pOut++ = (
q7_t) (__SSAT(acc0 >> 7u, 8));
int8_t q7_t
8-bit fractional data type in 1.7 format.
void arm_conv_opt_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst, q15_t *pScratch1, q15_t *pScratch2)
Convolution of Q7 sequences.
#define __PACKq7(v0, v1, v2, v3)
definition to pack four 8 bit values.
int16_t q15_t
16-bit fractional data type in 1.15 format.
#define __SIMD32(addr)
definition to read/write two 16 bit values.
#define _SIMD32_OFFSET(addr)
int32_t q31_t
32-bit fractional data type in 1.31 format.
void arm_fill_q15(q15_t value, q15_t *pDst, uint32_t blockSize)
Fills a constant value into a Q15 vector.