ld_cmp_set .macro n ; from emask2.asm LDW *--A6,A7 || LDW *++B6,B7 || CMPGT A7, A8, A1 || CMPGT B7, A8, B1 || [A1] SET A4, n, n, A4 || [B1] SET B5, 31-n, 31-n, B5 .endm .bss spill_area, 64, 4 .text _process_event: MVKL spill_area, A0 || MVKL spill_area, B0 MVKH spill_area, A0 || MVKH spill_area, B0 STW B15, *B0[0] || STW A15, *A0[1] || MVKL _cc_table, A1 || MV A4, d ; loop26 (B15) STW B14, *B0[2] || STW A14, *A0[3] || MVKH _cc_table, A1 STW B13, *B0[4] || STW A13, *A0[5] || MVKL _div_table, t ; loop26 (B13) || SHRU A1, 7, A1 STW B12, *B0[6] || STW A12, *A0[7] || MVKH _div_table, t || MV A1, g ; loop26 (B12) STW B11, *B0[8] || STW A11, *A0[9] STW B10, *B0[10] || STW A10, *A0[11] || MV B4, dd ; loop26 (B14) STW B3, *B0[12] || STW A6, *A0[13] ; floating-point threshold ; d = data_in points to the first gains word ; dd = data_out points one word before the energy block .include "loop26.a" ; now dd points 31 words inside the E output block ;; Mask generation follows (code from emask2) MVKL spill_area, A0 || MVKL spill_area, B0 MVKH spill_area, A0 || MVKH spill_area, B0 LDW *B0[12], B3 ; return address restore (C epilog) || LDW *A0[13], A8 ; floating-point threshold || ADD 0, dd, A6 || ADD 4, dd, B6 || ZERO A4 || ZERO B5 LDW *A6,A7 ; channel 31 || LDW *B6,B7 ; channel 32 LDW *--A6,A7 || LDW *++B6,B7 LDW *--A6,A7 || LDW *++B6,B7 LDW *--A6,A7 || LDW *++B6,B7 LDW *--A6,A7 || LDW *++B6,B7 LDW *--A6,A7 || LDW *++B6,B7 || CMPGT A7, A8, A1 || CMPGT B7, A8, B1 ld_cmp_set 0 ld_cmp_set 1 ld_cmp_set 2 ld_cmp_set 3 ld_cmp_set 4 ld_cmp_set 5 ld_cmp_set 6 ld_cmp_set 7 ld_cmp_set 8 ld_cmp_set 9 ld_cmp_set 10 ld_cmp_set 11 ld_cmp_set 12 ld_cmp_set 13 ld_cmp_set 14 ld_cmp_set 15 ld_cmp_set 16 ld_cmp_set 17 ld_cmp_set 18 ld_cmp_set 19 ld_cmp_set 20 ld_cmp_set 21 ld_cmp_set 22 ld_cmp_set 23 ld_cmp_set 24 ld_cmp_set 25 CMPGT A7, A8, A1 || CMPGT B7, A8, B1 || [A1] SET A4, 31-5, 31-5, A4 || [B1] SET B5, 5, 5, B5 || LDW *B0[0], B15 ; C epilog || LDW *A0[1], A15 CMPGT A7, A8, A1 || CMPGT B7, A8, B1 || [A1] SET A4, 31-4, 31-4, A4 || [B1] SET B5, 4, 4, B5 || LDW *B0[2], B14 ; C epilog || LDW *A0[3], A14 CMPGT A7, A8, A1 || CMPGT B7, A8, B1 || [A1] SET A4, 31-3, 31-3, A4 || [B1] SET B5, 3, 3, B5 || LDW *B0[4], B13 ; C epilog || LDW *A0[5], A13 CMPGT A7, A8, A1 || CMPGT B7, A8, B1 || [A1] SET A4, 31-2, 31-2, A4 || [B1] SET B5, 2, 2, B5 || LDW *B0[6], B12 ; C epilog || LDW *A0[7], A12 B B3 ; return to caller || LDW *B0[8], B11 ; C epilog || LDW *A0[9], A11 CMPGT A7, A8, A1 || CMPGT B7, A8, B1 || [A1] SET A4, 31-1, 31-1, A4 || [B1] SET B5, 1, 1, B5 || LDW *B0[10], B10 ; C epilog || LDW *A0[11], A10 [A1] SET .S1 A4, 31-0, 31-0, A4 || [B1] SET .S2 B5, 0, 0, B5 MV B5, A5 MV A8, A6 ; restoring floating-point threshold NOP 1 ; A10, B10 loaded and branch occurs .global _process_event .global _cc_table .global _div_table