00001
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #include "preprocessor.h"
00048
00049 #if !defined(FORCE_ALL_GENERICS) && \
00050 !defined(FORCE_GENERIC_FILT16_IIR) && \
00051 defined(TARGET_SPECIFIC_FILT16_IIR)
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 #define DSP16_COMPUT_TAP_4x4_0(r_vect1, r_h, r_i, r_sum1, r_sum2, r_sum3, r_sum4) \
00066 "ld.d r4, --"ASTRINGZ(r_h)"\n\t" \
00067 "ld.d r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00068 \
00069 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:t\n\t" \
00070 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:b\n\t" \
00071 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:t\n\t" \
00072 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t" \
00073 \
00074 "sub "ASTRINGZ(r_i)", -4\n\t" \
00075 \
00076 "ld.d r10, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00077 \
00078 "machh.w "ASTRINGZ(r_sum2)", r4:b, r7:b\n\t" \
00079 "machh.w "ASTRINGZ(r_sum2)", r4:t, r6:t\n\t" \
00080 "machh.w "ASTRINGZ(r_sum2)", r5:b, r6:b\n\t" \
00081 "machh.w "ASTRINGZ(r_sum2)", r5:t, r11:t\n\t" \
00082 \
00083 "machh.w "ASTRINGZ(r_sum3)", r4:b, r6:t\n\t" \
00084 "machh.w "ASTRINGZ(r_sum3)", r4:t, r6:b\n\t" \
00085 "machh.w "ASTRINGZ(r_sum3)", r5:b, r11:t\n\t" \
00086 "machh.w "ASTRINGZ(r_sum3)", r5:t, r11:b\n\t" \
00087 \
00088 "machh.w "ASTRINGZ(r_sum4)", r4:b, r6:b\n\t" \
00089 "machh.w "ASTRINGZ(r_sum4)", r4:t, r11:t\n\t" \
00090 "machh.w "ASTRINGZ(r_sum4)", r5:b, r11:b\n\t" \
00091 "machh.w "ASTRINGZ(r_sum4)", r5:t, r10:t\n\t"
00092
00093
00094 #define DSP16_COMPUT_TAP_4x4_1(r_vect1, r_h, r_i, r_sum1, r_sum2, r_sum3, r_sum4) \
00095 "ld.d r4, --"ASTRINGZ(r_h)"\n\t" \
00096 "ldins.h r5:t, "ASTRINGZ(r_h)"[8]\n\t" \
00097 "ld.d r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00098 \
00099 "machh.w "ASTRINGZ(r_sum1)", r5:t, r7:t\n\t" \
00100 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:b\n\t" \
00101 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:t\n\t" \
00102 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:b\n\t" \
00103 \
00104 "sub "ASTRINGZ(r_i)", -4\n\t" \
00105 \
00106 "ld.d r10, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00107 \
00108 "machh.w "ASTRINGZ(r_sum2)", r5:t, r7:b\n\t" \
00109 "machh.w "ASTRINGZ(r_sum2)", r4:b, r6:t\n\t" \
00110 "machh.w "ASTRINGZ(r_sum2)", r4:t, r6:b\n\t" \
00111 "machh.w "ASTRINGZ(r_sum2)", r5:b, r11:t\n\t" \
00112 \
00113 "machh.w "ASTRINGZ(r_sum3)", r5:t, r6:t\n\t" \
00114 "machh.w "ASTRINGZ(r_sum3)", r4:b, r6:b\n\t" \
00115 "machh.w "ASTRINGZ(r_sum3)", r4:t, r11:t\n\t" \
00116 "machh.w "ASTRINGZ(r_sum3)", r5:b, r11:b\n\t" \
00117 \
00118 "machh.w "ASTRINGZ(r_sum4)", r5:t, r6:b\n\t" \
00119 "machh.w "ASTRINGZ(r_sum4)", r4:b, r11:t\n\t" \
00120 "machh.w "ASTRINGZ(r_sum4)", r4:t, r11:b\n\t" \
00121 "machh.w "ASTRINGZ(r_sum4)", r5:b, r10:t\n\t"
00122
00123
00124 #define DSP16_COMPUT_TAP_4x4_2(r_vect1, r_h, r_i, r_sum1, r_sum2, r_sum3, r_sum4) \
00125 "ld.d r4, --"ASTRINGZ(r_h)"\n\t" \
00126 "ld.d r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00127 \
00128 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:t\n\t" \
00129 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:b\n\t" \
00130 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:t\n\t" \
00131 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t" \
00132 \
00133 "sub "ASTRINGZ(r_i)", -4\n\t" \
00134 \
00135 "ld.d r10, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00136 \
00137 "machh.w "ASTRINGZ(r_sum2)", r4:b, r7:b\n\t" \
00138 "machh.w "ASTRINGZ(r_sum2)", r4:t, r6:t\n\t" \
00139 "machh.w "ASTRINGZ(r_sum2)", r5:b, r6:b\n\t" \
00140 "machh.w "ASTRINGZ(r_sum2)", r5:t, r11:t\n\t" \
00141 \
00142 "machh.w "ASTRINGZ(r_sum3)", r4:b, r6:t\n\t" \
00143 "machh.w "ASTRINGZ(r_sum3)", r4:t, r6:b\n\t" \
00144 "machh.w "ASTRINGZ(r_sum3)", r5:b, r11:t\n\t" \
00145 "machh.w "ASTRINGZ(r_sum3)", r5:t, r11:b\n\t" \
00146 \
00147 "machh.w "ASTRINGZ(r_sum4)", r4:b, r6:b\n\t" \
00148 "machh.w "ASTRINGZ(r_sum4)", r4:t, r11:t\n\t" \
00149 "machh.w "ASTRINGZ(r_sum4)", r5:b, r11:b\n\t" \
00150 "machh.w "ASTRINGZ(r_sum4)", r5:t, r10:t\n\t"
00151
00152
00153 #define DSP16_COMPUT_TAP_4x4_3(r_vect1, r_h, r_i, r_sum1, r_sum2, r_sum3, r_sum4) \
00154 "ld.d r4, --"ASTRINGZ(r_h)"\n\t" \
00155 "ldins.h r5:t, "ASTRINGZ(r_h)"[8]\n\t" \
00156 "ld.d r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00157 \
00158 "machh.w "ASTRINGZ(r_sum1)", r5:t, r7:t\n\t" \
00159 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:b\n\t" \
00160 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:t\n\t" \
00161 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:b\n\t" \
00162 \
00163 "sub "ASTRINGZ(r_i)", -4\n\t" \
00164 \
00165 "ld.d r10, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00166 \
00167 "machh.w "ASTRINGZ(r_sum2)", r5:t, r7:b\n\t" \
00168 "machh.w "ASTRINGZ(r_sum2)", r4:b, r6:t\n\t" \
00169 "machh.w "ASTRINGZ(r_sum2)", r4:t, r6:b\n\t" \
00170 "machh.w "ASTRINGZ(r_sum2)", r5:b, r11:t\n\t" \
00171 \
00172 "machh.w "ASTRINGZ(r_sum3)", r5:t, r6:t\n\t" \
00173 "machh.w "ASTRINGZ(r_sum3)", r4:b, r6:b\n\t" \
00174 "machh.w "ASTRINGZ(r_sum3)", r4:t, r11:t\n\t" \
00175 "machh.w "ASTRINGZ(r_sum3)", r5:b, r11:b\n\t" \
00176 \
00177 "machh.w "ASTRINGZ(r_sum4)", r5:t, r6:b\n\t" \
00178 "machh.w "ASTRINGZ(r_sum4)", r4:b, r11:t\n\t" \
00179 "machh.w "ASTRINGZ(r_sum4)", r4:t, r11:b\n\t" \
00180 "machh.w "ASTRINGZ(r_sum4)", r5:b, r10:t\n\t"
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197 #define DSP16_COMPUT_TAP_ENDING_0(r_vect1, r_h, r_i, r_sum1, r_sum2, r_sum3, r_sum4)
00198
00199 #define DSP16_COMPUT_TAP_ENDING_1(r_vect1, r_h, r_i, r_sum1, r_sum2, r_sum3, r_sum4) \
00200 \
00201 "ld.d r10, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00202 \
00203 "ld.sh r4, "ASTRINGZ(r_h)"[0x0]\n\t" \
00204 \
00205 "machh.w "ASTRINGZ(r_sum1)", r4:b, r11:t\n\t" \
00206 "machh.w "ASTRINGZ(r_sum2)", r4:b, r11:b\n\t" \
00207 "machh.w "ASTRINGZ(r_sum3)", r4:b, r10:t\n\t" \
00208 "machh.w "ASTRINGZ(r_sum4)", r4:b, r10:b\n\t"
00209
00210
00211 #define DSP16_COMPUT_TAP_ENDING_2(r_vect1, r_h, r_i, r_sum1, r_sum2, r_sum3, r_sum4) \
00212 \
00213 "ld.d r10, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00214 \
00215 "ld.w r4, --"ASTRINGZ(r_h)"\n\t" \
00216 \
00217 "sub "ASTRINGZ(r_i)", -4\n\t" \
00218 \
00219 "ld.uh r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00220 \
00221 "machh.w "ASTRINGZ(r_sum1)", r4:b, r11:t\n\t" \
00222 "machh.w "ASTRINGZ(r_sum1)", r4:t, r11:b\n\t" \
00223 \
00224 "machh.w "ASTRINGZ(r_sum2)", r4:b, r11:b\n\t" \
00225 "machh.w "ASTRINGZ(r_sum2)", r4:t, r10:t\n\t" \
00226 \
00227 "machh.w "ASTRINGZ(r_sum3)", r4:b, r10:t\n\t" \
00228 "machh.w "ASTRINGZ(r_sum3)", r4:t, r10:b\n\t" \
00229 \
00230 "machh.w "ASTRINGZ(r_sum4)", r4:b, r10:b\n\t" \
00231 "machh.w "ASTRINGZ(r_sum4)", r4:t, r6:b\n\t"
00232
00233
00234 #define DSP16_COMPUT_TAP_ENDING_3(r_vect1, r_h, r_i, r_sum1, r_sum2, r_sum3, r_sum4) \
00235 \
00236 "ld.d r10, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00237 \
00238 "sub "ASTRINGZ(r_h)", 4\n\t" \
00239 "ld.d r4, "ASTRINGZ(r_h)"\n\t" \
00240 \
00241 "sub "ASTRINGZ(r_i)", -4\n\t" \
00242 "ld.w r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00243 \
00244 "machh.w "ASTRINGZ(r_sum1)", r4:t, r11:t\n\t" \
00245 "machh.w "ASTRINGZ(r_sum1)", r5:b, r11:b\n\t" \
00246 "machh.w "ASTRINGZ(r_sum1)", r5:t, r10:t\n\t" \
00247 \
00248 "machh.w "ASTRINGZ(r_sum2)", r4:t, r11:b\n\t" \
00249 "machh.w "ASTRINGZ(r_sum2)", r5:b, r10:t\n\t" \
00250 "machh.w "ASTRINGZ(r_sum2)", r5:t, r10:b\n\t" \
00251 \
00252 "machh.w "ASTRINGZ(r_sum3)", r4:t, r10:t\n\t" \
00253 "machh.w "ASTRINGZ(r_sum3)", r5:b, r10:b\n\t" \
00254 "machh.w "ASTRINGZ(r_sum3)", r5:t, r6:t\n\t" \
00255 \
00256 "machh.w "ASTRINGZ(r_sum4)", r4:t, r10:b\n\t" \
00257 "machh.w "ASTRINGZ(r_sum4)", r5:b, r6:t\n\t" \
00258 "machh.w "ASTRINGZ(r_sum4)", r5:t, r6:b\n\t"
00259
00260
00261
00262
00263
00264
00265
00266 #if __GNUC__
00267 # define DSP16_IIR_KERNEL_NUM_X_FCT(x_num, data) __attribute__((__naked__)) DSP16_IIR_KERNEL_NUM_X_FCT__(x_num, data)
00268 # define DSP16_IIR_KERNEL_DEN_X_FCT(x_num, data) __attribute__((__naked__)) DSP16_IIR_KERNEL_DEN_X_FCT__(x_num, data)
00269 #elif __ICCAVR32__
00270 # define DSP16_IIR_KERNEL_NUM_X_FCT(x_num, data) DSP16_IIR_KERNEL_NUM_X_FCT__(x_num, data)
00271 # define DSP16_IIR_KERNEL_DEN_X_FCT(x_num, data) DSP16_IIR_KERNEL_DEN_X_FCT__(x_num, data)
00272 #endif
00273
00274
00275
00276 #if __GNUC__
00277 # define ASM_INSTRUCT_COMPACKED(str) str
00278 # define ASM_INSTRUCT_EXTENDED(str) str
00279 #elif __ICCAVR32__
00280 # define ASM_INSTRUCT_COMPACKED(str) str":C"
00281 # define ASM_INSTRUCT_EXTENDED(str) str":E"
00282 #endif
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324 #define DSP16_IIR_KERNEL_NUM_X_FCT__(x_num, data) \
00325 static void TPASTE2(dsp16_filt_iir_kernel_num_x, x_num)(dsp16_t *vect1, dsp16_t *vect2, int vect1_size, dsp16_t *vect3, int vect3_size, int num_prediv) \
00326 { \
00327 __asm__ __volatile__ ( \
00328 "pushm r0-r7, lr\n\t" \
00329 "sub sp, 12\n\t" \
00330 \
00331 "lddsp r4, sp[48]\n\t" \
00332 "rsub r4, r4, "ASTRINGZ(DSP16_QB)" \n\t" \
00333 "stdsp sp[48], r4\n\t" \
00334 \
00335 "mov r1, r11\n\t" \
00336 "mov r11, r12\n\t" \
00337 "mov r12, r1\n\t" \
00338 \
00339 "add r9, r9, r8 << 1\n\t" \
00340 "mov lr, 0x3\n\t" \
00341 "andn r9, lr\n\t" \
00342 "stdsp sp[0x08], r9\n\t" \
00343 \
00344 "sub r8, 3\n" \
00345 \
00346 \
00347 "__dsp16_iir_num_loop_main"ASTRINGZ(x_num)":\n\t" \
00348 "stdsp sp[0x04], r11\n\t" \
00349 "stdsp sp[0x00], r10\n\t" \
00350 "lddsp r9, sp[0x08]\n\t" \
00351 \
00352 "mov r0, 0\n\t" \
00353 "mov r1, r0\n\t" \
00354 "mov r2, r0\n\t" \
00355 "mov r3, r0\n\t" \
00356 "mov lr, r0\n" \
00357 \
00358 \
00359 \
00360 "__dsp16_iir_num_loop_tap"ASTRINGZ(x_num)":\n\t" \
00361 "cp.h lr, r8\n\t" \
00362 ASM_INSTRUCT_COMPACKED("brge __dsp16_iir_num_endloop_tap"ASTRINGZ(x_num))"\n\t" \
00363 \
00364 TPASTE2(DSP16_COMPUT_TAP_4x4_, x_num)(r12, r9, lr, r3, r2, r1, r0) \
00365 \
00366 "bral __dsp16_iir_num_loop_tap"ASTRINGZ(x_num)"\n" \
00367 \
00368 "__dsp16_iir_num_endloop_tap"ASTRINGZ(x_num)":\n\t" \
00369 \
00370 TPASTE2(DSP16_COMPUT_TAP_ENDING_, x_num)(r12, r9, lr, r3, r2, r1, r0) \
00371 \
00372 "lddsp r4, sp[48]\n\t" \
00373 \
00374 "asr r3, r3, r4\n\t" \
00375 "asr r2, r2, r4\n\t" \
00376 "asr r1, r1, r4\n\t" \
00377 "asr r0, r0, r4\n\t" \
00378 \
00379 "lddsp r11, sp[0x04]\n\t" \
00380 "sthh.w r11[0x0], r3:b, r2:b\n\t" \
00381 "sthh.w r11[0x4], r1:b, r0:b\n\t" \
00382 \
00383 "sub r11, -8\n\t" \
00384 "sub r12, -8\n\t" \
00385 \
00386 "lddsp r10, sp[0x00]\n\t" \
00387 "sub r10, 4\n\t" \
00388 "brgt __dsp16_iir_num_loop_main"ASTRINGZ(x_num)"\n\t" \
00389 \
00390 "sub sp, -12\n\t" \
00391 "popm r0-r7, pc\n\t" \
00392 ); \
00393 }
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423 #define DSP16_COMPUT_TAP_DEN_8_EVEN(r_vect1, r_h, r_i, r_sum1) \
00424 "sub "ASTRINGZ(r_h)", 16\n\t" \
00425 "add r2, "ASTRINGZ(r_vect1)", "ASTRINGZ(r_i)" << 1\n\t" \
00426 \
00427 "ld.d r4, "ASTRINGZ(r_h)"[8]\n\t" \
00428 "ld.d r6, r2[0]\n\t" \
00429 \
00430 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:t\n\t" \
00431 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:b\n\t" \
00432 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:t\n\t" \
00433 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t" \
00434 \
00435 "ld.d r4, "ASTRINGZ(r_h)"[0]\n\t" \
00436 "ld.d r6, r2[8]\n\t" \
00437 \
00438 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:t\n\t" \
00439 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:b\n\t" \
00440 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:t\n\t" \
00441 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t" \
00442 \
00443 "sub "ASTRINGZ(r_i)", -8\n\t"
00444
00445
00446
00447
00448
00449 #define DSP16_COMPUT_TAP_DEN_8_ODD(r_vect1, r_h, r_i, r_sum1) \
00450 "sub "ASTRINGZ(r_h)", 18\n\t" \
00451 "add r2, "ASTRINGZ(r_vect1)", "ASTRINGZ(r_i)" << 1\n\t" \
00452 \
00453 "ld.uh r4, "ASTRINGZ(r_h)"[16]\n\t" \
00454 "ld.d r6, r2[0]\n\t" \
00455 \
00456 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:t\n\t" \
00457 "ld.d r4, "ASTRINGZ(r_h)"[8]\n\t" \
00458 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:b\n\t" \
00459 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:t\n\t" \
00460 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:b\n\t" \
00461 \
00462 "ld.d r6, r2[8]\n\t" \
00463 \
00464 "machh.w "ASTRINGZ(r_sum1)", r5:t, r7:t\n\t" \
00465 "ld.d r4, "ASTRINGZ(r_h)"[0]\n\t" \
00466 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:b\n\t" \
00467 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:t\n\t" \
00468 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:b\n\t" \
00469 \
00470 "sub "ASTRINGZ(r_i)", -8\n\t" \
00471 "sub "ASTRINGZ(r_h)", -2\n\t" \
00472
00473
00474 #define DSP16_COMPUT_TAP_DEN_8_0 DSP16_COMPUT_TAP_DEN_8_EVEN
00475 #define DSP16_COMPUT_TAP_DEN_8_1 DSP16_COMPUT_TAP_DEN_8_ODD
00476 #define DSP16_COMPUT_TAP_DEN_8_2 DSP16_COMPUT_TAP_DEN_8_EVEN
00477 #define DSP16_COMPUT_TAP_DEN_8_3 DSP16_COMPUT_TAP_DEN_8_ODD
00478 #define DSP16_COMPUT_TAP_DEN_8_4 DSP16_COMPUT_TAP_DEN_8_EVEN
00479 #define DSP16_COMPUT_TAP_DEN_8_5 DSP16_COMPUT_TAP_DEN_8_ODD
00480 #define DSP16_COMPUT_TAP_DEN_8_6 DSP16_COMPUT_TAP_DEN_8_EVEN
00481 #define DSP16_COMPUT_TAP_DEN_8_7 DSP16_COMPUT_TAP_DEN_8_ODD
00482
00483
00484
00485
00486
00487
00488
00489
00490 #define DSP16_COMPUT_TAP_BIS_DEN_8_EVEN(r_vect1, r_h, r_i, r_sum1) \
00491 "sub "ASTRINGZ(r_h)", 16\n\t" \
00492 "add r2, "ASTRINGZ(r_vect1)", "ASTRINGZ(r_i)" << 1\n\t" \
00493 \
00494 "ld.d r4, "ASTRINGZ(r_h)"[8]\n\t" \
00495 "ld.d r6, r2[0]\n\t" \
00496 \
00497 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:b\n\t" \
00498 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:t\n\t" \
00499 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:b\n\t" \
00500 "ld.d r6, r2[8]\n\t" \
00501 "machh.w "ASTRINGZ(r_sum1)", r5:t, r7:t\n\t" \
00502 \
00503 "ld.d r4, "ASTRINGZ(r_h)"[0]\n\t" \
00504 \
00505 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:b\n\t" \
00506 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:t\n\t" \
00507 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:b\n\t" \
00508 "ld.uh r6, r2[16]\n\t" \
00509 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t" \
00510 \
00511 "sub "ASTRINGZ(r_i)", -8\n\t"
00512
00513
00514
00515
00516
00517 #define DSP16_COMPUT_TAP_BIS_DEN_8_ODD(r_vect1, r_h, r_i, r_sum1) \
00518 "sub "ASTRINGZ(r_h)", 18\n\t" \
00519 "add r2, "ASTRINGZ(r_vect1)", "ASTRINGZ(r_i)" << 1\n\t" \
00520 \
00521 "ld.uh r4, "ASTRINGZ(r_h)"[16]\n\t" \
00522 "ld.d r6, r2[0]\n\t" \
00523 \
00524 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:b\n\t" \
00525 "ld.d r4, "ASTRINGZ(r_h)"[8]\n\t" \
00526 "machh.w "ASTRINGZ(r_sum1)", r4:b, r6:t\n\t" \
00527 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:b\n\t" \
00528 "ld.d r6, r2[8]\n\t" \
00529 "machh.w "ASTRINGZ(r_sum1)", r5:b, r7:t\n\t" \
00530 \
00531 \
00532 "machh.w "ASTRINGZ(r_sum1)", r5:t, r7:b\n\t" \
00533 "ld.d r4, "ASTRINGZ(r_h)"[0]\n\t" \
00534 "machh.w "ASTRINGZ(r_sum1)", r4:b, r6:t\n\t" \
00535 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:b\n\t" \
00536 "ld.uh r6, r2[16]\n\t" \
00537 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:b\n\t" \
00538 \
00539 "sub "ASTRINGZ(r_i)", -8\n\t" \
00540 "sub "ASTRINGZ(r_h)", -2\n\t"
00541
00542
00543 #define DSP16_COMPUT_TAP_BIS_DEN_8_0 DSP16_COMPUT_TAP_BIS_DEN_8_EVEN
00544 #define DSP16_COMPUT_TAP_BIS_DEN_8_1 DSP16_COMPUT_TAP_BIS_DEN_8_ODD
00545 #define DSP16_COMPUT_TAP_BIS_DEN_8_2 DSP16_COMPUT_TAP_BIS_DEN_8_EVEN
00546 #define DSP16_COMPUT_TAP_BIS_DEN_8_3 DSP16_COMPUT_TAP_BIS_DEN_8_ODD
00547 #define DSP16_COMPUT_TAP_BIS_DEN_8_4 DSP16_COMPUT_TAP_BIS_DEN_8_EVEN
00548 #define DSP16_COMPUT_TAP_BIS_DEN_8_5 DSP16_COMPUT_TAP_BIS_DEN_8_ODD
00549 #define DSP16_COMPUT_TAP_BIS_DEN_8_6 DSP16_COMPUT_TAP_BIS_DEN_8_EVEN
00550 #define DSP16_COMPUT_TAP_BIS_DEN_8_7 DSP16_COMPUT_TAP_BIS_DEN_8_ODD
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571 #define DSP16_COMPUT_TAP_DEN_ENDING_0(r_vect1, r_h, r_i, r_sum1)
00572
00573
00574
00575
00576
00577
00578
00579 #define DSP16_COMPUT_TAP_DEN_ENDING_1(r_vect1, r_h, r_i, r_sum1) \
00580 "ld.uh r4, --"ASTRINGZ(r_h)"\n\t" \
00581 "ld.uh r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00582 \
00583 "machh.w "ASTRINGZ(r_sum1)", r4:b, r6:b\n\t" \
00584
00585
00586
00587
00588
00589
00590
00591 #define DSP16_COMPUT_TAP_DEN_ENDING_2(r_vect1, r_h, r_i, r_sum1) \
00592 "ld.w r4, --"ASTRINGZ(r_h)"\n\t" \
00593 "ld.w r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00594 \
00595 "machh.w "ASTRINGZ(r_sum1)", r4:b, r6:t\n\t" \
00596 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:b\n\t"
00597
00598
00599
00600
00601
00602
00603
00604 #define DSP16_COMPUT_TAP_DEN_ENDING_3(r_vect1, r_h, r_i, r_sum1) \
00605 "sub "ASTRINGZ(r_h)", 6\n\t" \
00606 "ld.d r4, "ASTRINGZ(r_h)"[0x0]\n\t" \
00607 "ld.d r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00608 \
00609 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:t\n\t" \
00610 "machh.w "ASTRINGZ(r_sum1)", r5:b, r7:b\n\t" \
00611 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:t\n\t"
00612
00613
00614
00615
00616
00617
00618
00619 #define DSP16_COMPUT_TAP_DEN_ENDING_4(r_vect1, r_h, r_i, r_sum1) \
00620 "ld.d r4, --"ASTRINGZ(r_h)"\n\t" \
00621 "ld.d r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00622 \
00623 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:t\n\t" \
00624 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:b\n\t" \
00625 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:t\n\t" \
00626 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t"
00627
00628
00629
00630
00631
00632
00633
00634
00635 #define DSP16_COMPUT_TAP_DEN_ENDING_5(r_vect1, r_h, r_i, r_sum1) \
00636 "sub "ASTRINGZ(r_h)", 10\n\t" \
00637 "ld.d r4, "ASTRINGZ(r_h)"[0x4]\n\t" \
00638 "add r2, "ASTRINGZ(r_vect1)", "ASTRINGZ(r_i)" << 1\n\t" \
00639 "ld.d r6, r2[0x0]\n\t" \
00640 \
00641 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:t\n\t" \
00642 "machh.w "ASTRINGZ(r_sum1)", r5:b, r7:b\n\t" \
00643 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:t\n\t" \
00644 "ld.w r4, "ASTRINGZ(r_h)"[0x0]\n\t" \
00645 "machh.w "ASTRINGZ(r_sum1)", r4:b, r6:b\n\t" \
00646 \
00647 "ld.uh r6, r2[0x8]\n\t" \
00648 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:b\n\t"
00649
00650
00651
00652
00653
00654
00655
00656
00657 #define DSP16_COMPUT_TAP_DEN_ENDING_6(r_vect1, r_h, r_i, r_sum1) \
00658 "ld.d r4, --"ASTRINGZ(r_h)"\n\t" \
00659 "add r2, "ASTRINGZ(r_vect1)", "ASTRINGZ(r_i)" << 1\n\t" \
00660 "ld.d r6, r2[0x0]\n\t" \
00661 \
00662 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:t\n\t" \
00663 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:b\n\t" \
00664 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:t\n\t" \
00665 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t" \
00666 \
00667 "ld.w r4, --"ASTRINGZ(r_h)"\n\t" \
00668 "ld.w r6, r2[0x8]\n\t" \
00669 \
00670 "machh.w "ASTRINGZ(r_sum1)", r4:b, r6:t\n\t" \
00671 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:b\n\t"
00672
00673
00674
00675
00676
00677
00678
00679 #define DSP16_COMPUT_TAP_DEN_ENDING_7(r_vect1, r_h, r_i, r_sum1) \
00680 "sub "ASTRINGZ(r_h)", 14\n\t" \
00681 "ld.d r4, "ASTRINGZ(r_h)"[0x8]\n\t" \
00682 "add r2, "ASTRINGZ(r_vect1)", "ASTRINGZ(r_i)" << 1\n\t" \
00683 "ld.d r6, r2[0x0]\n\t" \
00684 \
00685 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:t\n\t" \
00686 "machh.w "ASTRINGZ(r_sum1)", r5:b, r7:b\n\t" \
00687 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:t\n\t" \
00688 "ld.d r4, "ASTRINGZ(r_h)"[0x0]\n\t" \
00689 "machh.w "ASTRINGZ(r_sum1)", r4:b, r6:b\n\t" \
00690 \
00691 "ld.d r6, r2[0x8]\n\t" \
00692 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:t\n\t" \
00693 "machh.w "ASTRINGZ(r_sum1)", r5:b, r7:b\n\t" \
00694 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:t\n\t"
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718 #define DSP16_COMPUT_TAP_BIS_DEN_ENDING_0(r_vect1, r_h, r_i, r_sum1)
00719
00720
00721
00722
00723
00724
00725 #define DSP16_COMPUT_TAP_BIS_DEN_ENDING_1(r_vect1, r_h, r_i, r_sum1) \
00726 "ld.uh r4, --"ASTRINGZ(r_h)"\n\t" \
00727 "ld.w r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00728 \
00729 "machh.w "ASTRINGZ(r_sum1)", r4:b, r6:b\n\t" \
00730
00731
00732
00733
00734
00735
00736 #define DSP16_COMPUT_TAP_BIS_DEN_ENDING_2(r_vect1, r_h, r_i, r_sum1) \
00737 "ld.w r4, --"ASTRINGZ(r_h)"\n\t" \
00738 "ld.d r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00739 \
00740 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:b\n\t" \
00741 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:t\n\t"
00742
00743
00744
00745
00746
00747
00748 #define DSP16_COMPUT_TAP_BIS_DEN_ENDING_3(r_vect1, r_h, r_i, r_sum1) \
00749 "sub "ASTRINGZ(r_h)", 6\n\t" \
00750 "ld.d r4, "ASTRINGZ(r_h)"[0x0]\n\t" \
00751 "ld.d r6, "ASTRINGZ(r_vect1)"["ASTRINGZ(r_i)" << 1]\n\t" \
00752 \
00753 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:b\n\t" \
00754 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:t\n\t" \
00755 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t"
00756
00757
00758
00759
00760
00761
00762
00763 #define DSP16_COMPUT_TAP_BIS_DEN_ENDING_4(r_vect1, r_h, r_i, r_sum1) \
00764 "ld.d r4, --"ASTRINGZ(r_h)"\n\t" \
00765 "add r2, "ASTRINGZ(r_vect1)", "ASTRINGZ(r_i)" << 1\n\t" \
00766 "ld.d r6, r2[0]\n\t" \
00767 \
00768 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:b\n\t" \
00769 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:t\n\t" \
00770 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:b\n\t" \
00771 \
00772 "ld.uh r6, r2[8]\n\t" \
00773 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t"
00774
00775
00776
00777
00778
00779
00780
00781 #define DSP16_COMPUT_TAP_BIS_DEN_ENDING_5(r_vect1, r_h, r_i, r_sum1) \
00782 "sub "ASTRINGZ(r_h)", 10\n\t" \
00783 "ld.d r4, "ASTRINGZ(r_h)"[0x4]\n\t" \
00784 "add r2, "ASTRINGZ(r_vect1)", "ASTRINGZ(r_i)" << 1\n\t" \
00785 "ld.d r6, r2[0x0]\n\t" \
00786 \
00787 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:b\n\t" \
00788 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:t\n\t" \
00789 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t" \
00790 \
00791 "ld.w r4, "ASTRINGZ(r_h)"[0x0]\n\t" \
00792 "ld.w r6, r2[0x8]\n\t" \
00793 "machh.w "ASTRINGZ(r_sum1)", r4:b, r6:t\n\t" \
00794 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:b\n\t"
00795
00796
00797
00798
00799
00800
00801
00802 #define DSP16_COMPUT_TAP_BIS_DEN_ENDING_6(r_vect1, r_h, r_i, r_sum1) \
00803 "ld.d r4, --"ASTRINGZ(r_h)"\n\t" \
00804 "add r2, "ASTRINGZ(r_vect1)", "ASTRINGZ(r_i)" << 1\n\t" \
00805 "ld.d r6, r2[0]\n\t" \
00806 \
00807 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:b\n\t" \
00808 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:t\n\t" \
00809 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:b\n\t" \
00810 \
00811 "ld.d r6, r2[8]\n\t" \
00812 "machh.w "ASTRINGZ(r_sum1)", r5:t, r7:t\n\t" \
00813 \
00814 "ld.w r4, --"ASTRINGZ(r_h)"\n\t" \
00815 \
00816 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:b\n\t" \
00817 "machh.w "ASTRINGZ(r_sum1)", r4:t, r6:t\n\t"
00818
00819
00820
00821
00822
00823
00824 #define DSP16_COMPUT_TAP_BIS_DEN_ENDING_7(r_vect1, r_h, r_i, r_sum1) \
00825 "sub "ASTRINGZ(r_h)", 14\n\t" \
00826 "ld.d r4, "ASTRINGZ(r_h)"[0x8]\n\t" \
00827 "add r2, "ASTRINGZ(r_vect1)", "ASTRINGZ(r_i)" << 1\n\t" \
00828 "ld.d r6, r2[0x0]\n\t" \
00829 \
00830 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:b\n\t" \
00831 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:t\n\t" \
00832 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t" \
00833 \
00834 "ld.d r4, "ASTRINGZ(r_h)"[0x0]\n\t" \
00835 "ld.d r6, r2[0x8]\n\t" \
00836 "machh.w "ASTRINGZ(r_sum1)", r4:b, r7:t\n\t" \
00837 "machh.w "ASTRINGZ(r_sum1)", r4:t, r7:b\n\t" \
00838 "machh.w "ASTRINGZ(r_sum1)", r5:b, r6:t\n\t" \
00839 "machh.w "ASTRINGZ(r_sum1)", r5:t, r6:b\n\t"
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857
00858
00859
00860
00861
00862
00863
00864
00865
00866 #define DSP16_IIR_KERNEL_DEN_X_FCT__(x_num, data) \
00867 static void TPASTE2(dsp16_filt_iir_kernel_den_x, x_num)(dsp16_t *vect1, dsp16_t *vect2, int vect1_size, dsp16_t *vect3, int vect3_size, int prediv) \
00868 { \
00869 __asm__ __volatile__ ( \
00870 "pushm r0-r7, lr\n\t" \
00871 "sub sp, 12\n\t" \
00872 \
00873 \
00874 "mov r1, r11\n\t" \
00875 "mov r11, r12\n\t" \
00876 "mov r12, r1\n\t" \
00877 \
00878 "lddsp r1, sp[48]\n\t" \
00879 "rsub r1, r1, "ASTRINGZ(DSP16_QB)"\n\t" \
00880 \
00881 "add r9, r9, r8 << 1\n\t" \
00882 "stdsp sp[0x08], r9\n\t" \
00883 \
00884 "sub r8, 7\n" \
00885 \
00886 "__dsp16_iir_den_loop_main"ASTRINGZ(x_num)":\n\t" \
00887 "stdsp sp[0x04], r11\n\t" \
00888 "stdsp sp[0x00], r10\n\t" \
00889 "lddsp r9, sp[0x08]\n\t" \
00890 \
00891 "mov r0, 0\n\t" \
00892 "mov lr, r0\n" \
00893 \
00894 \
00895 "__dsp16_iir_den_loop_tap"ASTRINGZ(x_num)":\n\t" \
00896 "cp.h lr, r8\n\t" \
00897 ASM_INSTRUCT_COMPACKED("brge __dsp16_iir_den_endloop_tap"ASTRINGZ(x_num))"\n\t" \
00898 \
00899 TPASTE2(DSP16_COMPUT_TAP_DEN_8_, x_num)(r12, r9, lr, r0) \
00900 \
00901 "bral __dsp16_iir_den_loop_tap"ASTRINGZ(x_num)"\n" \
00902 "__dsp16_iir_den_endloop_tap"ASTRINGZ(x_num)":\n\t" \
00903 \
00904 TPASTE2(DSP16_COMPUT_TAP_DEN_ENDING_, x_num)(r12, r9, lr, r0) \
00905 \
00906 "asr r0, r0, r1\n\t" \
00907 \
00908 "lddsp r11, sp[0x04]\n\t" \
00909 "ld.sh r2, r11[0x0]\n\t" \
00910 "sub r2, r0\n\t" \
00911 "st.h r11++, r2\n\t" \
00912 \
00913 \
00914 \
00915 \
00916 \
00917 \
00918 "stdsp sp[0x04], r11\n\t" \
00919 "lddsp r9, sp[0x08]\n\t" \
00920 \
00921 "mov r0, 0\n\t" \
00922 "mov lr, r0\n" \
00923 \
00924 \
00925 "__dsp16_iir_den_loop_tap_bis"ASTRINGZ(x_num)":\n\t" \
00926 "cp.h lr, r8\n\t" \
00927 ASM_INSTRUCT_COMPACKED("brge __dsp16_iir_den_endloop_tap_bis"ASTRINGZ(x_num))"\n\t" \
00928 \
00929 TPASTE2(DSP16_COMPUT_TAP_BIS_DEN_8_, x_num)(r12, r9, lr, r0) \
00930 \
00931 "bral __dsp16_iir_den_loop_tap_bis"ASTRINGZ(x_num)"\n" \
00932 "__dsp16_iir_den_endloop_tap_bis"ASTRINGZ(x_num)":\n\t" \
00933 \
00934 TPASTE2(DSP16_COMPUT_TAP_BIS_DEN_ENDING_, x_num)(r12, r9, lr, r0) \
00935 \
00936 "asr r0, r0, r1\n\t" \
00937 \
00938 "lddsp r11, sp[0x04]\n\t" \
00939 "ld.sh r2, r11[0x0]\n\t" \
00940 "sub r2, r0\n\t" \
00941 "st.h r11++, r2\n\t" \
00942 \
00943 \
00944 "sub r12, -4\n\t" \
00945 \
00946 \
00947 \
00948 \
00949 "lddsp r10, sp[0x00]\n\t" \
00950 "sub r10, 2\n\t" \
00951 "brgt __dsp16_iir_den_loop_main"ASTRINGZ(x_num)"\n\t" \
00952 \
00953 "sub sp, -12\n\t" \
00954 "popm r0-r7, pc\n\t" \
00955 ); \
00956 }
00957
00958
00959
00960
00961 DSP16_IIR_KERNEL_NUM_X_FCT(0, "")
00962 DSP16_IIR_KERNEL_NUM_X_FCT(1, "")
00963 DSP16_IIR_KERNEL_NUM_X_FCT(2, "")
00964 DSP16_IIR_KERNEL_NUM_X_FCT(3, "")
00965
00966 #if !(DSP_OPTIMIZATION & DSP_OPTI_SIZE)
00967
00968 DSP16_IIR_KERNEL_DEN_X_FCT(0, "")
00969 DSP16_IIR_KERNEL_DEN_X_FCT(1, "")
00970 DSP16_IIR_KERNEL_DEN_X_FCT(2, "")
00971 DSP16_IIR_KERNEL_DEN_X_FCT(3, "")
00972 DSP16_IIR_KERNEL_DEN_X_FCT(4, "")
00973 DSP16_IIR_KERNEL_DEN_X_FCT(5, "")
00974 DSP16_IIR_KERNEL_DEN_X_FCT(6, "")
00975 DSP16_IIR_KERNEL_DEN_X_FCT(7, "")
00976
00977 #endif
00978
00979
00980
00981 void dsp16_filt_iir(dsp16_t *y, dsp16_t *x, int size, dsp16_t *num, int num_size, dsp16_t *den, int den_size, int num_prediv, int den_prediv)
00982 {
00983 typedef void (*iir_kernel_opti_t)(dsp16_t *, dsp16_t *, int, dsp16_t *, int, int);
00984 static const iir_kernel_opti_t iir_kernel_opti_num[4] = {
00985 dsp16_filt_iir_kernel_num_x0,
00986 dsp16_filt_iir_kernel_num_x1,
00987 dsp16_filt_iir_kernel_num_x2,
00988 dsp16_filt_iir_kernel_num_x3
00989 };
00990 #if !(DSP_OPTIMIZATION & DSP_OPTI_SIZE)
00991 typedef void (*iir_kernel_opti_den_t)(dsp16_t *, dsp16_t *, int, dsp16_t *, int, int);
00992 static const iir_kernel_opti_den_t iir_kernel_opti_den[8] = {
00993 dsp16_filt_iir_kernel_den_x0,
00994 dsp16_filt_iir_kernel_den_x1,
00995 dsp16_filt_iir_kernel_den_x2,
00996 dsp16_filt_iir_kernel_den_x3,
00997 dsp16_filt_iir_kernel_den_x4,
00998 dsp16_filt_iir_kernel_den_x5,
00999 dsp16_filt_iir_kernel_den_x6,
01000 dsp16_filt_iir_kernel_den_x7
01001 };
01002 #else
01003 dsp16_t *py;
01004 #endif
01005 int n, m;
01006 S32 sum;
01007
01008
01009
01010 if (((int) y)&0x3)
01011 {
01012 iir_kernel_opti_num[num_size&0x3](&y[1], &x[-num_size+1], size-1, num, num_size, num_prediv);
01013
01014 for(n=0; n<size-1; n++)
01015 y[n] = y[n + 1];
01016
01017 sum = 0;
01018 for(m=0; m<num_size; m++)
01019 sum += (S32) num[m] * (S32) x[n-m];
01020 y[n] = (sum >> (DSP16_QB - num_prediv));
01021 }
01022 else
01023 {
01024
01025 iir_kernel_opti_num[num_size&0x3](y, &x[-num_size+1], size, num, num_size, num_prediv);
01026 }
01027
01028 #if (DSP_OPTIMIZATION & DSP_OPTI_SIZE)
01029
01030 for(n=0; n<size; n++)
01031 {
01032 py = &y[n-1];
01033 sum = 0;
01034 for(m=0; m<den_size; m++)
01035 sum += (S32) den[m] * (S32) py[-m];
01036 y[n] -= (sum >> (DSP16_QB - den_prediv));
01037 }
01038 #else
01039
01040 iir_kernel_opti_den[den_size&0x7](y, &y[-den_size], size, den, den_size, den_prediv);
01041 #endif
01042 }
01043
01044 #endif