94 q63_t acc0, acc1, acc2, acc3;
98 q15_t *pScr1 = pScratch1;
99 q15_t *pScr2 = pScratch2;
104 uint32_t j, k, blkCnt;
106 #ifdef UNALIGNED_SUPPORT_DISABLE 115 if(srcALen >= srcBLen)
139 pScr2 = pScratch2 + srcBLen - 1;
183 pScr1 += (srcBLen - 1u);
187 #ifndef UNALIGNED_SUPPORT_DISABLE 230 #ifndef UNALIGNED_SUPPORT_DISABLE 236 pScr1 += (srcBLen - 1u);
241 k = (srcBLen - 1u) >> 2u;
259 k = (srcBLen - 1u) % 0x4u;
283 blkCnt = (srcALen + srcBLen - 1u) >> 2;
302 tapCnt = (srcBLen) >> 2u;
307 #ifndef UNALIGNED_SUPPORT_DISABLE 314 acc0 = __SMLALD(x1, y1, acc0);
315 acc2 = __SMLALD(x2, y1, acc2);
318 #ifndef ARM_MATH_BIG_ENDIAN 319 x3 = __PKHBT(x2, x1, 0);
321 x3 = __PKHBT(x1, x2, 0);
325 acc1 = __SMLALDX(x3, y1, acc1);
331 acc0 = __SMLALD(x2, y2, acc0);
332 acc2 = __SMLALD(x1, y2, acc2);
335 #ifndef ARM_MATH_BIG_ENDIAN 336 x3 = __PKHBT(x1, x2, 0);
338 x3 = __PKHBT(x2, x1, 0);
341 acc3 = __SMLALDX(x3, y1, acc3);
342 acc1 = __SMLALDX(x3, y2, acc1);
346 #ifndef ARM_MATH_BIG_ENDIAN 347 x3 = __PKHBT(x2, x1, 0);
349 x3 = __PKHBT(x1, x2, 0);
352 acc3 = __SMLALDX(x3, y2, acc3);
360 #ifndef ARM_MATH_BIG_ENDIAN 361 y1 = __PKHBT(a, b, 16);
363 y1 = __PKHBT(b, a, 16);
368 #ifndef ARM_MATH_BIG_ENDIAN 369 y2 = __PKHBT(a, b, 16);
371 y2 = __PKHBT(b, a, 16);
374 acc0 = __SMLALD(x1, y1, acc0);
376 acc2 = __SMLALD(x2, y1, acc2);
378 #ifndef ARM_MATH_BIG_ENDIAN 379 x3 = __PKHBT(x2, x1, 0);
381 x3 = __PKHBT(x1, x2, 0);
384 acc1 = __SMLALDX(x3, y1, acc1);
389 #ifndef ARM_MATH_BIG_ENDIAN 390 x1 = __PKHBT(a, b, 16);
392 x1 = __PKHBT(b, a, 16);
395 acc0 = __SMLALD(x2, y2, acc0);
397 acc2 = __SMLALD(x1, y2, acc2);
399 #ifndef ARM_MATH_BIG_ENDIAN 400 x3 = __PKHBT(x1, x2, 0);
402 x3 = __PKHBT(x2, x1, 0);
405 acc3 = __SMLALDX(x3, y1, acc3);
407 acc1 = __SMLALDX(x3, y2, acc1);
412 #ifndef ARM_MATH_BIG_ENDIAN 413 x2 = __PKHBT(a, b, 16);
415 x2 = __PKHBT(b, a, 16);
418 #ifndef ARM_MATH_BIG_ENDIAN 419 x3 = __PKHBT(x2, x1, 0);
421 x3 = __PKHBT(x1, x2, 0);
424 acc3 = __SMLALDX(x3, y2, acc3);
440 tapCnt = (srcBLen) & 3u;
446 acc0 += (*pScr1++ * *pIn2);
447 acc1 += (*pScr1++ * *pIn2);
448 acc2 += (*pScr1++ * *pIn2);
449 acc3 += (*pScr1++ * *pIn2++);
462 #ifndef ARM_MATH_BIG_ENDIAN 465 __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16);
468 __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16);
473 __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16);
476 __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16);
489 blkCnt = (srcALen + srcBLen - 1u) & 0x3;
500 tapCnt = (srcBLen) >> 1u;
506 acc0 += (*pScr1++ * *pIn2++);
507 acc0 += (*pScr1++ * *pIn2++);
513 tapCnt = (srcBLen) & 1u;
520 acc0 += (*pScr1++ * *pIn2++);
530 *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.
void arm_conv_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, q15_t *pScratch1, q15_t *pScratch2)
Convolution of Q15 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.