92 q31_t sum, acc0, acc1, acc2, acc3;
93 q31_t x0, x1, x2, x3, c0;
94 uint32_t j, k, count, blkCnt, blockSize1, blockSize2, blockSize3;
99 if(srcALen >= srcBLen)
132 blockSize1 = srcBLen - 1u;
133 blockSize2 = srcALen - (srcBLen - 1u);
134 blockSize3 = blockSize1;
162 while(blockSize1 > 0u)
176 ((
q63_t) * px++ * (*py--))) >> 32);
180 ((
q63_t) * px++ * (*py--))) >> 32);
184 ((
q63_t) * px++ * (*py--))) >> 32);
188 ((
q63_t) * px++ * (*py--))) >> 32);
202 ((
q63_t) * px++ * (*py--))) >> 32);
236 pSrc2 = pIn2 + (srcBLen - 1u);
252 blkCnt = blockSize2 >> 2u;
282 acc0 = (
q31_t) ((((
q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32);
285 acc1 = (
q31_t) ((((
q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32);
288 acc2 = (
q31_t) ((((
q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32);
291 acc3 = (
q31_t) ((((
q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32);
301 acc0 = (
q31_t) ((((
q63_t) acc0 << 32) + ((q63_t) x1 * c0)) >> 32);
303 acc1 = (
q31_t) ((((
q63_t) acc1 << 32) + ((q63_t) x2 * c0)) >> 32);
305 acc2 = (
q31_t) ((((
q63_t) acc2 << 32) + ((q63_t) x3 * c0)) >> 32);
307 acc3 = (
q31_t) ((((
q63_t) acc3 << 32) + ((q63_t) x0 * c0)) >> 32);
317 acc0 = (
q31_t) ((((
q63_t) acc0 << 32) + ((q63_t) x2 * c0)) >> 32);
319 acc1 = (
q31_t) ((((
q63_t) acc1 << 32) + ((q63_t) x3 * c0)) >> 32);
321 acc2 = (
q31_t) ((((
q63_t) acc2 << 32) + ((q63_t) x0 * c0)) >> 32);
323 acc3 = (
q31_t) ((((
q63_t) acc3 << 32) + ((q63_t) x1 * c0)) >> 32);
333 acc0 = (
q31_t) ((((
q63_t) acc0 << 32) + ((q63_t) x3 * c0)) >> 32);
335 acc1 = (
q31_t) ((((
q63_t) acc1 << 32) + ((q63_t) x0 * c0)) >> 32);
337 acc2 = (
q31_t) ((((
q63_t) acc2 << 32) + ((q63_t) x1 * c0)) >> 32);
339 acc3 = (
q31_t) ((((
q63_t) acc3 << 32) + ((q63_t) x2 * c0)) >> 32);
358 acc0 = (
q31_t) ((((
q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32);
360 acc1 = (
q31_t) ((((
q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32);
362 acc2 = (
q31_t) ((((
q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32);
364 acc3 = (
q31_t) ((((
q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32);
376 *pOut++ = (
q31_t) (acc0 << 1);
377 *pOut++ = (
q31_t) (acc1 << 1);
378 *pOut++ = (
q31_t) (acc2 << 1);
379 *pOut++ = (
q31_t) (acc3 << 1);
394 blkCnt = blockSize2 % 0x4u;
410 ((
q63_t) * px++ * (*py--))) >> 32);
412 ((
q63_t) * px++ * (*py--))) >> 32);
414 ((
q63_t) * px++ * (*py--))) >> 32);
416 ((
q63_t) * px++ * (*py--))) >> 32);
430 ((
q63_t) * px++ * (*py--))) >> 32);
468 ((
q63_t) * px++ * (*py--))) >> 32);
505 pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u);
509 pSrc2 = pIn2 + (srcBLen - 1u);
516 while(blockSize3 > 0u)
522 k = blockSize3 >> 2u;
530 ((
q63_t) * px++ * (*py--))) >> 32);
534 ((
q63_t) * px++ * (*py--))) >> 32);
538 ((
q63_t) * px++ * (*py--))) >> 32);
542 ((
q63_t) * px++ * (*py--))) >> 32);
550 k = blockSize3 % 0x4u;
556 ((
q63_t) * px++ * (*py--))) >> 32);
int64_t q63_t
64-bit fractional data type in 1.63 format.
void arm_conv_fast_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst)
Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4.
int32_t q31_t
32-bit fractional data type in 1.31 format.