74 #ifndef ARM_MATH_CM0_FAMILY 78 q31_t fcurnt1, fnext1, gcurnt1 = 0, gnext1;
79 q31_t fcurnt2, fnext2, gnext2;
80 q31_t fcurnt3, fnext3, gnext3;
81 q31_t fcurnt4, fnext4, gnext4;
83 uint32_t blkCnt, stageCnt;
87 blkCnt = blockSize >> 2u;
110 fnext1 = (
q31_t) ((gcurnt1 * (*pk)) >> 15u) + fcurnt1;
111 fnext1 = __SSAT(fnext1, 16);
114 gnext1 = (
q31_t) ((fcurnt1 * (*pk)) >> 15u) + gcurnt1;
115 gnext1 = __SSAT(gnext1, 16);
119 fnext2 = (
q31_t) ((fcurnt1 * (*pk)) >> 15u) + fcurnt2;
120 fnext2 = __SSAT(fnext2, 16);
122 gnext2 = (
q31_t) ((fcurnt2 * (*pk)) >> 15u) + fcurnt1;
123 gnext2 = __SSAT(gnext2, 16);
133 *px++ = (
q15_t) fcurnt4;
136 fnext3 = (
q31_t) ((fcurnt2 * (*pk)) >> 15u) + fcurnt3;
137 fnext3 = __SSAT(fnext3, 16);
138 gnext3 = (
q31_t) ((fcurnt3 * (*pk)) >> 15u) + fcurnt2;
139 gnext3 = __SSAT(gnext3, 16);
142 fnext4 = (
q31_t) ((fcurnt3 * (*pk)) >> 15u) + fcurnt4;
143 fnext4 = __SSAT(fnext4, 16);
144 gnext4 = (
q31_t) ((fcurnt4 * (*pk++)) >> 15u) + fcurnt3;
145 gnext4 = __SSAT(gnext4, 16);
155 stageCnt = (numStages - 1u) >> 2;
168 *px++ = (
q15_t) gnext4;
173 fnext1 = (
q31_t) ((gcurnt1 * (*pk)) >> 15u) + fcurnt1;
174 fnext1 = __SSAT(fnext1, 16);
179 fnext2 = (
q31_t) ((gnext1 * (*pk)) >> 15u) + fcurnt2;
180 fnext2 = __SSAT(fnext2, 16);
182 fnext3 = (
q31_t) ((gnext2 * (*pk)) >> 15u) + fcurnt3;
183 fnext3 = __SSAT(fnext3, 16);
186 fnext4 = (
q31_t) ((gnext3 * (*pk)) >> 15u) + fcurnt4;
187 fnext4 = __SSAT(fnext4, 16);
191 gnext4 = (
q31_t) ((fcurnt4 * (*pk)) >> 15u) + gnext3;
192 gnext4 = __SSAT(gnext4, 16);
193 gnext3 = (
q31_t) ((fcurnt3 * (*pk)) >> 15u) + gnext2;
194 gnext3 = __SSAT(gnext3, 16);
196 gnext2 = (
q31_t) ((fcurnt2 * (*pk)) >> 15u) + gnext1;
197 gnext2 = __SSAT(gnext2, 16);
199 gnext1 = (
q31_t) ((fcurnt1 * (*pk++)) >> 15u) + gcurnt1;
200 gnext1 = __SSAT(gnext1, 16);
207 *px++ = (
q15_t) gnext4;
212 fcurnt1 = (
q31_t) ((gcurnt1 * (*pk)) >> 15u) + fnext1;
213 fcurnt1 = __SSAT(fcurnt1, 16);
216 fcurnt2 = (
q31_t) ((gnext1 * (*pk)) >> 15u) + fnext2;
217 fcurnt2 = __SSAT(fcurnt2, 16);
220 fcurnt3 = (
q31_t) ((gnext2 * (*pk)) >> 15u) + fnext3;
221 fcurnt3 = __SSAT(fcurnt3, 16);
224 fcurnt4 = (
q31_t) ((gnext3 * (*pk)) >> 15u) + fnext4;
225 fcurnt4 = __SSAT(fcurnt4, 16);
229 gnext4 = (
q31_t) ((fnext4 * (*pk)) >> 15u) + gnext3;
230 gnext4 = __SSAT(gnext4, 16);
232 gnext3 = (
q31_t) ((fnext3 * (*pk)) >> 15u) + gnext2;
233 gnext3 = __SSAT(gnext3, 16);
235 gnext2 = (
q31_t) ((fnext2 * (*pk)) >> 15u) + gnext1;
236 gnext2 = __SSAT(gnext2, 16);
238 gnext1 = (
q31_t) ((fnext1 * (*pk++)) >> 15u) + gcurnt1;
239 gnext1 = __SSAT(gnext1, 16);
245 *px++ = (
q15_t) gnext4;
250 fnext1 = (
q31_t) ((gcurnt1 * (*pk)) >> 15u) + fcurnt1;
251 fnext1 = __SSAT(fnext1, 16);
255 fnext2 = (
q31_t) ((gnext1 * (*pk)) >> 15u) + fcurnt2;
256 fnext2 = __SSAT(fnext2, 16);
259 fnext3 = (
q31_t) ((gnext2 * (*pk)) >> 15u) + fcurnt3;
260 fnext3 = __SSAT(fnext3, 16);
263 fnext4 = (
q31_t) ((gnext3 * (*pk)) >> 15u) + fcurnt4;
264 fnext4 = __SSAT(fnext4, 16);
268 gnext4 = (
q31_t) ((fcurnt4 * (*pk)) >> 15u) + gnext3;
269 gnext4 = __SSAT(gnext4, 16);
271 gnext3 = (
q31_t) ((fcurnt3 * (*pk)) >> 15u) + gnext2;
272 gnext3 = __SSAT(gnext3, 16);
274 gnext2 = (
q31_t) ((fcurnt2 * (*pk)) >> 15u) + gnext1;
275 gnext2 = __SSAT(gnext2, 16);
276 gnext1 = (
q31_t) ((fcurnt1 * (*pk++)) >> 15u) + gcurnt1;
277 gnext1 = __SSAT(gnext1, 16);
284 *px++ = (
q15_t) gnext4;
289 fcurnt1 = (
q31_t) ((gcurnt1 * (*pk)) >> 15u) + fnext1;
290 fcurnt1 = __SSAT(fcurnt1, 16);
293 fcurnt2 = (
q31_t) ((gnext1 * (*pk)) >> 15u) + fnext2;
294 fcurnt2 = __SSAT(fcurnt2, 16);
297 fcurnt3 = (
q31_t) ((gnext2 * (*pk)) >> 15u) + fnext3;
298 fcurnt3 = __SSAT(fcurnt3, 16);
301 fcurnt4 = (
q31_t) ((gnext3 * (*pk)) >> 15u) + fnext4;
302 fcurnt4 = __SSAT(fcurnt4, 16);
306 gnext4 = (
q31_t) ((fnext4 * (*pk)) >> 15u) + gnext3;
307 gnext4 = __SSAT(gnext4, 16);
308 gnext3 = (
q31_t) ((fnext3 * (*pk)) >> 15u) + gnext2;
309 gnext3 = __SSAT(gnext3, 16);
310 gnext2 = (
q31_t) ((fnext2 * (*pk)) >> 15u) + gnext1;
311 gnext2 = __SSAT(gnext2, 16);
312 gnext1 = (
q31_t) ((fnext1 * (*pk++)) >> 15u) + gcurnt1;
313 gnext1 = __SSAT(gnext1, 16);
319 stageCnt = (numStages - 1u) % 0x4u;
326 *px++ = (
q15_t) gnext4;
329 fnext1 = (
q31_t) ((gcurnt1 * (*pk)) >> 15u) + fcurnt1;
330 fnext1 = __SSAT(fnext1, 16);
331 fnext2 = (
q31_t) ((gnext1 * (*pk)) >> 15u) + fcurnt2;
332 fnext2 = __SSAT(fnext2, 16);
334 fnext3 = (
q31_t) ((gnext2 * (*pk)) >> 15u) + fcurnt3;
335 fnext3 = __SSAT(fnext3, 16);
337 fnext4 = (
q31_t) ((gnext3 * (*pk)) >> 15u) + fcurnt4;
338 fnext4 = __SSAT(fnext4, 16);
341 gnext4 = (
q31_t) ((fcurnt4 * (*pk)) >> 15u) + gnext3;
342 gnext4 = __SSAT(gnext4, 16);
343 gnext3 = (
q31_t) ((fcurnt3 * (*pk)) >> 15u) + gnext2;
344 gnext3 = __SSAT(gnext3, 16);
345 gnext2 = (
q31_t) ((fcurnt2 * (*pk)) >> 15u) + gnext1;
346 gnext2 = __SSAT(gnext2, 16);
347 gnext1 = (
q31_t) ((fcurnt1 * (*pk++)) >> 15u) + gcurnt1;
348 gnext1 = __SSAT(gnext1, 16);
363 #ifndef ARM_MATH_BIG_ENDIAN 365 *
__SIMD32(pDst)++ = __PKHBT(fcurnt1, fcurnt2, 16);
366 *
__SIMD32(pDst)++ = __PKHBT(fcurnt3, fcurnt4, 16);
370 *
__SIMD32(pDst)++ = __PKHBT(fcurnt2, fcurnt1, 16);
371 *
__SIMD32(pDst)++ = __PKHBT(fcurnt4, fcurnt3, 16);
380 blkCnt = blockSize % 0x4u;
398 fnext1 = (((
q31_t) gcurnt1 * (*pk)) >> 15u) + fcurnt1;
399 fnext1 = __SSAT(fnext1, 16);
403 gnext1 = (((
q31_t) fcurnt1 * (*pk++)) >> 15u) + gcurnt1;
404 gnext1 = __SSAT(gnext1, 16);
407 *px++ = (
q15_t) fcurnt1;
413 stageCnt = (numStages - 1u);
422 *px++ = (
q15_t) gnext1;
426 fnext1 = (((
q31_t) gcurnt1 * (*pk)) >> 15u) + fcurnt1;
427 fnext1 = __SSAT(fnext1, 16);
430 gnext1 = (((
q31_t) fcurnt1 * (*pk++)) >> 15u) + gcurnt1;
431 gnext1 = __SSAT(gnext1, 16);
443 *pDst++ = __SSAT(fcurnt1, 16);
454 q31_t fcurnt, fnext, gcurnt, gnext;
456 uint32_t blkCnt, stageCnt;
478 fnext = ((gcurnt * (*pk)) >> 15u) + fcurnt;
479 fnext = __SSAT(fnext, 16);
483 gnext = ((fcurnt * (*pk++)) >> 15u) + gcurnt;
484 gnext = __SSAT(gnext, 16);
487 *px++ = (
q15_t) fcurnt;
493 stageCnt = (numStages - 1u);
502 *px++ = (
q15_t) gnext;
506 fnext = ((gcurnt * (*pk)) >> 15u) + fcurnt;
507 fnext = __SSAT(fnext, 16);
510 gnext = ((fcurnt * (*pk++)) >> 15u) + gcurnt;
511 gnext = __SSAT(gnext, 16);
523 *pDst++ = __SSAT(fcurnt, 16);
Instance structure for the Q15 FIR lattice filter.
int16_t q15_t
16-bit fractional data type in 1.15 format.
void arm_fir_lattice_q15(const arm_fir_lattice_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize)
Processing function for the Q15 FIR lattice filter.
#define __SIMD32(addr)
definition to read/write two 16 bit values.
int32_t q31_t
32-bit fractional data type in 1.31 format.