93 q63_t acc0, acc1, acc2, acc3;
96 uint32_t j, blkCnt, outBlockSize;
102 #ifdef UNALIGNED_SUPPORT_DISABLE 121 if(srcALen >= srcBLen)
130 outBlockSize = (2u * srcALen) - 1u;
136 j = outBlockSize - (srcALen + (srcBLen - 1u));
157 pOut = pDst + ((srcALen + srcBLen) - 2u);
170 pScr += (srcBLen - 1u);
172 #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 = __SMLALD(x1, y1, acc0);
294 acc2 = __SMLALD(x2, y1, acc2);
296 #ifndef ARM_MATH_BIG_ENDIAN 297 x3 = __PKHBT(x2, x1, 0);
299 x3 = __PKHBT(x1, x2, 0);
302 acc1 = __SMLALDX(x3, y1, acc1);
306 acc0 = __SMLALD(x2, y2, acc0);
308 acc2 = __SMLALD(x1, y2, acc2);
310 #ifndef ARM_MATH_BIG_ENDIAN 311 x3 = __PKHBT(x1, x2, 0);
313 x3 = __PKHBT(x2, x1, 0);
316 acc3 = __SMLALDX(x3, y1, acc3);
318 acc1 = __SMLALDX(x3, y2, acc1);
322 #ifndef ARM_MATH_BIG_ENDIAN 323 x3 = __PKHBT(x2, x1, 0);
325 x3 = __PKHBT(x1, x2, 0);
328 acc3 = __SMLALDX(x3, y2, acc3);
336 #ifndef ARM_MATH_BIG_ENDIAN 337 y1 = __PKHBT(a, b, 16);
339 y1 = __PKHBT(b, a, 16);
344 #ifndef ARM_MATH_BIG_ENDIAN 345 y2 = __PKHBT(a, b, 16);
347 y2 = __PKHBT(b, a, 16);
350 acc0 = __SMLALD(x1, y1, acc0);
352 acc2 = __SMLALD(x2, y1, acc2);
354 #ifndef ARM_MATH_BIG_ENDIAN 355 x3 = __PKHBT(x2, x1, 0);
357 x3 = __PKHBT(x1, x2, 0);
360 acc1 = __SMLALDX(x3, y1, acc1);
365 #ifndef ARM_MATH_BIG_ENDIAN 366 x1 = __PKHBT(a, b, 16);
368 x1 = __PKHBT(b, a, 16);
371 acc0 = __SMLALD(x2, y2, acc0);
373 acc2 = __SMLALD(x1, y2, acc2);
375 #ifndef ARM_MATH_BIG_ENDIAN 376 x3 = __PKHBT(x1, x2, 0);
378 x3 = __PKHBT(x2, x1, 0);
381 acc3 = __SMLALDX(x3, y1, acc3);
383 acc1 = __SMLALDX(x3, y2, acc1);
388 #ifndef ARM_MATH_BIG_ENDIAN 389 x2 = __PKHBT(a, b, 16);
391 x2 = __PKHBT(b, a, 16);
394 #ifndef ARM_MATH_BIG_ENDIAN 395 x3 = __PKHBT(x2, x1, 0);
397 x3 = __PKHBT(x1, x2, 0);
400 acc3 = __SMLALDX(x3, y2, acc3);
420 tapCnt = (srcBLen) & 3u;
426 acc0 += (*pScr++ * *pIn2);
427 acc1 += (*pScr++ * *pIn2);
428 acc2 += (*pScr++ * *pIn2);
429 acc3 += (*pScr++ * *pIn2++);
441 *pOut = (__SSAT(acc0 >> 15u, 16));
443 *pOut = (__SSAT(acc1 >> 15u, 16));
445 *pOut = (__SSAT(acc2 >> 15u, 16));
447 *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++);
497 *pOut = (
q15_t) (__SSAT((acc0 >> 15), 16));
int64_t q63_t
64-bit fractional data type in 1.63 format.
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.
#define _SIMD32_OFFSET(addr)
int32_t q31_t
32-bit fractional data type in 1.31 format.
void arm_correlate_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, q15_t *pScratch)
Correlation of Q15 sequences.
void arm_fill_q15(q15_t value, q15_t *pDst, uint32_t blockSize)
Fills a constant value into a Q15 vector.