79 #ifndef ARM_MATH_CM0_FAMILY 89 q31_t sum, acc0, acc1, acc2, acc3;
92 q7_t x0, x1, x2, x3, c0, c1;
93 uint32_t j, k, count, check, blkCnt;
94 int32_t blockSize1, blockSize2, blockSize3;
99 if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u))))
110 if(srcALen >= srcBLen)
134 check = firstIndex + numPoints;
135 blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0;
136 blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3;
137 blockSize1 = (((int32_t) srcBLen - 1) - (int32_t) firstIndex);
138 blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1u)) ? blockSize1 :
139 (int32_t) numPoints) : 0;
140 blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) +
141 (int32_t) firstIndex);
142 blockSize2 = (blockSize2 > 0) ? blockSize2 : 0;
155 pOut = pDst + firstIndex;
171 count = 1u + firstIndex;
177 pSrc2 = pIn2 + firstIndex;
185 while(blockSize1 > 0)
198 in1 = (
q15_t) * px++;
199 in2 = (
q15_t) * px++;
200 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
203 in1 = (
q15_t) * py--;
204 in2 = (
q15_t) * py--;
205 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
209 sum = __SMLAD(input1, input2, sum);
212 in1 = (
q15_t) * px++;
213 in2 = (
q15_t) * px++;
214 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
217 in1 = (
q15_t) * py--;
218 in2 = (
q15_t) * py--;
219 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
223 sum = __SMLAD(input1, input2, sum);
236 sum += ((
q31_t) * px++ * *py--);
243 *pOut++ = (
q7_t) (__SSAT(sum >> 7, 8));
267 if((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0)
269 px = pIn1 + firstIndex - srcBLen + 1;
277 pSrc2 = pIn2 + (srcBLen - 1u);
293 blkCnt = ((uint32_t) blockSize2 >> 2u);
327 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
333 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
336 acc0 = __SMLAD(input1, input2, acc0);
342 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
345 acc1 = __SMLAD(input1, input2, acc1);
351 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
354 acc2 = __SMLAD(input1, input2, acc2);
363 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
366 acc3 = __SMLAD(input1, input2, acc3);
380 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
386 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
389 acc0 = __SMLAD(input1, input2, acc0);
395 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
398 acc1 = __SMLAD(input1, input2, acc1);
404 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
407 acc2 = __SMLAD(input1, input2, acc2);
416 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
419 acc3 = __SMLAD(input1, input2, acc3);
437 acc0 += ((
q31_t) x0 * c0);
439 acc1 += ((
q31_t) x1 * c0);
441 acc2 += ((
q31_t) x2 * c0);
443 acc3 += ((
q31_t) x3 * c0);
455 *pOut++ = (
q7_t) (__SSAT(acc0 >> 7, 8));
456 *pOut++ = (
q7_t) (__SSAT(acc1 >> 7, 8));
457 *pOut++ = (
q7_t) (__SSAT(acc2 >> 7, 8));
458 *pOut++ = (
q7_t) (__SSAT(acc3 >> 7, 8));
474 blkCnt = (uint32_t) blockSize2 % 0x4u;
490 in1 = (
q15_t) * px++;
491 in2 = (
q15_t) * px++;
492 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
495 in1 = (
q15_t) * py--;
496 in2 = (
q15_t) * py--;
497 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
500 sum = __SMLAD(input1, input2, sum);
503 in1 = (
q15_t) * px++;
504 in2 = (
q15_t) * px++;
505 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
508 in1 = (
q15_t) * py--;
509 in2 = (
q15_t) * py--;
510 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
513 sum = __SMLAD(input1, input2, sum);
526 sum += ((
q31_t) * px++ * *py--);
533 *pOut++ = (
q7_t) (__SSAT(sum >> 7, 8));
550 blkCnt = (uint32_t) blockSize2;
563 sum += ((
q31_t) * px++ * *py--);
570 *pOut++ = (
q7_t) (__SSAT(sum >> 7, 8));
598 count = srcBLen - 1u;
601 pSrc1 = (pIn1 + srcALen) - (srcBLen - 1u);
605 pSrc2 = pIn2 + (srcBLen - 1u);
612 while(blockSize3 > 0)
625 in1 = (
q15_t) * px++;
626 in2 = (
q15_t) * px++;
627 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
630 in1 = (
q15_t) * py--;
631 in2 = (
q15_t) * py--;
632 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
636 sum = __SMLAD(input1, input2, sum);
639 in1 = (
q15_t) * px++;
640 in2 = (
q15_t) * px++;
641 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
644 in1 = (
q15_t) * py--;
645 in2 = (
q15_t) * py--;
646 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16);
650 sum = __SMLAD(input1, input2, sum);
664 sum += ((
q31_t) * px++ * *py--);
671 *pOut++ = (
q7_t) (__SSAT(sum >> 7, 8));
703 if((firstIndex + numPoints) > ((srcALen + (srcBLen - 1u))))
711 for (i = firstIndex; i <= (firstIndex + numPoints - 1); i++)
717 for (j = 0; j <= i; j++)
720 if(((i - j) < srcBLen) && (j < srcALen))
723 sum += ((
q15_t) pIn1[j] * (pIn2[i - j]));
728 pDst[i] = (
q7_t) __SSAT((sum >> 7u), 8u);
int8_t q7_t
8-bit fractional data type in 1.7 format.
arm_status arm_conv_partial_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst, uint32_t firstIndex, uint32_t numPoints)
Partial convolution of Q7 sequences.
int16_t q15_t
16-bit fractional data type in 1.15 format.
int32_t q31_t
32-bit fractional data type in 1.31 format.
arm_status
Error status returned by some functions in the library.