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

📄 pitch_a_c_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        MAR       *+AR3(#2)
        MAR       *+AR2(#2)
        ;DST       A,*SP(10)             
LOOP21:
		DST       A,*SP(10)
L22:    
;----------------------------------------------------------------------
; 170 | L_temp = L_sub(sum, max);                                              
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;DLD       *FP(240),A
        ;RSBX      FRCT
        ;DST       A,*SP(0)              
        DLD       *SP(10),A             
        ;CALL      #_L_sub               
        DSUB      *FP(240),A
             
        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                   
        ;SFTA      A,-8                 
        BC        L23,ALEQ              

;----------------------------------------------------------------------
; 171 | if (L_temp > 0) { max = sum; T3 = i;   }                               
;----------------------------------------------------------------------
        DLD       *SP(10),A             
        MVKD      *(AR1),*FP(244)
        DST       A,*FP(240)            
L23:    

        MAR       *+AR1(#2)
        LD        *(AR1),A              
        SUB       #143,A,A              
        BCD       L20,ALT      
         
        MAR       *+AR6(#-2)
;----------------------------------------------------------------------
; 176 | i = T3;                                                                
;----------------------------------------------------------------------
        MVDK      *FP(244),*(AR1)       ; sp(244) = T3 = ar1 = i
;----------------------------------------------------------------------
; 177 | p  = scal_sig;                                                         
;----------------------------------------------------------------------
        MVDK      *FP(236),*(AR2)
;----------------------------------------------------------------------
; 178 | p1 = &scal_sig[-(i+1)];                                                
;----------------------------------------------------------------------
        LDM       AR1,A                 
        ADD       #1,A,B                
        LDM       AR2,A
        SUB       B,A                    
        STLM      A,AR3                 ; ar3 = p1

;----------------------------------------------------------------------
; 179 | sum = 0;                                                               
;----------------------------------------------------------------------
        LD        #0,A
        DST       A,*SP(10)             ; |179| 

;----------------------------------------------------------------------
; 180 | for (j=0; j<L_frame; j+=2, p+=2, p1+=2)                                
;----------------------------------------------------------------------
        LD        *FP(235),A
        BC        L25,ALEQ              ; |180| 

        ;LD        *FP(235),A
        ADD       #1,A,A
        LD        *(AL),A
        SFTA      A,#-1,A
        SUB       #1,A
        STLM      A,BRC
        DLD       *SP(10),A        ; ****
        NOP
        RPTB      LOOP22-1
        
L24:    
;----------------------------------------------------------------------
; 181 | sum = L_mac(sum, *p, *p1);                                             
;----------------------------------------------------------------------
        ;DLD       *SP(10),A             
        ;ORM       #2,*(PMST)
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        ;NOP
        MAC       *AR3, *AR2, A, A      
        MAR       *+AR3(#2)
        MAR       *+AR2(#2)
        ;DST       A,*SP(10)             
LOOP22:
  		DST       A,*SP(10)    
L25:    
;----------------------------------------------------------------------
; 182 | L_temp = L_sub(sum, max);                                              
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;DLD       *FP(240),A
        ;RSBX      FRCT
        ;DST       A,*SP(0)              
        DLD       *SP(10),A             
        ;CALL      #_L_sub               
        DSUB      *FP(240),A
        
        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                   
        ;SFTA      A,-8                  
        BC        L26,ALEQ              

;----------------------------------------------------------------------
; 183 | if (L_temp > 0) { max = sum; T3 = i+(Word16)1;   }                     
;----------------------------------------------------------------------
        DLD       *SP(10),A             
        DST       A,*FP(240)            
        LDM       AR1,A
        ADD       #1,A,A                
        STL       A,*FP(244)
L26:    

;----------------------------------------------------------------------
; 185 | p  = scal_sig;                                                         
;----------------------------------------------------------------------
        ; OVM = FRCT = SXM = 1
        MVDK      *FP(236),*(AR2)

;----------------------------------------------------------------------
; 186 | p1 = &scal_sig[-(i-1)];                                                
;----------------------------------------------------------------------
        LDM       AR1,A
        SUB       #1,A,A                
        STLM      A,AR1
        NOP
        LDM       AR1,B
        LDM       AR2,A
        SUB       B,A                   
        STLM      A,AR3                ; ar3 = p1 = &scal_sig[-(i-1)]

;----------------------------------------------------------------------
; 187 | sum = 0;                                                               
;----------------------------------------------------------------------
        LD        #0,A
        DST       A,*SP(10)             

;----------------------------------------------------------------------
; 188 | for (j=0; j<L_frame; j+=2, p+=2, p1+=2)                                
;----------------------------------------------------------------------
        LD        *FP(235),A
        BC        L28,ALEQ              ; |188| 

        ;LD        *FP(235),A
        ADD       #1,A,A
        LD        *(AL),A
        SFTA      A,#-1,A
        SUB       #1,A
        STLM      A,BRC
        DLD       *SP(10),A

        ;SSBX      FRCT                  ; ****
        ;SSBX      OVM                   ; ****
        ;ORM       #2,*(PMST)            ; ****
        ;NOP
        RPTB      LOOP31-1
        
L27:    
;----------------------------------------------------------------------
; 189 | sum = L_mac(sum, *p, *p1);                                             
;----------------------------------------------------------------------
        ;DLD       *SP(10),A              
        ;ORM       #2,*(PMST)
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        ;NOP
        MAC       *AR3, *AR2, A, A       
        MAR       *+AR3(#2)
        MAR       *+AR2(#2)
        ;DST       A,*SP(10)             
LOOP31:
        DST       A,*SP(10) 
L28:    
;----------------------------------------------------------------------
; 190 | L_temp = L_sub(sum, max);                                              
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;DLD       *FP(240),A
        ;RSBX      FRCT
        ;DST       A,*SP(0)              
        DLD       *SP(10),A             
        ;CALL      #_L_sub               
        DSUB      *FP(240),A
        
        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                   
        ;SFTA      A,-8                  
        BC        L29,ALEQ              

;----------------------------------------------------------------------
; 191 | if (L_temp > 0) { max = sum; T3 = i-(Word16)1;   }                     
;----------------------------------------------------------------------
        DLD       *SP(10),A             
        MVKD      *(AR1),*FP(244)
        DST       A,*FP(240)            
L29:    
;----------------------------------------------------------------------
; 195 | sum = 1;                   /* to avoid division by zero */             
;----------------------------------------------------------------------
        LD        #1,A
        DST       A,*SP(10)             

;----------------------------------------------------------------------
; 196 | p = &scal_sig[-T3];                                                    
;----------------------------------------------------------------------
        LD        *FP(244),B
        LD        *FP(236),A
        SUB       B,A                   
        STLM      A,AR1             ; ar1 = p 
;----------------------------------------------------------------------
; 197 | for(i=0; i<L_frame; i+=2, p+=2)                                        
;----------------------------------------------------------------------
        LD        *FP(235),A
        BC        L31,ALEQ             
     
        ADD       #1,A,A
        LD        *(AL),A
        SFTA      A,#-1,A
        SUB       #1,A
        STLM      A,BRC
        DLD       *SP(10),A ; ****
        NOP
        RPTB      LOOP32-1
       
L30:    
;----------------------------------------------------------------------
; 198 | sum = L_mac(sum, *p, *p);                                              
;----------------------------------------------------------------------
        LD        *AR1,B
        ;DLD       *SP(10),A            
        STLM      B,T
        ;ORM       #2,*(PMST)
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        MAR       *+AR1(#2)
        MAC       *(BL), A              
        ;DST       A,*SP(10)              
LOOP32:
		DST       A,*SP(10)
L31:    

;----------------------------------------------------------------------
; 203 | sum = Inv_sqrt(sum);            /* 1/sqrt(energy),    result in Q30 */ 
;----------------------------------------------------------------------
        RSBX      OVM
        RSBX      FRCT
        DLD       *SP(10),A             ; |203| 
        CALL      #_Inv_sqrt            ; |203| 
       
        DST       A,*SP(10)             ; |203| 

;----------------------------------------------------------------------
; 204 | L_Extract(max, &max_h, &max_l);                                        
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;RSBX      FRCT
        LDM       SP,A
        ADD       #6,A
        STL       A,*SP(0)
        LDM       SP,A
        ADD       #7,A
        STL       A,*SP(1)
        DLD       *FP(240),A            ; |204| 
        CALL      #_L_Extract           ; |204| 

;----------------------------------------------------------------------
; 205 | L_Extract(sum, &ener_h, &ener_l);                                      
;----------------------------------------------------------------------
        ;RSBX      OVM
        LDM       SP,A
        ADD       #8,A
        STL       A,*SP(0)
        LDM       SP,A
        ADD       #9,A
        STL       A,*SP(1)
        ;RSBX      FRCT
        DLD       *SP(10),A             ; |205| 
        CALL      #_L_Extract           ; |205| 

;----------------------------------------------------------------------
; 206 | sum  = Mpy_32(max_h, max_l, ener_h, ener_l);                           
;----------------------------------------------------------------------
        LD        *SP(7),A
        STL       A,*SP(0)
        ;RSBX      FRCT
        LD        *SP(8),A
        STL       A,*SP(1)
        LD        *SP(9),A
        STL       A,*SP(2)
        ;RSBX      OVM
        LD        *SP(6),A
        CALL      #_Mpy_32              ; |206| 
        
        DST       A,*SP(10)             ; |206| 

;----------------------------------------------------------------------
; 207 | max3 = extract_l(sum);                                                 
;----------------------------------------------------------------------
        MVDK      *SP(11),*(AR6)

;----------------------------------------------------------------------
; 216 | i = sub(shl(T2,1), T3);                                                
; 217 | j = sub(abs_s(i), 5);                                                  
;----------------------------------------------------------------------
        SSBX      SXM    ; ****
        SSBX      OVM    ; ****
        NOP
        ;ST        #1,*SP(0)             ; |216| 
        ;RSBX      FRCT
        ;RSBX      OVM
        LD        *FP(243),A
        ;CALL      #_clshft              ; |216| 
        SFTA      A,1
        
        ;RSBX      OVM
        LD        *FP(244),B
        ;SSBX      SXM
        LD        *(AL),16,A            ; |216| 
        ;SSBX      OVM
        SUB       *(BL),16,A,A          ; |216| 
        SFTA      A,-16,A               ; |216| 
        STLM      A,AR1

;----------------------------------------------------------------------
; 218 | if(j < 0)                                                              
;----------------------------------------------------------------------

⌨️ 快捷键说明

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