93 q15_t *pScr1 = pScratch1;
94 q15_t *pScr2 = pScratch2;
98 q31_t acc0, acc1, acc2, acc3;
99 uint32_t j, k = 0u, blkCnt;
101 uint32_t outBlockSize;
104 q31_t x1, x2, x3, y1;
119 if(srcALen >= srcBLen)
128 outBlockSize = (2u * srcALen) - 1u;
134 j = outBlockSize - (srcALen + (srcBLen - 1u));
155 pOut = pDst + ((srcALen + srcBLen) - 2u);
171 x4 = (
q15_t) * pIn2++;
173 x4 = (
q15_t) * pIn2++;
175 x4 = (
q15_t) * pIn2++;
177 x4 = (
q15_t) * pIn2++;
191 x4 = (
q15_t) * pIn2++;
202 pScr1 += (srcBLen - 1u);
212 x4 = (
q15_t) * pIn1++;
214 x4 = (
q15_t) * pIn1++;
216 x4 = (
q15_t) * pIn1++;
218 x4 = (
q15_t) * pIn1++;
232 x4 = (
q15_t) * pIn1++;
239 #ifndef UNALIGNED_SUPPORT_DISABLE 245 pScr1 += (srcBLen - 1u);
250 k = (srcBLen - 1u) >> 2u;
268 k = (srcBLen - 1u) % 0x4u;
288 blkCnt = (srcALen + srcBLen - 1u) >> 2;
307 tapCnt = (srcBLen) >> 2u;
316 acc0 = __SMLAD(x1, y1, acc0);
317 acc2 = __SMLAD(x2, y1, acc2);
320 #ifndef ARM_MATH_BIG_ENDIAN 321 x3 = __PKHBT(x2, x1, 0);
323 x3 = __PKHBT(x1, x2, 0);
327 acc1 = __SMLADX(x3, y1, acc1);
333 #ifndef ARM_MATH_BIG_ENDIAN 334 x3 = __PKHBT(x1, x2, 0);
336 x3 = __PKHBT(x2, x1, 0);
339 acc3 = __SMLADX(x3, y1, acc3);
344 acc0 = __SMLAD(x2, y1, acc0);
346 acc2 = __SMLAD(x1, y1, acc2);
348 acc1 = __SMLADX(x3, y1, acc1);
352 #ifndef ARM_MATH_BIG_ENDIAN 353 x3 = __PKHBT(x2, x1, 0);
355 x3 = __PKHBT(x1, x2, 0);
358 acc3 = __SMLADX(x3, y1, acc3);
374 tapCnt = (srcBLen) & 3u;
380 acc0 += (*pScr1++ * *pScr2);
381 acc1 += (*pScr1++ * *pScr2);
382 acc2 += (*pScr1++ * *pScr2);
383 acc3 += (*pScr1++ * *pScr2++);
394 *pOut = (
q7_t) (__SSAT(acc0 >> 7u, 8));
396 *pOut = (
q7_t) (__SSAT(acc1 >> 7u, 8));
398 *pOut = (
q7_t) (__SSAT(acc2 >> 7u, 8));
400 *pOut = (
q7_t) (__SSAT(acc3 >> 7u, 8));
411 blkCnt = (srcALen + srcBLen - 1u) & 0x3;
422 tapCnt = (srcBLen) >> 1u;
426 acc0 += (*pScr1++ * *pScr2++);
427 acc0 += (*pScr1++ * *pScr2++);
433 tapCnt = (srcBLen) & 1u;
440 acc0 += (*pScr1++ * *pScr2++);
449 *pOut = (
q7_t) (__SSAT(acc0 >> 7u, 8));
int8_t q7_t
8-bit fractional data type in 1.7 format.
void arm_correlate_opt_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst, q15_t *pScratch1, q15_t *pScratch2)
Correlation of Q7 sequences.
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.