ld_cmp_set .macro n LDW .D1T1 *--A6,A7 || LDW .D2T2 *++B6,B7 || CMPGT .L1X A7, B4, A1 || CMPGT .L2 B7, B4, B1 || [A1] SET .S1 A4, n, n, A4 || [B1] SET .S2 B5, 31-n, 31-n, B5 .endm .global _emask ;; Inputs: ;; A4: address of energy data block. ;; B4: floating point threshold. ;; ;; Outputs: ;; A4 and A5 contain the channel masks. A4 refers to channels ;; stored at locations 0..31 and A5 refers to channels stored ;; at locations 32..63. ;; ;; A4 is filled from bit 0 (channel 31) to bit 31 (channel 0). ;; B4 is filled from bit 31 (channel 32) to bit 0 (channel 63). _emask: ADD .L1 0, A4, A6 || ADD .L2X 4, A4, B6 || ZERO .S1 A4 || ZERO .S2 B5 LDW .D1T1 *++A6[31],A7 || LDW .D2T2 *++B6[31],B7 LDW .D1T1 *--A6,A7 || LDW .D2T2 *++B6,B7 LDW .D1T1 *--A6,A7 || LDW .D2T2 *++B6,B7 LDW .D1T1 *--A6,A7 || LDW .D2T2 *++B6,B7 LDW .D1T1 *--A6,A7 || LDW .D2T2 *++B6,B7 LDW .D1T1 *--A6,A7 || LDW .D2T2 *++B6,B7 || CMPGT .L1X A7, B4, A1 || CMPGT .L2 B7, B4, 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 .L1X A7, B4, A1 || CMPGT .L2 B7, B4, B1 || [A1] SET .S1 A4, 31-5, 31-5, A4 || [B1] SET .S2 B5, 5, 5, B5 CMPGT .L1X A7, B4, A1 || CMPGT .L2 B7, B4, B1 || [A1] SET .S1 A4, 31-4, 31-4, A4 || [B1] ADD .D2 16, B5, B5 || B .S2 B3 ; Return to caller CMPGT .L1X A7, B4, A1 || CMPGT .L2 B7, B4, B1 || [A1] SET .S1 A4, 31-3, 31-3, A4 || [B1] SET .S2 B5, 3, 3, B5 CMPGT .L1X A7, B4, A1 || CMPGT .L2 B7, B4, B1 || [A1] SET .S1 A4, 31-2, 31-2, A4 || [B1] SET .S2 B5, 2, 2, B5 CMPGT .L1X A7, B4, A1 || CMPGT .L2 B7, B4, B1 || [A1] SET .S1 A4, 31-1, 31-1, A4 || [B1] SET .S2 B5, 1, 1, B5 [A1] SET .S1 A4, 31-0, 31-0, A4 || [B1] SET .S2 B5, 0, 0, B5 MV .L1X B5, A5