📄 matrix_mpys.asm
字号:
;******************************************************************************
;* TMS320C6x C/C++ Codegen PC v5.1.0 *
;* Date/Time created: Sat Dec 10 14:16:42 2005 *
;******************************************************************************
;******************************************************************************
;* GLOBAL FILE PARAMETERS *
;* *
;* Architecture : TMS320C64xx *
;* Optimization : Enabled at level 3 *
;* Optimizing for : Speed *
;* Based on options: -o3, no -ms *
;* Endian : Little *
;* Interrupt Thrshld : Disabled *
;* Data Access Model : Far Aggregate Data *
;* Pipelining : Enabled *
;* Speculate Loads : Disabled *
;* Memory Aliases : Presume not aliases (optimistic) *
;* Debug Info : DWARF Debug *
;* *
;******************************************************************************
.asg A15, FP
.asg B14, DP
.asg B15, SP
.global $bss
DW$CU .dwtag DW_TAG_compile_unit
.dwattr DW$CU, DW_AT_name("serial_asm")
.dwattr DW$CU, DW_AT_producer("TMS320C6x C/C++ Codegen PC v5.1.0 Copyright (c) 1996-2005 Texas Instruments Incorporated")
.dwattr DW$CU, DW_AT_stmt_list(0x00)
.dwattr DW$CU, DW_AT_TI_VERSION(0x01)
.sect ".text"
.global _matrix_mpys
.text
.sect ".text"
DW$1 .dwtag DW_TAG_subprogram, DW_AT_name("matrix_mpys"), DW_AT_symbol_name("_matrix_mpys")
.dwattr DW$1, DW_AT_low_pc(_matrix_mpys)
.dwattr DW$1, DW_AT_high_pc(0x00)
.dwattr DW$1, DW_AT_begin_file("D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa")
.dwattr DW$1, DW_AT_begin_line(0x03)
.dwattr DW$1, DW_AT_begin_column(0x01)
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",3,1
.dwfde DW$CIE
;******************************************************************************
;* FUNCTION NAME: _matrix_mpys *
;* *
;* Regs Modified : A0,A3,A4,A5,A6,A7,A8,A9,B0,B1,B2,B4,B5,B6,B7,B8,B9, *
;* A16,A17,A18,A19,A20,A21,A22,A23,A24,B16,B17,B18 *
;* Regs Used : A0,A3,A4,A5,A6,A7,A8,A9,A10,B0,B1,B2,B3,B4,B5,B6,B7, *
;* B8,B9,A16,A17,A18,A19,A20,A21,A22,A23,A24,B16, *
;* B17,B18 *
;******************************************************************************
;******************************************************************************
;* *
;* Using -g (debug) with optimization (-o3) may disable key optimizations! *
;* *
;******************************************************************************
_matrix_mpys:
.map i_max/B5
.map rst/B7
.map rst'/A20
.map c_mtrx/A21
.map c_mtrx'/A6
.map j_max/B8
.map a_mtrx/A4
.map a_mtrx'/A19
.map dst/A7
.map src1/A6
.map src2/A4
.map i/A18
.map k/A17
.map k'/B8
.map kk/B9
.map kk$1/A17
.map kk$2/A0
.map kk$3/B7
.map m/A3
.map m'/B6
.map n/A23
.map n'/A8
.map temp1/A16
.map temp1'/B7
.map temp2/A9
.map temp2'/A3
.map temp3/A24
.map temp3'/A3
.map temp4/A5
.map temp4'/A4
.map temp5/A3
.map mm/B6
.map mm'/A0
.map nn/B17
.map nn'/B0
.map max/B18
.map x/B0
.map z/A22
.map b_mtrx/B4
.map b_mtrx'/A8
.map resultmax/B16
.map resultmax'/A10
;** --------------------------------------------------------------------------*
; _matrix_mpys: .cproc a_mtrx,b_mtrx,c_mtrx,m,n,k,resultmax
; .reg src1,src2,dst,rst
; .reg i,z,mm,nn,kk
; .reg temp1,temp2,temp3,temp4,temp5
; .reg max,x,i_max,j_max
; .no_mdep
.dwcfa 0x0e, 0
.dwcfa 0x09, 126, 19
DW$2 .dwtag DW_TAG_variable, DW_AT_name("i_max"), DW_AT_symbol_name("i_max")
.dwattr DW$2, DW_AT_type(*DW$T$10)
.dwattr DW$2, DW_AT_location[DW_OP_reg21]
DW$3 .dwtag DW_TAG_variable, DW_AT_name("rst"), DW_AT_symbol_name("rst")
.dwattr DW$3, DW_AT_type(*DW$T$10)
.dwattr DW$3, DW_AT_location[DW_OP_reg23]
DW$4 .dwtag DW_TAG_variable, DW_AT_name("c_mtrx"), DW_AT_symbol_name("c_mtrx")
.dwattr DW$4, DW_AT_type(*DW$T$10)
.dwattr DW$4, DW_AT_location[DW_OP_regx 0x2a]
DW$5 .dwtag DW_TAG_variable, DW_AT_name("c_mtrx"), DW_AT_symbol_name("c_mtrx")
.dwattr DW$5, DW_AT_type(*DW$T$10)
.dwattr DW$5, DW_AT_location[DW_OP_reg6]
DW$6 .dwtag DW_TAG_variable, DW_AT_name("j_max"), DW_AT_symbol_name("j_max")
.dwattr DW$6, DW_AT_type(*DW$T$10)
.dwattr DW$6, DW_AT_location[DW_OP_reg24]
DW$7 .dwtag DW_TAG_variable, DW_AT_name("a_mtrx"), DW_AT_symbol_name("a_mtrx")
.dwattr DW$7, DW_AT_type(*DW$T$10)
.dwattr DW$7, DW_AT_location[DW_OP_reg4]
DW$8 .dwtag DW_TAG_variable, DW_AT_name("dst"), DW_AT_symbol_name("dst")
.dwattr DW$8, DW_AT_type(*DW$T$10)
.dwattr DW$8, DW_AT_location[DW_OP_reg7]
DW$9 .dwtag DW_TAG_variable, DW_AT_name("src1"), DW_AT_symbol_name("src1")
.dwattr DW$9, DW_AT_type(*DW$T$10)
.dwattr DW$9, DW_AT_location[DW_OP_reg6]
DW$10 .dwtag DW_TAG_variable, DW_AT_name("src2"), DW_AT_symbol_name("src2")
.dwattr DW$10, DW_AT_type(*DW$T$10)
.dwattr DW$10, DW_AT_location[DW_OP_reg4]
DW$11 .dwtag DW_TAG_variable, DW_AT_name("i"), DW_AT_symbol_name("i")
.dwattr DW$11, DW_AT_type(*DW$T$10)
.dwattr DW$11, DW_AT_location[DW_OP_regx 0x27]
DW$12 .dwtag DW_TAG_variable, DW_AT_name("k"), DW_AT_symbol_name("k")
.dwattr DW$12, DW_AT_type(*DW$T$10)
.dwattr DW$12, DW_AT_location[DW_OP_regx 0x26]
DW$13 .dwtag DW_TAG_variable, DW_AT_name("k"), DW_AT_symbol_name("k")
.dwattr DW$13, DW_AT_type(*DW$T$10)
.dwattr DW$13, DW_AT_location[DW_OP_reg24]
DW$14 .dwtag DW_TAG_variable, DW_AT_name("kk"), DW_AT_symbol_name("kk")
.dwattr DW$14, DW_AT_type(*DW$T$10)
.dwattr DW$14, DW_AT_location[DW_OP_reg25]
DW$15 .dwtag DW_TAG_variable, DW_AT_name("m"), DW_AT_symbol_name("m")
.dwattr DW$15, DW_AT_type(*DW$T$10)
.dwattr DW$15, DW_AT_location[DW_OP_reg3]
DW$16 .dwtag DW_TAG_variable, DW_AT_name("m"), DW_AT_symbol_name("m")
.dwattr DW$16, DW_AT_type(*DW$T$10)
.dwattr DW$16, DW_AT_location[DW_OP_reg22]
DW$17 .dwtag DW_TAG_variable, DW_AT_name("n"), DW_AT_symbol_name("n")
.dwattr DW$17, DW_AT_type(*DW$T$10)
.dwattr DW$17, DW_AT_location[DW_OP_regx 0x2c]
DW$18 .dwtag DW_TAG_variable, DW_AT_name("n"), DW_AT_symbol_name("n")
.dwattr DW$18, DW_AT_type(*DW$T$10)
.dwattr DW$18, DW_AT_location[DW_OP_reg8]
DW$19 .dwtag DW_TAG_variable, DW_AT_name("temp1"), DW_AT_symbol_name("temp1")
.dwattr DW$19, DW_AT_type(*DW$T$10)
.dwattr DW$19, DW_AT_location[DW_OP_regx 0x25]
DW$20 .dwtag DW_TAG_variable, DW_AT_name("temp2"), DW_AT_symbol_name("temp2")
.dwattr DW$20, DW_AT_type(*DW$T$10)
.dwattr DW$20, DW_AT_location[DW_OP_reg9]
DW$21 .dwtag DW_TAG_variable, DW_AT_name("temp3"), DW_AT_symbol_name("temp3")
.dwattr DW$21, DW_AT_type(*DW$T$10)
.dwattr DW$21, DW_AT_location[DW_OP_regx 0x2d]
DW$22 .dwtag DW_TAG_variable, DW_AT_name("temp4"), DW_AT_symbol_name("temp4")
.dwattr DW$22, DW_AT_type(*DW$T$10)
.dwattr DW$22, DW_AT_location[DW_OP_reg5]
DW$23 .dwtag DW_TAG_variable, DW_AT_name("temp5"), DW_AT_symbol_name("temp5")
.dwattr DW$23, DW_AT_type(*DW$T$10)
.dwattr DW$23, DW_AT_location[DW_OP_reg3]
DW$24 .dwtag DW_TAG_variable, DW_AT_name("mm"), DW_AT_symbol_name("mm")
.dwattr DW$24, DW_AT_type(*DW$T$10)
.dwattr DW$24, DW_AT_location[DW_OP_reg22]
DW$25 .dwtag DW_TAG_variable, DW_AT_name("nn"), DW_AT_symbol_name("nn")
.dwattr DW$25, DW_AT_type(*DW$T$10)
.dwattr DW$25, DW_AT_location[DW_OP_regx 0x36]
DW$26 .dwtag DW_TAG_variable, DW_AT_name("max"), DW_AT_symbol_name("max")
.dwattr DW$26, DW_AT_type(*DW$T$10)
.dwattr DW$26, DW_AT_location[DW_OP_regx 0x37]
DW$27 .dwtag DW_TAG_variable, DW_AT_name("x"), DW_AT_symbol_name("x")
.dwattr DW$27, DW_AT_type(*DW$T$10)
.dwattr DW$27, DW_AT_location[DW_OP_reg16]
DW$28 .dwtag DW_TAG_variable, DW_AT_name("z"), DW_AT_symbol_name("z")
.dwattr DW$28, DW_AT_type(*DW$T$10)
.dwattr DW$28, DW_AT_location[DW_OP_regx 0x2b]
DW$29 .dwtag DW_TAG_variable, DW_AT_name("b_mtrx"), DW_AT_symbol_name("b_mtrx")
.dwattr DW$29, DW_AT_type(*DW$T$10)
.dwattr DW$29, DW_AT_location[DW_OP_reg20]
DW$30 .dwtag DW_TAG_variable, DW_AT_name("resultmax"), DW_AT_symbol_name("resultmax")
.dwattr DW$30, DW_AT_type(*DW$T$10)
.dwattr DW$30, DW_AT_location[DW_OP_regx 0x35]
DW$31 .dwtag DW_TAG_variable, DW_AT_name("resultmax"), DW_AT_symbol_name("resultmax")
.dwattr DW$31, DW_AT_type(*DW$T$10)
.dwattr DW$31, DW_AT_location[DW_OP_reg10]
MV .L1X m',m ; |3|
MV .L1 c_mtrx',c_mtrx ; |3|
|| MV .L2X resultmax',resultmax ; |3|
|| MV .S1X k',k ; |3|
|| MV .D1 n',n ; |3|
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",11,1
ZERO .L2 max ; |11|
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",12,1
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",13,1
MPY .M1 m,k,temp3' ; |13|
NOP 1
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",14,1
ADD .L1 0xffffffff,temp3',temp3 ; |14| position storing
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",15,1
;** --------------------------------------------------------------------------*
;** BEGIN LOOP loop3
;** --------------------------------------------------------------------------*
loop3:
DW$L$_matrix_mpys$2$B:
DW$L$_matrix_mpys$2$E:
;** --------------------------------------------------------------------------*
loop2:
DW$L$_matrix_mpys$3$B:
DW$L$_matrix_mpys$3$E:
;*----------------------------------------------------------------------------*
;* SOFTWARE PIPELINE INFORMATION
;*
;* Loop source line : 29
;* Loop closing brace source line : 42
;* Known Minimum Trip Count : 30
;* Known Max Trip Count Factor : 1
;* Loop Carried Dependency Bound(^) : 2
;* Unpartitioned Resource Bound : 2
;* Partitioned Resource Bound(*) : 2
;* Resource Partition:
;* A-side B-side
;* .L units 0 0
;* .S units 0 1
;* .D units 2* 0
;* .M units 2* 0
;* .X cross paths 0 0
;* .T address paths 2* 0
;* Long read paths 0 0
;* Long write paths 0 0
;* Logical ops (.LS) 0 0 (.L or .S unit)
;* Addition ops (.LSD) 4 1 (.L or .S or .D unit)
;* Bound(.L .S .LS) 0 1
;* Bound(.L .S .D .LS .LSD) 2* 1
;*
;* Searching for software pipeline schedule at ...
;* ii = 2 Schedule found with 7 iterations in parallel
;* Done
;*
;* Collapsed epilog stages : 6
;* Prolog not entirely removed
;* Collapsed prolog stages : 4
;*
;* Minimum required memory pad : 0 bytes
;*
;* Minimum safe trip count : 1
;*----------------------------------------------------------------------------*
L3: ; PIPED LOOP PROLOG
; loop3:.trip 10
; loop2:.trip 10
; loop1:.trip 30
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",16,1
NOP 1
MV .L2X kk$1,kk ; |16|
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",17,1
MVK .L1 0x1,z ; |17|
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",18,1
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",19,1
MPY .M2X mm,n,temp1' ; |19|
NOP 1
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",20,1
NOP 1
ADD .L1X 0xffffffff,temp1',temp1 ; |20| position end of A[m][n]
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",21,1
MPY .M1 n,k,temp2' ; |21|
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",22,1
NOP 1
SUB .L1 temp2',z,temp2 ; |22|
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",23,1
ADD .L1 0x1,z,z ; |23| position end of B[n][k]
.dwpsn "D:\CCStudio_v3.1\MyProjects\matrix\matrix_mpys.sa",25,1
MV .L2X n,nn ; |25| number of dotp in loop1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -