85 #ifndef ARM_MATH_CM0_FAMILY 95 q7_t x0, x1, x2, x3, c0, c1;
96 q31_t sum, acc0, acc1, acc2, acc3;
99 uint32_t j, k, count, blkCnt, blockSize1, blockSize2, blockSize3;
104 if(srcALen >= srcBLen)
137 blockSize1 = srcBLen - 1u;
138 blockSize2 = (srcALen - srcBLen) + 1u;
139 blockSize3 = blockSize1;
167 while(blockSize1 > 0u)
180 in1 = (
q15_t) * px++;
181 in2 = (
q15_t) * px++;
182 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
185 in1 = (
q15_t) * py--;
186 in2 = (
q15_t) * py--;
187 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
191 sum = __SMLAD(input1, input2, sum);
194 in1 = (
q15_t) * px++;
195 in2 = (
q15_t) * px++;
196 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
199 in1 = (
q15_t) * py--;
200 in2 = (
q15_t) * py--;
201 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
205 sum = __SMLAD(input1, input2, sum);
218 sum += ((
q15_t) * px++ * *py--);
225 *pOut++ = (
q7_t) (__SSAT(sum >> 7u, 8));
252 pSrc2 = pIn2 + (srcBLen - 1u);
268 blkCnt = blockSize2 >> 2u;
302 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
308 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
311 acc0 = __SMLAD(input1, input2, acc0);
317 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
320 acc1 = __SMLAD(input1, input2, acc1);
326 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
329 acc2 = __SMLAD(input1, input2, acc2);
338 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
341 acc3 = __SMLAD(input1, input2, acc3);
355 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
361 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
364 acc0 = __SMLAD(input1, input2, acc0);
370 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
373 acc1 = __SMLAD(input1, input2, acc1);
379 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
382 acc2 = __SMLAD(input1, input2, acc2);
391 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
394 acc3 = __SMLAD(input1, input2, acc3);
412 acc0 += ((
q15_t) x0 * c0);
414 acc1 += ((
q15_t) x1 * c0);
416 acc2 += ((
q15_t) x2 * c0);
418 acc3 += ((
q15_t) x3 * c0);
431 *pOut++ = (
q7_t) (__SSAT(acc0 >> 7u, 8));
432 *pOut++ = (
q7_t) (__SSAT(acc1 >> 7u, 8));
433 *pOut++ = (
q7_t) (__SSAT(acc2 >> 7u, 8));
434 *pOut++ = (
q7_t) (__SSAT(acc3 >> 7u, 8));
449 blkCnt = blockSize2 % 0x4u;
465 in1 = (
q15_t) * px++;
466 in2 = (
q15_t) * px++;
467 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
470 in1 = (
q15_t) * py--;
471 in2 = (
q15_t) * py--;
472 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
475 sum = __SMLAD(input1, input2, sum);
478 in1 = (
q15_t) * px++;
479 in2 = (
q15_t) * px++;
480 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
483 in1 = (
q15_t) * py--;
484 in2 = (
q15_t) * py--;
485 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
488 sum = __SMLAD(input1, input2, sum);
501 sum += ((
q15_t) * px++ * *py--);
508 *pOut++ = (
q7_t) (__SSAT(sum >> 7u, 8));
538 sum += ((
q15_t) * px++ * *py--);
545 *pOut++ = (
q7_t) (__SSAT(sum >> 7u, 8));
575 pSrc1 = pIn1 + (srcALen - (srcBLen - 1u));
579 pSrc2 = pIn2 + (srcBLen - 1u);
586 while(blockSize3 > 0u)
592 k = blockSize3 >> 2u;
599 in1 = (
q15_t) * px++;
600 in2 = (
q15_t) * px++;
601 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
604 in1 = (
q15_t) * py--;
605 in2 = (
q15_t) * py--;
606 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
610 sum = __SMLAD(input1, input2, sum);
613 in1 = (
q15_t) * px++;
614 in2 = (
q15_t) * px++;
615 input1 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
618 in1 = (
q15_t) * py--;
619 in2 = (
q15_t) * py--;
620 input2 = ((
q31_t) in1 & 0x0000FFFF) | ((
q31_t) in2 << 16u);
624 sum = __SMLAD(input1, input2, sum);
632 k = blockSize3 % 0x4u;
637 sum += ((
q15_t) * px++ * *py--);
644 *pOut++ = (
q7_t) (__SSAT(sum >> 7u, 8));
664 for (i = 0; i < (srcALen + srcBLen - 1); i++)
670 for (j = 0; j <= i; j++)
673 if(((i - j) < srcBLen) && (j < srcALen))
676 sum += (
q15_t) pIn1[j] * (pIn2[i - j]);
681 pDst[i] = (
q7_t) __SSAT((sum >> 7u), 8u);
int8_t q7_t
8-bit fractional data type in 1.7 format.
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.
void arm_conv_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst)
Convolution of Q7 sequences.