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

📄 pitch_a_c_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        RSBX      FRCT
        DLD       *SP(10),A             
        CALL      #_Inv_sqrt            
        ; OVM = SXM = FRCT = 0
        DST       A,*SP(10)             

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

;----------------------------------------------------------------------
; 126 | 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
        ADD       #1,A
        STL       A,*SP(1)
        ;RSBX      FRCT
        DLD       *SP(10),A             
        CALL      #_L_Extract           

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

;----------------------------------------------------------------------
; 128 | max1 = extract_l(sum);                                                 
;----------------------------------------------------------------------
        LD        *SP(11),A
        STL       A,*FP(238)
        ;RSBX      OVM
        LD        *FP(236),A
        SUB       #40,A,A
        STLM      A,AR6                ; ar6 = scal_sig[-40]

;----------------------------------------------------------------------
; 132 | max = MIN_32;                                                          
;----------------------------------------------------------------------
        SSBX      SXM
        NOP
        LD        #-32768,16,A          
        DST       A,*FP(240)            

;----------------------------------------------------------------------
; 133 | T2  = 40;    /* Only to remove warning from some compilers */          
;----------------------------------------------------------------------
        LD        #40,A
        STL       A,*FP(243)            ; sp(243) = 40 = T2

;----------------------------------------------------------------------
; 134 | for (i = 40; i < 80; i++) {                                            
;----------------------------------------------------------------------
        STM       #40,AR1
        SSBX      FRCT      ; ****
        SSBX      OVM       ; ****
        ORM       #2,*(PMST)
L14:    

;----------------------------------------------------------------------
; 135 | p  = scal_sig;                                                         
;----------------------------------------------------------------------
        MVDK      *FP(236),*(AR2)
        MVMM      AR6,AR3
        LD        #0,A
        DST       A,*SP(10)            

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

        ;LD        *FP(235),A
        ADD       #1,A,A
        ;LD        *(AL),A
        SFTA      A,#-1,A
        SUB       #1,A          ; ****
        STLM      A,BRC
        ;SSBX      SXM
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        DLD       *SP(10),A     ; ****
        NOP
        RPTB      LOOP11-1
        
L15:    
;----------------------------------------------------------------------
; 139 | 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)             
LOOP11:
        DST       A,*SP(10) 
L16:    
;----------------------------------------------------------------------
; 140 | 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        L17,ALEQ              

;----------------------------------------------------------------------
; 141 | if (L_temp > 0) { max = sum; T2 = i;   }                               
;----------------------------------------------------------------------
        DLD       *SP(10),A             
        MVKD      *(AR1),*FP(243)
        DST       A,*FP(240)            
L17:    

        MAR       *AR1+
        LD        *(AR1),A               
        SUB       #80,A,A               
        BCD       L14,ALT               
        NOP
        MAR       *AR6-

;----------------------------------------------------------------------
; 146 | sum = 1;                   /* to avoid division by zero */             
;----------------------------------------------------------------------
        LD        #1,A
        DST       A,*SP(10)             

;----------------------------------------------------------------------
; 147 | p = &scal_sig[-T2];                                                    
;----------------------------------------------------------------------
        LD        *FP(243),B
        LD        *FP(236),A
        SUB       B,A                    
        STLM      A,AR1

;----------------------------------------------------------------------
; 148 | for(i=0; i<L_frame; i+=2, p+=2)                                        
;----------------------------------------------------------------------
        LD        *FP(235),A
        BC        L19,ALEQ              ; |148| 

        ;LD        *FP(235),A
        ADD       #1,A,A
        LD        *(AL),A
        SFTA      A,#-1,A
        SUB       #1,A
        STLM      A,BRC
        NOP
        ;FRCT = OVM = SXM = SMUL =1
        RPTB      LOOP12-1
        
L18:    

;----------------------------------------------------------------------
; 149 | 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)            
LOOP12:
        DST       A,*SP(10)  
L19:    

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

        DST       A,*SP(10)             

;----------------------------------------------------------------------
; 155 | L_Extract(max, &max_h, &max_l);                                        
;----------------------------------------------------------------------
        ;RSBX      OVM
        LDM       SP,A
        ADD       #6,A
        STL       A,*SP(0)
        ;LDM       SP,A
        ;ADD       #7,A
        ADD       #1,A
        STL       A,*SP(1)
        ;RSBX      FRCT
        DLD       *FP(240),A            
        CALL      #_L_Extract           
  
;----------------------------------------------------------------------
; 156 | 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
        ADD       #1,A
        STL       A,*SP(1)
        ;RSBX      FRCT
        DLD       *SP(10),A             
        CALL      #_L_Extract          

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

;----------------------------------------------------------------------
; 158 | max2 = extract_l(sum);                                                 
;----------------------------------------------------------------------
        LD        *SP(11),A
        STL       A,*FP(237)
        ;RSBX      OVM
        LD        *FP(236),A
        SUB       #80,A,A
        STLM      A,AR6

;----------------------------------------------------------------------
; 162 | max = MIN_32;                                                          
;----------------------------------------------------------------------
        SSBX      SXM
        NOP
        LD        #-32768,16,A         
        DST       A,*FP(240)            

;----------------------------------------------------------------------
; 163 | T3  = 80;    /* Only to remove warning from some compilers */          
;----------------------------------------------------------------------
        LD        #80,A
        STL       A,*FP(244)

;----------------------------------------------------------------------
; 164 | for (i = 80; i < 143; i+=2) {                                          
;----------------------------------------------------------------------
        STM       #80,AR1
        SSBX      FRCT
        SSBX      OVM
        ORM       #2,*(PMST)
L20:    
        MVDK      *FP(236),*(AR2)
        MVMM      AR6,AR3
        LD        #0,A
        DST       A,*SP(10)             

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

        ;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      SXM          
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        ;NOP
        RPTB      LOOP21-1
L21:    
;----------------------------------------------------------------------
; 169 | 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      

⌨️ 快捷键说明

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