📄 dss_isr_evm62_stub.lst
字号:
2 00000100 013DD4F4 stw a2, *SP--[14] ; CODE
2 00000104 013C11A0 mv SP, a2 ; CODE
2
2 .if (0 = 0)
2 .if (-1 = -1)
2 ; both amask and bmask non-zero
2
2 00000108 023DA2F7 stw b4, *+SP[13] ; CODE
2 0000010c 01898274 || stw a3, *+a2[13 - 1] ; CODE
2
2 .else
2 ; both amask and bmask = 0
2
2 stw TMPB, *+SPB[offset] ; CODE
2 || stw TMPA, *+SPA[offset - 1] ; CODE
2 || mvc creg0, TMPB ; CODE
2
2 .endif
2 .else
2 ; one of amask or bmask is 0, but not both
2 FIRST_BIT_NUM mask, bitn_next
2
2 stw TMPB, *+SPB[offset] ; CODE
2 || stw TMPA, *+SPA[offset - 1] ; CODE
2 || mv :reg::bitn_next:, tmpreg ; CODE
2
2 .asg 0, mask
2 .endif
2
2 .eval 13 - 2, offset
2
2 ;
2 ; This loop handles when both A and B registers need saving
2 ;
2 .loop
2 .if (a_bitcount > 0) & (b_bitcount > 0)
2 FIRST_BIT_NUM amask, bitn_a
2 FIRST_BIT_NUM bmask, bitn_b
2 .eval amask & ~(1 << bitn_a), amask
2 .eval bmask & ~(1 << bitn_b), bmask
2
2 .if !(((a_bitcount = 1) & (b_bitcount > 2)) | ((b_bitcount = 1) & (a_bitcount > 2)
2 ;
2 ; At this point, one of the following is true:
2 ; 1. a_bitcount & b_bitcount > 1
2 ; 2. a_bitcount & b_bitcount = 1
2 ; 3. a_bitcount = 1 & b_bitcount = 2
2 ; 4. a_bitcount = 2 & b_bitcount = 1
2 ; In cases 2-4 this is the last iteration of the loop
TMS320C6x COFF Assembler Version 4.00 Fri Sep 15 10:24:27 2000
Copyright (c) 1996-2000 Texas Instruments Incorporated
dss_isr_evm62_stub.s62 PAGE 16
2 ;
2
2 stw b:bitn_b:, *+SPB[offset] ; CODE
2 || stw a:bitn_a:, *+SPA[offset - 1] ; CODE
2
2 .eval offset - 2, offset
2 .eval a_bitcount - 1, a_bitcount
2 .eval b_bitcount - 1, b_bitcount
2 .else
2 ;
2 ; Either a_bitcount or b_bitcount equals 1, but not both.
2 ; The one != 1 is > 2.
2 ; We're going to exit the loop after this, knowing we'll
2 ; also be doing the next loop at least twice.
2 ;
2 .if (b_bitcount = 1)
2 .asg amask, mask
2 .asg A, reg
2 .asg TMPB, tmpreg
2 .elseif (a_bitcount = 1)
2 .asg bmask, mask
2 .asg B, reg
2 .asg TMPA, tmpreg
2 .else
2 .emsg "Bad macro logic"
2 .break
2 .endif
2
2 FIRST_BIT_NUM mask, bitn_next
2
2 stw b:bitn_b:, *+SPB[offset] ; CODE
2 || stw a:bitn_a:, *+SPA[offset - 1] ; CODE
2 || mv :reg::bitn_next:, tmpreg ; CODE
2
2 .eval offset - 2, offset
2 .eval a_bitcount - 1, a_bitcount
2 .eval b_bitcount - 1, b_bitcount
2
2 .break
2 .endif
2 .else
2 .break
2 .endif
2 .endloop
3 .if (6 > 0) & (5 > 0)
3 00000110 FIRST_BIT_NUM amask, bitn_a
4 .asg 0, BITNUM
4 .eval 1008, regmask
5 .if (1008 & 1)
5 .break
5 .endif
5 .eval 1008 >> 1, regmask
5 .eval 0 + 1, BITNUM
5 .if (504 & 1)
5 .break
TMS320C6x COFF Assembler Version 4.00 Fri Sep 15 10:24:27 2000
Copyright (c) 1996-2000 Texas Instruments Incorporated
dss_isr_evm62_stub.s62 PAGE 17
5 .endif
5 .eval 504 >> 1, regmask
5 .eval 1 + 1, BITNUM
5 .if (252 & 1)
5 .break
5 .endif
5 .eval 252 >> 1, regmask
5 .eval 2 + 1, BITNUM
5 .if (126 & 1)
5 .break
5 .endif
5 .eval 126 >> 1, regmask
5 .eval 3 + 1, BITNUM
5 .if (63 & 1)
5 .break
3 00000110 FIRST_BIT_NUM bmask, bitn_b
4 .asg 0, BITNUM
4 .eval 992, regmask
5 .if (992 & 1)
5 .break
5 .endif
5 .eval 992 >> 1, regmask
5 .eval 0 + 1, BITNUM
5 .if (496 & 1)
5 .break
5 .endif
5 .eval 496 >> 1, regmask
5 .eval 1 + 1, BITNUM
5 .if (248 & 1)
5 .break
5 .endif
5 .eval 248 >> 1, regmask
5 .eval 2 + 1, BITNUM
5 .if (124 & 1)
5 .break
5 .endif
5 .eval 124 >> 1, regmask
5 .eval 3 + 1, BITNUM
5 .if (62 & 1)
5 .break
5 .endif
5 .eval 62 >> 1, regmask
5 .eval 4 + 1, BITNUM
5 .if (31 & 1)
5 .break
3 .eval 1008 & ~(1 << 4), amask
3 .eval 992 & ~(1 << 5), bmask
3
3 .if !(((6 = 1) & (5 > 2)) | ((5 = 1) & (6 > 2)))
3 ;
3 ; At this point, one of the following is true:
3 ; 1. a_bitcount & b_bitcount > 1
3 ; 2. a_bitcount & b_bitcount = 1
3 ; 3. a_bitcount = 1 & b_bitcount = 2
3 ; 4. a_bitcount = 2 & b_bitcount = 1
TMS320C6x COFF Assembler Version 4.00 Fri Sep 15 10:24:27 2000
Copyright (c) 1996-2000 Texas Instruments Incorporated
dss_isr_evm62_stub.s62 PAGE 18
3 ; In cases 2-4 this is the last iteration of the loop
3 ;
3
3 00000110 02BD62F7 stw b5, *+SP[11] ; CODE
3 00000114 02094274 || stw a4, *+a2[11 - 1] ; CODE
3
3 .eval 11 - 2, offset
3 .eval 6 - 1, a_bitcount
3 .eval 5 - 1, b_bitcount
3 .else
3 ;
3 ; Either a_bitcount or b_bitcount equals 1, but not both.
3 ; The one != 1 is > 2.
3 ; We're going to exit the loop after this, knowing we'll
3 ; also be doing the next loop at least twice.
3 ;
3 .if (b_bitcount = 1)
3 .asg amask, mask
3 .asg A, reg
3 .asg TMPB, tmpreg
3 .elseif (a_bitcount = 1)
3 .asg bmask, mask
3 .asg B, reg
3 .asg TMPA, tmpreg
3 .else
3 .emsg "Bad macro logic"
3 .break
3 .endif
3
3 FIRST_BIT_NUM mask, bitn_next
3
3 stw b:bitn_b:, *+SPB[offset] ; CODE
3 || stw a:bitn_a:, *+SPA[offset - 1] ; CODE
3 || mv :reg::bitn_next:, tmpreg ; CODE
3
3 .eval offs
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -