77 #ifndef ARM_MATH_CM0_FAMILY 87 q63_t sum, acc0, acc1, acc2;
89 uint32_t j, k, count, check, blkCnt;
90 int32_t blockSize1, blockSize2, blockSize3;
95 if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u))))
106 if(srcALen >= srcBLen)
130 check = firstIndex + numPoints;
131 blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0;
132 blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3;
133 blockSize1 = (((int32_t) srcBLen - 1) - (int32_t) firstIndex);
134 blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1u)) ? blockSize1 :
135 (int32_t) numPoints) : 0;
136 blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) +
137 (int32_t) firstIndex);
138 blockSize2 = (blockSize2 > 0) ? blockSize2 : 0;
151 pOut = pDst + firstIndex;
167 count = 1u + firstIndex;
173 pSrc2 = pIn2 + firstIndex;
181 while(blockSize1 > 0)
194 sum += (
q63_t) * px++ * (*py--);
196 sum += (
q63_t) * px++ * (*py--);
198 sum += (
q63_t) * px++ * (*py--);
200 sum += (
q63_t) * px++ * (*py--);
213 sum += (
q63_t) * px++ * (*py--);
220 *pOut++ = (
q31_t) (sum >> 31);
244 if((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0)
246 px = pIn1 + firstIndex - srcBLen + 1;
254 pSrc2 = pIn2 + (srcBLen - 1u);
271 blkCnt = blockSize2 / 3;
298 acc0 += (
q63_t) x0 *c0;
300 acc1 += (
q63_t) x1 *c0;
302 acc2 += (
q63_t) x2 *c0;
312 acc0 += (
q63_t) x1 *c0;
314 acc1 += (
q63_t) x2 *c0;
316 acc2 += (
q63_t) x0 *c0;
326 acc0 += (
q63_t) x2 *c0;
328 acc1 += (
q63_t) x0 *c0;
330 acc2 += (
q63_t) x1 *c0;
341 k = srcBLen - (3 * (srcBLen / 3));
353 acc0 += (
q63_t) x0 *c0;
355 acc1 += (
q63_t) x1 *c0;
357 acc2 += (
q63_t) x2 *c0;
368 *pOut++ = (
q31_t) (acc0 >> 31);
369 *pOut++ = (
q31_t) (acc1 >> 31);
370 *pOut++ = (
q31_t) (acc2 >> 31);
385 blkCnt = blockSize2 - 3 * (blockSize2 / 3);
400 sum += (
q63_t) * px++ * (*py--);
401 sum += (
q63_t) * px++ * (*py--);
402 sum += (
q63_t) * px++ * (*py--);
403 sum += (
q63_t) * px++ * (*py--);
416 sum += (
q63_t) * px++ * (*py--);
423 *pOut++ = (
q31_t) (sum >> 31);
440 blkCnt = (uint32_t) blockSize2;
453 sum += (
q63_t) * px++ * (*py--);
460 *pOut++ = (
q31_t) (sum >> 31);
488 count = srcBLen - 1u;
491 pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u);
495 pSrc2 = pIn2 + (srcBLen - 1u);
502 while(blockSize3 > 0)
514 sum += (
q63_t) * px++ * (*py--);
515 sum += (
q63_t) * px++ * (*py--);
516 sum += (
q63_t) * px++ * (*py--);
517 sum += (
q63_t) * px++ * (*py--);
530 sum += (
q63_t) * px++ * (*py--);
537 *pOut++ = (
q31_t) (sum >> 31);
569 if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u))))
577 for (i = firstIndex; i <= (firstIndex + numPoints - 1); i++)
583 for (j = 0; j <= i; j++)
586 if(((i - j) < srcBLen) && (j < srcALen))
589 sum += ((
q63_t) pIn1[j] * (pIn2[i - j]));
594 pDst[i] = (
q31_t) (sum >> 31u);
int64_t q63_t
64-bit fractional data type in 1.63 format.
arm_status arm_conv_partial_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst, uint32_t firstIndex, uint32_t numPoints)
Partial convolution of Q31 sequences.
int32_t q31_t
32-bit fractional data type in 1.31 format.
arm_status
Error status returned by some functions in the library.