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

📄 qua_gain_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;***************************************************************
;* TMS320C54x C/C++ Codegen                  PC Version 3.831  *
;* Date/Time created: Wed May 11 09:36:47 2005                 *
;***************************************************************
	.mmregs
FP	.set	AR7
	.c_mode
	.file	"QUA_GAIN.C"

	.sect	".cinit"
	.align	1
	.field  	IR_1,16
	.field  	_past_qua_en$1+0,16
	.field  	-14336,16			; _past_qua_en$1[0] @ 0
	.field  	-14336,16			; _past_qua_en$1[1] @ 16
	.field  	-14336,16			; _past_qua_en$1[2] @ 32
	.field  	-14336,16			; _past_qua_en$1[3] @ 48
IR_1:	.set	4

	.sect	".text"
	.bss	_past_qua_en$1,4,0,0
	.sym	_past_qua_en,_past_qua_en$1, 51, 3, 64,, 4
;	c:\ti\c5400\cgtools\bin\opt500.exe -i20 -q -s -O3 D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\TI3928_2 D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\TI3928_5 -w F:/ATA/Code/g729a_v1.4/G729A/Debug 

	.sect	".text"
	.sym	_Gbk_presel,_Gbk_presel, 32, 3, 0
	.func	345
;----------------------------------------------------------------------
; 345 | static void Gbk_presel(                                                
; 346 | Word16 best_gain[],     /* (i) [0] Q9 : unquantized pitch gain     */  
; 348 | Word16 *cand1,          /* (o)    : index of best 1st stage vector */  
; 349 | Word16 *cand2,          /* (o)    : index of best 2nd stage vector */  
; 350 | Word16 gcode0           /* (i) Q4 : presearch for gain codebook    */  
; 351 | )                                                                      
;----------------------------------------------------------------------

;***************************************************************
;* FUNCTION DEF: _Gbk_presel                                   *
;***************************************************************

;***************************************************************
;*                                                             *
;* Using -g (debug) with optimization (-o3) may disable key op *
;*                                                             *
;***************************************************************
_Gbk_presel:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-12
        NOP

        MVDK      *SP(18),*(AR1)          ; ar1 = gcode0
        MVDK      *SP(17),*(AR6)          ; ar6 = *cand2
        MVDK      *SP(16),*(AR7)          ; ar7 = *cand1
        STL       A,*SP(2)                ; sp(2) = best_gain[]

;----------------------------------------------------------------------
; 361 | L_cfbg = L_mult( coef[0][0], best_gain[0] );        /* L_cfbg:Q20 -> !!
;     | y */                                                                   
;----------------------------------------------------------------------
        SSBX      SXM
        SSBX      FRCT
        LD        #_coef,A
        STLM      A,AR2                ; ar2 = coef
        SSBX      OVM
        MVDK      *SP(2),*(AR3)        ; ar3 = best_gain[]
        STL       A,*SP(3)
        MPY       *AR2,*AR3,A          
        DST       A,*SP(4)             ; sp(4) = L_cfbg

;----------------------------------------------------------------------
; 362 | L_acc = L_shr( L_coef[1][1], 15 );                  /* L_acc:Q20     */
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;RSBX      FRCT
        LD        #_L_coef,A
        STL       A,*SP(6)
        STLM      A,AR2
        ;ST        #15,*SP(0)            
        DLD       *AR2(6),A             
        ;CALL      #_L_shr   
        SFTA      A,-15            

;----------------------------------------------------------------------
; 363 | L_acc = L_add( L_cfbg , L_acc );                                       
; 364 | acc_h = extract_h( L_acc );                         /* acc_h:Q4      */
; 365 | L_preg = L_mult( acc_h, gcode0 );                   /* L_preg:Q9     */
;----------------------------------------------------------------------
        ;SSBX      SXM
        ;NOP
        DLD       *SP(4),B
        ;RSBX      SXM
        ;SSBX      OVM
        ;NOP
        ADD       A,B           
        DST       B,*SP(8)              ; SP(8) = L_acc 

