📄 filter.asm
字号:
.sym _j,_j$1, 4, 3, 32
; D:\ti\c6000\cgtools\bin\opt6x.exe -s -O3 C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\TI3504_2 C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\TI3504_4 -w E:/yinpin/Scram8k_DMA/
.sect ".text"
.global _filter
.sym _filter,_filter, 32, 2, 0
.func 21
;******************************************************************************
;* FUNCTION NAME: _filter *
;* *
;* Regs Modified : A0,A1,A2,A3,A4,A5,A6,A7,A9,A10,A11,B0,B1,B2,B4,B5,B7,*
;* SP *
;* Regs Used : A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,B0,B1,B2,B3,B4,*
;* B5,B6,B7,B8,SP *
;* Local Frame Size : 0 Args + 0 Auto + 8 Save = 8 byte *
;******************************************************************************
_filter:
;** --------------------------------------------------------------------------*
.line 2
.sym _inp,4, 19, 17, 32
.sym _outp,20, 19, 17, 32
.sym _size,6, 4, 17, 32
.sym _mem,22, 19, 17, 32
.sym _coef,8, 19, 17, 32
.sym _order,24, 3, 17, 16
.sym C$2,21, 3, 4, 16
.sym _acc,0, 5, 4, 40
.sym _order,24, 3, 4, 16
.sym _inp,4, 19, 4, 32
.sym _outp,20, 19, 4, 32
.sym _size,17, 4, 4, 32
.sym _mem,22, 19, 4, 32
.sym _coef,8, 19, 4, 32
.sym L$2,16, 4, 4, 32
.sym L$1,17, 4, 4, 32
.sym U$47,6, 19, 4, 32
.sym K$45,10, 14, 4, 32
.sym U$32,20, 19, 4, 32
.sym U$30,3, 19, 4, 32
.sym K$18,11, 3, 4, 16
.sym K$16,9, 19, 4, 32
.sym U$12,7, 19, 4, 32
;** 26 ----------------------- if ( size <= 0 ) goto g8;
STW .D2T1 A11,*SP--(8) ; |22|
STW .D2T1 A10,*+SP(4) ; |22|
MV .S2X A6,B1
.line 6
CMPGT .L2 B1,0,B0 ; |26|
[!B0] B .S1 L8 ; |26|
[ B0] MVK .S1 0xfffffffe,A10
[ B0] MV .L1X B4,A6
[ B0] ADDAH .D2 B6,B8,B4
[ B0] SUB .S1 A4,2,A7
[ B0] SUB .L1X B4,2,A9
|| [ B0] LDH .D1T1 *A8,A11
; BRANCH OCCURS ; |26|
;** --------------------------------------------------------------------------*
;** ----------------------- K$45 = 0xfffffffeu;
;** ----------------------- U$12 = &inp[-1];
;** ----------------------- K$16 = &mem[order-1];
;** ----------------------- K$18 = *coef;
;** ----------------------- U$47 = outp;
;** 28 ----------------------- L$1 = size;
;** ----------------------- #pragma MUST_ITERATE(1, 1099511627775, 1)
.line 8
;** -----------------------g3:
;** 28 ----------------------- *K$16 = *(++U$12);
;** 29 ----------------------- acc = _mpy(*mem, K$18);
;** 31 ----------------------- if ( order < 2 ) goto g7;
LDH .D1T1 *++A7,A0 ; |28|
NOP 4
;** --------------------------------------------------------------------------*
;** BEGIN LOOP L1
;** --------------------------------------------------------------------------*
L1:
STH .D1T1 A0,*A9 ; |28|
.line 9
LDH .D2T2 *B6,B4 ; |29|
NOP 4
MPY .M1X B4,A11,A0 ; |29|
NOP 1
SHR .S1 A0,31,A1 ; |29|
.line 11
CMPLT .L2 B8,2,B0 ; |31|
[ B0] B .S1 L7 ; |31|
[!B0] MV .D2 B6,B4
[!B0] ADD .D1 2,A8,A3
NOP 3
; BRANCH OCCURS ; |31|
;** --------------------------------------------------------------------------*
;** ----------------------- U$30 = &coef[1];
;** ----------------------- U$32 = mem;
;** 33 ----------------------- L$2 = order-1;
;** ----------------------- #pragma MUST_ITERATE(1, 32766, 1)
.line 13
CMPGT .L2 B8,3,B2
[ B2] B .S1 L3
SUB .S2 B8,1,B0
[!B2] LDH .D2T2 *++B4,B5 ; |33|
NOP 2
[!B2] LDH .D1T1 *A3++,A4 ; |33|
; BRANCH OCCURS
;** --------------------------------------------------------------------------*
;** -----------------------g6:
;** 33 ----------------------- C$2 = *(++U$32);
;** 33 ----------------------- acc += _mpy(C$2, *U$30++);
;** 34 ----------------------- U$32[-1] = C$2;
;** 35 ----------------------- if ( --L$2 ) goto g6;
NOP 4
;** --------------------------------------------------------------------------*
;** BEGIN LOOP L2
;** --------------------------------------------------------------------------*
L2:
MPY .M1X B5,A4,A4 ; |33|
NOP 1
ADD .L1 A4,A1:A0,A1:A0 ; |33|
.line 14
STH .D2T2 B5,*-B4(2) ; |34|
.line 15
SUB .D2 B0,1,B0 ; |35|
[ B0] B .S1 L2 ; |35|
[ B0] LDH .D2T2 *++B4,B5 ; |33|
|| [ B0] LDH .D1T1 *A3++,A4 ; |33|
NOP 4
; BRANCH OCCURS ; |35|
;** --------------------------------------------------------------------------*
B .S1 L7
NOP 5
; BRANCH OCCURS
;** --------------------------------------------------------------------------*
L3:
MVC .S2 CSR,B7
AND .S2 -2,B7,B5
SUB .D2 B0,3,B0
|| MVC .S2 B5,CSR ; interrupts off
;*----------------------------------------------------------------------------*
;* SOFTWARE PIPELINE INFORMATION
;*
;* Loop source line : 31
;* Loop opening brace source line : 32
;* Loop closing brace source line : 35
;* Known Minimum Trip Count : 1
;* Known Maximum Trip Count : 32766
;* Known Max Trip Count Factor : 1
;* Loop Carried Dependency Bound(^) : 0
;* Unpartitioned Resource Bound : 2
;* Partitioned Resource Bound(*) : 2
;* Resource Partition:
;* A-side B-side
;* .L units 1 0
;* .S units 0 1
;* .D units 1 2*
;* .M units 1 0
;* .X cross paths 1 0
;* .T address paths 1 2*
;* Long read paths 1 1
;* Long write paths 1 0
;* Logical ops (.LS) 0 0 (.L or .S unit)
;* Addition ops (.LSD) 0 1 (.L or .S or .D unit)
;* Bound(.L .S .LS) 1 1
;* Bound(.L .S .D .LS .LSD) 1 2*
;*
;* Searching for software pipeline schedule at ...
;* ii = 2 Schedule found with 4 iterations in parallel
;* done
;*
;* Epilog not removed
;* Collapsed epilog stages : 0
;*
;* Prolog not entirely removed
;* Collapsed prolog stages : 1
;*
;* Minimum required memory pad : 0 bytes
;*
;* For further improvement on this loop, try option -mh6
;*
;* Minimum safe trip count : 3
;*----------------------------------------------------------------------------*
L4: ; PIPED LOOP PROLOG
LDH .D1T1 *A3++,A4 ; (P) |33|
|| [ B0] B .S2 L5 ; (P) |35|
|| LDH .D2T2 *++B4,B5 ; (P) |33|
[ B0] SUB .D2 B0,1,B0 ; (P) @|35|
LDH .D1T1 *A3++,A4 ; (P) @|33|
|| [ B0] B .S2 L5 ; (P) @|35|
|| LDH .D2T2 *++B4,B5 ; (P) @|33|
MVK .S1 0x1,A2 ; init prolog collapse predicate
|| [ B0] SUB .D2 B0,1,B0 ; (P) @@|35|
;** --------------------------------------------------------------------------*
L5: ; PIPED LOOP KERNEL
[ B0] B .S2 L5 ; @@|35|
|| LDH .D2T2 *++B4,B5 ; @@@|33|
|| LDH .D1T1 *A3++,A4 ; @@@|33|
[ A2] SUB .D1 A2,1,A2 ;
|| [!A2] ADD .L1 A5,A1:A0,A1:A0 ; |33|
|| STH .D2T2 B5,*-B4(6) ; @|34|
|| MPY .M1X B5,A4,A5 ; @|33|
|| [ B0] SUB .S2 B0,1,B0 ; @@@|35|
;** --------------------------------------------------------------------------*
L6: ; PIPED LOOP EPILOG
NOP 1
STH .D2T2 B5,*-B4(4) ; (E) @@|34|
|| MPY .M1X B5,A4,A3 ; (E) @@|33|
|| ADD .L1 A5,A1:A0,A1:A0 ; (E) @|33|
;** --------------------------------------------------------------------------*
MVC .S2 B7,CSR ; interrupts on
STH .D2T2 B5,*-B4(2) ; (E) @@@|34|
|| ADD .L1 A3,A1:A0,A1:A0 ; (E) @@|33|
|| MPY .M1X B5,A4,A3 ; (E) @@@|33|
NOP 1
ADD .L1 A3,A1:A0,A1:A0 ; (E) @@@|33|
;** --------------------------------------------------------------------------*
L7:
;** -----------------------g7:
;** 37 ----------------------- *U$47++ = (unsigned)(acc>>16)&K$45;
;** 38 ----------------------- if ( --L$1 ) goto g3;
;** -----------------------g8:
;** ----------------------- return;
.line 17
SHR .S1 A1:A0,16,A1:A0 ; |37|
AND .S1 A10,A0,A0 ; |37|
STH .D1T1 A0,*A6++ ; |37|
.line 18
SUB .D2 B1,1,B1 ; |38|
[ B1] B .S1 L1 ; |38|
[ B1] LDH .D1T1 *++A7,A0 ; |28|
NOP 4
; BRANCH OCCURS ; |38|
;** --------------------------------------------------------------------------*
L8:
.line 19
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -