94 q31_t acc0, acc1, acc2, acc3;
97 uint32_t j, blkCnt, outBlockSize;
103 #ifdef UNALIGNED_SUPPORT_DISABLE 122 if(srcALen >= srcBLen)
131 outBlockSize = (2u * srcALen) - 1u;
137 j = outBlockSize - (srcALen + (srcBLen - 1u));
158 pOut = pDst + ((srcALen + srcBLen) - 2u);
171 pScr += (srcBLen - 1u);
173 #ifndef UNALIGNED_SUPPORT_DISABLE 215 #ifndef UNALIGNED_SUPPORT_DISABLE 221 pScr += (srcBLen - 1u);
226 j = (srcBLen - 1u) >> 2u;
244 j = (srcBLen - 1u) % 0x4u;
262 blkCnt = (srcALen + srcBLen - 1u) >> 2;
281 tapCnt = (srcBLen) >> 2u;
286 #ifndef UNALIGNED_SUPPORT_DISABLE 292 acc0 = __SMLAD(x1, y1, acc0);
294 acc2 = __SMLAD(x2, y1, acc2);
296 #ifndef ARM_MATH_BIG_ENDIAN 297 x3 = __PKHBT(x2, x1, 0);
299 x3 = __PKHBT(x1, x2, 0);
302 acc1 = __SMLADX(x3, y1, acc1);
306 acc0 = __SMLAD(x2, y2, acc0);
308 acc2 = __SMLAD(x1, y2, acc2);
310 #ifndef ARM_MATH_BIG_ENDIAN 311 x3 = __PKHBT(x1, x2, 0);
313 x3 = __PKHBT(x2, x1, 0);
316 acc3 = __SMLADX(x3, y1, acc3);
318 acc1 = __SMLADX(x3, y2, acc1);
322 #ifndef ARM_MATH_BIG_ENDIAN 323 x3 = __PKHBT(x2, x1, 0);
325 x3 = __PKHBT(x1, x2, 0);
328 acc3 = __SMLADX(x3, y2, acc3);
335 #ifndef ARM_MATH_BIG_ENDIAN 336 y1 = __PKHBT(a, b, 16);
338 y1 = __PKHBT(b, a, 16);
343 #ifndef ARM_MATH_BIG_ENDIAN 344 y2 = __PKHBT(a, b, 16);
346 y2 = __PKHBT(b, a, 16);
349 acc0 = __SMLAD(x1, y1, acc0);
351 acc2 = __SMLAD(x2, y1, acc2);
353 #ifndef ARM_MATH_BIG_ENDIAN 354 x3 = __PKHBT(x2, x1, 0);
356 x3 = __PKHBT(x1, x2, 0);
359 acc1 = __SMLADX(x3, y1, acc1);
364 #ifndef ARM_MATH_BIG_ENDIAN 365 x1 = __PKHBT(a, b, 16);
367 x1 = __PKHBT(b, a, 16);
370 acc0 = __SMLAD(x2, y2, acc0);
372 acc2 = __SMLAD(x1, y2, acc2);
374 #ifndef ARM_MATH_BIG_ENDIAN 375 x3 = __PKHBT(x1, x2, 0);
377 x3 = __PKHBT(x2, x1, 0);
380 acc3 = __SMLADX(x3, y1, acc3);
382 acc1 = __SMLADX(x3, y2, acc1);
387 #ifndef ARM_MATH_BIG_ENDIAN 388 x2 = __PKHBT(a, b, 16);
390 x2 = __PKHBT(b, a, 16);
393 #ifndef ARM_MATH_BIG_ENDIAN 394 x3 = __PKHBT(x2, x1, 0);
396 x3 = __PKHBT(x1, x2, 0);
399 acc3 = __SMLADX(x3, y2, acc3);
419 tapCnt = (srcBLen) & 3u;
425 acc0 += (*pScr++ * *pIn2);
426 acc1 += (*pScr++ * *pIn2);
427 acc2 += (*pScr++ * *pIn2);
428 acc3 += (*pScr++ * *pIn2++);
440 *pOut = (__SSAT(acc0 >> 15u, 16));
442 *pOut = (__SSAT(acc1 >> 15u, 16));
444 *pOut = (__SSAT(acc2 >> 15u, 16));
446 *pOut = (__SSAT(acc3 >> 15u, 16));
458 blkCnt = (srcALen + srcBLen - 1u) & 0x3;
469 tapCnt = (srcBLen) >> 1u;
474 acc0 += (*pScr++ * *pIn2++);
475 acc0 += (*pScr++ * *pIn2++);
481 tapCnt = (srcBLen) & 1u;
488 acc0 += (*pScr++ * *pIn2++);
498 *pOut = (
q15_t) (__SSAT((acc0 >> 15), 16));
void arm_copy_q15(q15_t *pSrc, q15_t *pDst, uint32_t blockSize)
Copies the elements of a Q15 vector.
int16_t q15_t
16-bit fractional data type in 1.15 format.
#define __SIMD32(addr)
definition to read/write two 16 bit values.
void arm_correlate_fast_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, q15_t *pScratch)
Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4.
#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.