;----------------------------------------------------------------------
; 366 | L_acc = L_shl( L_deposit_l( best_gain[1] ), 7 );    /* L_acc:Q9      */
;----------------------------------------------------------------------
        ;ST        #7,*SP(0)            
        ;RSBX      OVM
        MVDK      *SP(2),*(AR2)
        ;SSBX      SXM
        ;RSBX      FRCT
        LD        *AR2(1),A             
        ;CALL      #_L_shl 
        SFTA      A,7              

;----------------------------------------------------------------------
; 367 | L_acc = L_sub( L_acc, L_preg );                                        
;----------------------------------------------------------------------
        ;RSBX      SXM
        ;NOP
        DLD       *SP(8),B
        ;SSBX      FRCT
        ;SSBX      OVM
        SFTL      B,#-16,B              
        MVMD      AR1,T
        MPY       *(BL),B               ; L_preg = L_mult( acc_h, gcode0 )
        ;RSBX      FRCT
        ;RSBX      OVM
        ;DST       B,*SP(0)             
        ;CALL      #_L_sub               
        SUB        B,A                   ; a = L_acc = L_sub( L_acc, L_preg )
;----------------------------------------------------------------------
; 368 | acc_h = extract_h( L_shl( L_acc,2 ) );              /* L_acc_h:Q[-5] */
;----------------------------------------------------------------------
        ;RSBX      FRCT
        ;RSBX      OVM
        ;ST        #2,*SP(0)             
        ;CALL      #_L_shl  
        SFTA       A,2             
        SFTL      A,#-16,A              

;----------------------------------------------------------------------
; 369 | L_tmp_x = L_mult( acc_h, INV_COEF );                /* L_tmp_x:Q15   */
;----------------------------------------------------------------------
        ;SSBX      FRCT
        ;SSBX      OVM
        MPY       *(AL),#-17103,A        
        DST       A,*SP(10)             ; sp(10) = L_tmp_X

;----------------------------------------------------------------------
; 375 | L_acc = L_shr( L_coef[0][1], 10 );                  /* L_acc:Q20   */  
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;RSBX      FRCT
        ;ST        #10,*SP(0)            
        MVDK      *SP(6),*(AR2)
        DLD       *AR2(2),A              
        ;CALL      #_L_shr              
        SFTA      A,-10                 ; a = L_acc

        LD        A,B                   
;----------------------------------------------------------------------
; 376 | L_acc = L_sub( L_cfbg, L_acc );                     /* !!x -> L_cfbg:Q2
;     | 0 */                                                                   
; 377 | acc_h = extract_h( L_acc );                         /* acc_h:Q4    */  
; 378 | acc_h = mult( acc_h, gcode0 );                      /* acc_h:Q[-7] */  
;----------------------------------------------------------------------
        ;DST       B,*SP(0)                 
        ;RSBX      OVM                   
        ;RSBX      FRCT
        DLD       *SP(4),A              
        ;CALL      #_L_sub      
        SUB       B,A         
        NOP
        LD        A,B                   
;----------------------------------------------------------------------
; 379 | L_tmp = L_mult( acc_h, coef[1][0] );                /* L_tmp:Q10   */  
; 381 | L_preg = L_mult( coef[0][0], best_gain[1] );        /* L_preg:Q13  */  
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;SSBX      SXM
        LD        *(AR1),16,A           
        DST       A,*SP(8)               
        LD        B,A                   
        SFTL      A,#-16,B               
        DLD       *SP(8),A              
        ;SSBX      OVM
        ;SSBX      FRCT
        STLM      B,T
        NOP
        MPYA      A                      
        MVDK      *SP(3),*(AR2)
        LD        *AR2(2),T
        SFTA      A,-16,A               
        MPY       *(AL),A                
        DST       A,*SP(8)              
