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

📄 pitch_a_c_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        ;RSBX      OVM
        LD        *(AR1),16,A           ; |218| 
        ;SSBX      OVM
        NOP
        ABS       A,A                   ; |218| 
        SFTA      A,-16,A               ; |218| 
        ;RSBX      OVM
        LD        *(AL),A               ; |218| 
        SUB       #5,A,A                ; |218| 
        BC        L32,AGEQ              ; |218| 

;----------------------------------------------------------------------
; 219 | max2 = add(max2, shr(max3, 2));                                        
;----------------------------------------------------------------------
        ;ST        #2,*SP(0)             ; |219| 
        ;RSBX      FRCT
        LD        *SP(11),A
        ;CALL      #_shr              ; |219| 
        SFTA      A,-2
        
        ;SSBX      SXM
        ;RSBX      OVM
        LD        *FP(237),B
        LD        *(BL),16,B            ; |219| 
        ;SSBX      OVM
        ADD       *(AL),16,B,A          ; |219| 
        SFTA      A,-16,A               ; |219| 
        STL       A,*FP(237)
L32:    

;----------------------------------------------------------------------
; 224 | i = add(i, T2);                                                        
; 225 | j = sub(abs_s(i), 7);                                                  
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *FP(243),B
        LD        *(AR1),16,A           ; |224| 
        ;SSBX      OVM
        ADD       *(BL),16,A,A          ; |224| 
        SFTA      A,-16,A               ; |224| 
        STLM      A,AR1

;----------------------------------------------------------------------
; 226 | if(j < 0)                                                              
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *(AR1),16,A           ; |226| 
        ;SSBX      OVM
        NOP
        ABS       A,A                   ; |226| 
        SFTA      A,-16,A               ; |226| 
        ;RSBX      OVM
        LD        *(AL),A               ; |226| 
        SUB       #7,A,A                ; |226| 
        BC        L33,AGEQ              ; |226| 

;----------------------------------------------------------------------
; 227 | max2 = add(max2, shr(max3, 2));                                        
;----------------------------------------------------------------------
        ;RSBX      FRCT
        ;ST        #2,*SP(0)             ; |227| 
        ;CALLD     #_shr              ; |227| 
        ;NOP
        LDM       AR6,A
        NOP
        SFTA      A,-2
        
        ;SSBX      SXM
        ;RSBX      OVM
        LD        *FP(237),B
        LD        *(BL),16,B            ; |227| 
        ;SSBX      OVM
        ADD       *(AL),16,B,A          ; |227| 
        SFTA      A,-16,A               ; |227| 
        STL       A,*FP(237)
L33:    

;----------------------------------------------------------------------
; 232 | i = sub(shl(T1,1), T2);                                                
; 233 | j = sub(abs_s(i), 5);                                                  
;----------------------------------------------------------------------
        ;ST        #1,*SP(0)             
        ;RSBX      FRCT
        ;RSBX      OVM
        LD        *FP(242),A
        ;CALL      #_clshft              
        SFTA      A,1
        
        ;SSBX      SXM
        ;RSBX      OVM
        LD        *FP(243),B
        LD        *(AL),16,A           
        ;SSBX      OVM
        SUB       *(BL),16,A,A          
        SFTA      A,-16,B               

;----------------------------------------------------------------------
; 234 | if(j < 0)                                                              
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *(BL),16,A           
        ;SSBX      OVM
        NOP
        ABS       A,A                   
        ;RSBX      OVM
        SFTA      A,-16,A               
        LD        *(AL),A               
        SUB       #5,A,A                
        BC        L34,AGEQ              

;----------------------------------------------------------------------
; 235 | max1 = add(max1, mult(max2, 6554));                                    
;----------------------------------------------------------------------
        LD        #6554,16,A           
        SSBX      FRCT
        LD        *FP(237),T
        ;SSBX      OVM
        MVDK      *FP(238),*(AR2)
        MPYA      A                     ; |235| 
        ;RSBX      OVM
        SFTA      A,-16,A               ; |235| 
        STLM      A,AR1
        LD        *(AR2),16,A           ; |235| 
        ;SSBX      OVM
        ADD       *(AR1),16,A,A         ; |235| 
        SFTA      A,-16,A               ; |235| 
        STL       A,*FP(238)
L34:    

;----------------------------------------------------------------------
; 240 | i = add(i, T1);                                                        
; 241 | j = sub(abs_s(i), 7);                                                  
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *(BL),16,A            ; |240| 
        LD        *FP(242),B
        ;SSBX      OVM
        ADD       *(BL),16,A,A          ; |240| 
        SFTA      A,-16,B               ; |240| 

;----------------------------------------------------------------------
; 242 | if(j < 0)                                                              
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *(BL),16,A          
        ;SSBX      OVM
        NOP
        ABS       A,A                  
        ;RSBX      OVM
        SFTA      A,-16,A              
        LD        *(AL),A              
        SUB       #7,A,A               
        BC        L35,AGEQ             

;----------------------------------------------------------------------
; 243 | max1 = add(max1, mult(max2, 6554));                                    
;----------------------------------------------------------------------
        LD        #6554,16,A           
        SSBX      FRCT
        LD        *FP(237),T
        ;SSBX      OVM
        LD        *FP(238),B
        MPYA      A                    
        ;RSBX      OVM
        LD        *(BL),16,B           
        ;SSBX      OVM
        SFTA      A,-16,A              
        ADD       *(AL),16,B,A         
        SFTA      A,-16,A               
        STL       A,*FP(238)
L35:    

;----------------------------------------------------------------------
; 249 | if( sub(max1, max2) < 0 ) {max1 = max2; T1 = T2;  }                    
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *FP(238),A
        LD        *FP(237),B
        LD        *(AL),16,A           
        ;SSBX      OVM
        SUB       *(BL),16,A,A        
        SFTA      A,-16,A              
        LD        *(AL),A              
        BC        L36,AGEQ             

        LD        B,A
        STL       A,*FP(238)
        LD        *FP(243),A
        STL       A,*FP(242)
L36:    
;----------------------------------------------------------------------
; 250 | if( sub(max1, max3) <0 )  {T1 = T3; }                                  
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *FP(238),A
        LD        *(AL),16,A           
        ;SSBX      OVM
        SUB       *(AR6),16,A,A         
        SFTA      A,-16,A               
        LD        *(AL),A               
        BC        L37,AGEQ             

        LD        *FP(244),A
        STL       A,*FP(242)
L37:    
;----------------------------------------------------------------------
; 252 | return T1;                                                             
;----------------------------------------------------------------------
        LD        *FP(242),A

        ANDM      #-833,*(ST1)          
        ANDM      #-4,*(PMST)           
        RSBX      OVM
        ADDM      #246,*(SP)            
        NOP
        NOP
        POPM      FP                    
        POPM      AR6                   
        POPM      AR1                   
        RET       
        
	.sect	".text"
	.global	_Dot_Product
_Dot_Product:
        SSBX      SXM
        MVDK      *SP(1),*(AR2)    ; ar2 = y
        LD        *SP(2),B         ; b = lg
        STLM      A,AR3            ; ar3 = x
        LD        #0,A
        SUB       #1,B,B
        STLM      B,BRC
        SSBX      FRCT
        SSBX      OVM
        ORM       #2,*(PMST)
        NOP
        RPTB      L39-1    
L38:    
        MAC       *AR2+, *AR3+, A, A    
L39:    
        ANDM      #-833,*(ST1)         
        ANDM      #-4,*(PMST)           
        RET      

	.sect	".text"
	.global	_G_pitch

;----------------------------------------------------------------------
; 373 | Word16 G_pitch(      /* (o) Q14 : Gain of pitch lag saturated to 1.2
;     |     */                                                                 
; 374 | Word16 xn[],       /* (i)     : Pitch target.
;     |   */                                                                   
; 375 | Word16 y1[],       /* (i)     : Filtered adaptive codebook.
;     |   */                                                                   
; 376 | Word16 g_coeff[],  /* (i)     : Correlations need for gain quantization
;     | . */                                                                   
; 377 | Word16 L_subfr     /* (i)     : Length of subframe.
;     |   */                                                                   
; 378 | )                                                                      
;----------------------------------------------------------------------

_G_pitch:
        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-52
        NOP
        STL       A,*SP(48)          ; sp(48) = xn[]
        LD        *SP(58),A
        STL       A,*SP(49)          ; sp(49) = L_subfr
        LD        *SP(57),A
        STL       A,*SP(50)          ; sp(50) = g_coeff[]
        LD        *SP(56),A
        STL       A,*SP(51)          ; sp(51) = y1[]
;----------------------------------------------------------------------
; 388 | for(i=0; i<L_subfr; i++)                                               
;----------------------------------------------------------------------     
        SSBX      SXM
        SSBX      OVM
        NOP
        LD        *SP(49),A
        ;BC        L48,ALEQ            

        MVMM      SP,AR1
        MVDK      *SP(49),*(AR7)     ; ar7 = L_subfr
        MVDK      *SP(51),*(AR6)     ; ar6 = y1[]
        MAR       *+AR1(#8)          ; ar1 = scaled_y1[]
L47:    

;----------------------------------------------------------------------
; 389 | scaled_y1[i] = shr(y1[i], 2);                                          
;----------------------------------------------------------------------
        ;ST        #2,*SP(0)             
        ;RSBX      FRCT
        ;RSBX      OVM
        LD        *AR6+,A
        ;CALL      #_shr             
        SFTA      A,-2
        BANZD     L47,*+AR7(-1)        
        NOP
        STL       A,*AR1+
L48:    
        LD        *SP(51),A
        STL       A,*SP(0)
        ;RSBX      OVM
        STL       A,*SP(1)
        ;RSBX      FRCT
        LD        *SP(49),A
        ST        #0,*SP(2)              
        STL       A,*SP(3)
        LDM       SP,A
        ADD       #6,A
        ST        #1,*SP(4)             
        STL       A,*SP(5)
        CALLD     #_Verifi_Overflow     
        NOP
        LD        #1,A
        ; OVM = SXM = 1
        ;RSBX      OVM
        ;LD        *(AL),A               
        BC        L51,AEQ               

;----------------------------------------------------------------------
; 406 | s = 1;                  /* Avoid case of all zeros */                  
;----------------------------------------------------------------------
        LD        #1,A
        DST       A,*SP(6)              

;----------------------------------------------------------------------
; 407 | for(i=0; i<L_subfr; i++)                                               
;----------------------------------------------------------------------
        ;SSBX      SXM
        ;NOP
        LD        *SP(49),A
        ;BC        L50,ALEQ            

        ;LD        *SP(49),A

⌨️ 快捷键说明

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