78 #ifndef ARM_MATH_CM0_FAMILY 82 #ifndef UNALIGNED_SUPPORT_DISABLE 96 q31_t x0, x1, x2, x3, c0;
97 q63_t acc0, acc1, acc2, acc3;
99 uint32_t tapCnt, blkCnt;
104 pStateCurnt = &(S->
pState[(numTaps - 1u)]);
115 blkCnt = blockSize >> 2;
148 tapCnt = numTaps >> 2;
156 acc0 = __SMLALD(x0, c0, acc0);
159 acc1 = __SMLALD(x1, c0, acc1);
168 acc2 = __SMLALD(x2, c0, acc2);
171 acc3 = __SMLALD(x3, c0, acc3);
177 acc0 = __SMLALD(x2, c0, acc0);
180 acc1 = __SMLALD(x3, c0, acc1);
189 acc2 = __SMLALD(x0, c0, acc2);
192 acc3 = __SMLALD(x1, c0, acc3);
203 if((numTaps & 0x3u) != 0u)
214 acc0 = __SMLALD(x0, c0, acc0);
218 acc1 = __SMLALD(x1, c0, acc1);
219 acc2 = __SMLALD(x2, c0, acc2);
220 acc3 = __SMLALD(x3, c0, acc3);
226 #ifndef ARM_MATH_BIG_ENDIAN 229 __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16);
231 __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16);
236 __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16);
238 __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16);
253 blkCnt = blockSize % 0x4u;
257 *pStateCurnt++ = *pSrc++;
268 tapCnt = numTaps >> 1;
276 acc0 = __SMLALD(x0, c0, acc0);
283 *pDst++ = (
q15_t) (__SSAT((acc0 >> 15), 16));
300 tapCnt = (numTaps - 1u) >> 2;
314 tapCnt = (numTaps - 1u) % 0x4u;
319 *pStateCurnt++ = *pState++;
337 q63_t acc0, acc1, acc2, acc3;
340 q31_t x0, x1, x2, c0;
342 uint32_t tapCnt, blkCnt;
347 pStateCurnt = &(S->
pState[(numTaps - 1u)]);
358 blkCnt = blockSize >> 2;
366 *pStateCurnt++ = *pSrc++;
367 *pStateCurnt++ = *pSrc++;
368 *pStateCurnt++ = *pSrc++;
369 *pStateCurnt++ = *pSrc++;
392 tapCnt = numTaps >> 2;
400 acc0 = __SMLALD(x0, c0, acc0);
403 acc2 = __SMLALD(x2, c0, acc2);
406 #ifndef ARM_MATH_BIG_ENDIAN 407 x1 = __PKHBT(x2, x0, 0);
409 x1 = __PKHBT(x0, x2, 0);
416 acc1 = __SMLALDX(x1, c0, acc1);
419 #ifndef ARM_MATH_BIG_ENDIAN 420 x1 = __PKHBT(x0, x2, 0);
422 x1 = __PKHBT(x2, x0, 0);
426 acc3 = __SMLALDX(x1, c0, acc3);
432 acc0 = __SMLALD(x2, c0, acc0);
438 acc2 = __SMLALD(x0, c0, acc2);
441 acc1 = __SMLALDX(x1, c0, acc1);
444 #ifndef ARM_MATH_BIG_ENDIAN 445 x1 = __PKHBT(x2, x0, 0);
447 x1 = __PKHBT(x0, x2, 0);
451 acc3 = __SMLALDX(x1, c0, acc3);
463 if((numTaps & 0x3u) != 0u)
470 acc0 = __SMLALD(x0, c0, acc0);
471 acc2 = __SMLALD(x2, c0, acc2);
474 #ifndef ARM_MATH_BIG_ENDIAN 475 x1 = __PKHBT(x2, x0, 0);
477 x1 = __PKHBT(x0, x2, 0);
484 acc1 = __SMLALDX(x1, c0, acc1);
487 #ifndef ARM_MATH_BIG_ENDIAN 488 x1 = __PKHBT(x0, x2, 0);
490 x1 = __PKHBT(x2, x0, 0);
494 acc3 = __SMLALDX(x1, c0, acc3);
500 #ifndef ARM_MATH_BIG_ENDIAN 503 __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16);
506 __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16);
511 __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16);
514 __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16);
527 blkCnt = blockSize % 0x4u;
531 *pStateCurnt++ = *pSrc++;
540 tapCnt = numTaps >> 1u;
544 acc0 += (
q31_t) * px++ * *pb++;
545 acc0 += (
q31_t) * px++ * *pb++;
552 *pDst++ = (
q15_t) (__SSAT((acc0 >> 15), 16));
555 pState = pState + 1u;
569 tapCnt = (numTaps - 1u) >> 2;
573 *pStateCurnt++ = *pState++;
574 *pStateCurnt++ = *pState++;
575 *pStateCurnt++ = *pState++;
576 *pStateCurnt++ = *pState++;
583 tapCnt = (numTaps - 1u) % 0x4u;
588 *pStateCurnt++ = *pState++;
619 uint32_t tapCnt, blkCnt;
623 pStateCurnt = &(S->
pState[(numTaps - 1u)]);
631 *pStateCurnt++ = *pSrc++;
648 acc += (
q31_t) * px++ * *pb++;
650 }
while(tapCnt > 0u);
654 *pDst++ = (
q15_t) __SSAT((acc >> 15u), 16);
671 tapCnt = (numTaps - 1u);
676 *pStateCurnt++ = *pState++;
Instance structure for the Q15 FIR filter.
int64_t q63_t
64-bit fractional data type in 1.63 format.
int16_t q15_t
16-bit fractional data type in 1.15 format.
void arm_fir_q15(const arm_fir_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize)
Processing function for the Q15 FIR filter.
#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.