;----------------------------------------------------------------------
; 382 | L_acc = L_sub( L_tmp, L_shr(L_preg,3) );            /* L_acc:Q10   */  
;----------------------------------------------------------------------
        ;ST        #3,*SP(0)             
        MVDK      *SP(2),*(AR2)
        LD        *AR2(1),T
        MPY       *(_coef),A            
        ;RSBX      OVM
        ;RSBX      FRCT
        ;NOP
        ;CALL      #_L_shr               
        SFTA      A,-3
        
        ;RSBX      OVM
        ;RSBX      FRCT
        ;DST       A,*SP(0)              ; |382| 
        LD        A,B
        DLD       *SP(8),A              ; |382| 
        ;CALL      #_L_sub               ; |382| 
        SUB       B,A
        NOP
;----------------------------------------------------------------------
; 384 | acc_h = extract_h( L_shl( L_acc,2 ) );              /* acc_h:Q[-4] */  
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;RSBX      FRCT
        ;ST        #2,*SP(0)              
        ;CALL      #_L_shl                
        SFTA      A,2        
        SFTL      A,#-16,A              
;----------------------------------------------------------------------
; 385 | L_tmp_y = L_mult( acc_h, INV_COEF );                /* L_tmp_y:Q16 */  
; 387 | sft_y = (14+4+1)-16;         /* (Q[thr1]+Q[gcode0]+1)-Q[L_tmp_y] */    
; 388 | sft_x = (15+4+1)-15;         /* (Q[thr2]+Q[gcode0]+1)-Q[L_tmp_x] */    
;----------------------------------------------------------------------
        ;SSBX      FRCT
        ;SSBX      OVM
        MPY       *(AL),#-17103,A       
        DST       A,*SP(8)              

        ;SSBX      SXM
        LD        *(AR1),A              
        BC        L4,AGT                

;----------------------------------------------------------------------
; 412 | *cand1 = 0 ;                                                           
; 413 | do{                                                                    
;----------------------------------------------------------------------
        LD        #_thr1,A
        ST        #0,*AR7               
        STM       #0,AR2
        STL       A,*SP(2)
L1:    
;----------------------------------------------------------------------
; 414 | L_temp = L_sub(L_tmp_y ,L_shr(L_mult(thr1[*cand1],gcode0),sft_y));     
; 415 |  if( L_temp <0L){                                                      
;----------------------------------------------------------------------
        ;ST        #3,*SP(0)            
        ;RSBX      OVM
        LDM       AR2,A
        LD        *SP(2),B
        ;SSBX      FRCT
        ADD       A,B                    
        ;SSBX      OVM
        STLM      B,AR2
        MVMD      AR1,T
        MPY       *AR2,A                
        ;RSBX      FRCT
        ;RSBX      OVM
        ;NOP
        ;CALL      #_L_shr               
        SFTA      A,-3              ; ****
        
        ;RSBX      OVM
        ;RSBX      FRCT
        ;DST       A,*SP(0)
        LD        A,B               ; ****              
        DLD       *SP(8),A              
        ;CALL      #_L_sub
        SUB       B,A               

        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                   
        ;SFTA      A,-8                  
        BC        L2,AGEQ               
;----------------------------------------------------------------------
; 416 | (*cand1) =add(*cand1,1);                                               
;----------------------------------------------------------------------
        LD        *AR7,16,A             
        ;SSBX      OVM
        ;NOP
        ADD       #1,16,A,A             
        SFTA      A,-16,A               
        STL       A,*AR7
;----------------------------------------------------------------------
; 418 | else               break ;                                             
; 419 | } while(sub((*cand1),(NCODE1-NCAN1))) ;                                
;----------------------------------------------------------------------
        STLM      A,AR2
        NOP
        NOP
        BANZ      L1,*AR2(-4)           
L2:    
;----------------------------------------------------------------------
; 421 | *cand2 = 0 ;                                                           
; 422 | do{                                                                    
;----------------------------------------------------------------------
        STM       #0,AR2
        STM       #_thr2,AR7
        ST        #0,*AR6               
L3:     
;----------------------------------------------------------------------
; 423 | L_temp =L_sub(L_tmp_x ,L_shr(L_mult(thr2[*cand2],gcode0),sft_x));      
; 424 | if( L_temp <0L){                                                       
;----------------------------------------------------------------------
        ;RSBX      OVM
        LDM       AR2,A
        LDM       AR7,B

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -