81 q31_t acc0, acc1, acc2, acc3;
86 uint32_t tapCnt, blkCnt;
91 pStateCurnt = &(S->
pState[(numTaps - 1u)]);
102 blkCnt = blockSize >> 2;
110 *pStateCurnt++ = *pSrc++;
111 *pStateCurnt++ = *pSrc++;
112 *pStateCurnt++ = *pSrc++;
113 *pStateCurnt++ = *pSrc++;
136 tapCnt = numTaps >> 2;
144 acc0 = __SMLAD(x0, c0, acc0);
147 acc2 = __SMLAD(x2, c0, acc2);
150 #ifndef ARM_MATH_BIG_ENDIAN 151 x1 = __PKHBT(x2, x0, 0);
153 x1 = __PKHBT(x0, x2, 0);
160 acc1 = __SMLADX(x1, c0, acc1);
163 #ifndef ARM_MATH_BIG_ENDIAN 164 x1 = __PKHBT(x0, x2, 0);
166 x1 = __PKHBT(x2, x0, 0);
170 acc3 = __SMLADX(x1, c0, acc3);
176 acc0 = __SMLAD(x2, c0, acc0);
182 acc2 = __SMLAD(x0, c0, acc2);
185 acc1 = __SMLADX(x1, c0, acc1);
188 #ifndef ARM_MATH_BIG_ENDIAN 189 x1 = __PKHBT(x2, x0, 0);
191 x1 = __PKHBT(x0, x2, 0);
195 acc3 = __SMLADX(x1, c0, acc3);
207 if((numTaps & 0x3u) != 0u)
214 acc0 = __SMLAD(x0, c0, acc0);
215 acc2 = __SMLAD(x2, c0, acc2);
218 #ifndef ARM_MATH_BIG_ENDIAN 219 x1 = __PKHBT(x2, x0, 0);
221 x1 = __PKHBT(x0, x2, 0);
228 acc1 = __SMLADX(x1, c0, acc1);
231 #ifndef ARM_MATH_BIG_ENDIAN 232 x1 = __PKHBT(x0, x2, 0);
234 x1 = __PKHBT(x2, x0, 0);
238 acc3 = __SMLADX(x1, c0, acc3);
244 #ifndef ARM_MATH_BIG_ENDIAN 247 __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16);
250 __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16);
255 __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16);
258 __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16);
264 pState = pState + 4u;
272 blkCnt = blockSize % 0x4u;
276 *pStateCurnt++ = *pSrc++;
285 tapCnt = numTaps >> 1u;
290 acc0 += (
q31_t) * px++ * *pb++;
291 acc0 += (
q31_t) * px++ * *pb++;
299 *pDst++ = (
q15_t) (__SSAT((acc0 >> 15), 16));
302 pState = pState + 1u;
316 tapCnt = (numTaps - 1u) >> 2;
320 *pStateCurnt++ = *pState++;
321 *pStateCurnt++ = *pState++;
322 *pStateCurnt++ = *pState++;
323 *pStateCurnt++ = *pState++;
330 tapCnt = (numTaps - 1u) % 0x4u;
335 *pStateCurnt++ = *pState++;
Instance structure for the Q15 FIR filter.
int16_t q15_t
16-bit fractional data type in 1.15 format.
#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.
void arm_fir_fast_q15(const arm_fir_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize)
Processing function for the fast Q15 FIR filter for Cortex-M3 and Cortex-M4.