⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix_mpys.asm

📁 自己编写的任意矩阵相乘的DSP程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;******************************************************************************
;* 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 + -