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

📄 postfilt_asm_nok.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 5 页
字号:
L8:    
;----------------------------------------------------------------------
; 264 | ener = L_mac(ener, *p, *p);                                            
; 268 | ener0 = 1;                                                             
;----------------------------------------------------------------------
        LD        *AR1+,B
        ;RSBX      OVM
        STLM      B,T
        ;DLD       *SP(12),A
        ;ORM       #2,*(PMST)
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        MAC       *(BL), A              ; |264| 
        ;DST       A,*SP(12)             ; |264| 
LOOP_2:
        DST       A,*SP(12)        
L9:    

;----------------------------------------------------------------------
; 269 | p = scal_sig;                                                          
;----------------------------------------------------------------------
        MVMM      AR6,AR2

        LD        #1,A
        DST       A,*SP(14)             ; |268| 

;----------------------------------------------------------------------
; 270 | for ( i=0; i<L_subfr; i++, p++)                                        
;----------------------------------------------------------------------
        LD        *SP(4),A
        BC        L11,ALEQ              ; |270| 

        ;RSBX      OVM
        LD        *SP(4),A
        SUB       #1,A,A
        STLM      A,BRC
        DLD       *SP(14),A             ; ****
        NOP
        RPTB      LOOP_3-1
L10:    
;----------------------------------------------------------------------
; 271 | ener0 = L_mac(ener0, *p, *p);                                          
;----------------------------------------------------------------------
        LD        *AR2+,B
        ;RSBX      OVM
        STLM      B,T
        ;DLD       *SP(14),A
        ;ORM       #2,*(PMST)
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        MAC       *(BL), A               ; |271| 
        ;DST       A,*SP(14)             ; |271| 
LOOP_3:
	    DST       A,*SP(14)
L11:    
;----------------------------------------------------------------------
; 273 | if (cor_max < 0)                                                       
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;NOP
        DLD       *SP(8),A
        BC        L12,AGEQ              ; |273| 

;----------------------------------------------------------------------
; 275 | cor_max = 0;                                                           
;----------------------------------------------------------------------
        LD        #0,A
        DST       A,*SP(8)              ; |275| 
L12:    
;----------------------------------------------------------------------
; 280 | temp = cor_max;                                                        
;----------------------------------------------------------------------
        DLD       *SP(8),A
        DST       A,*SP(10)             ; |280| 
;----------------------------------------------------------------------
; 281 | if (ener > temp)                                                       
;----------------------------------------------------------------------
        LD        A,B
        ;SFTA      B,8                   ; |281| 
        DLD       *SP(12),A             ; |281| 
        ;SFTA      B,-8                  ; |281| 
        SUB       A,B                   ; |281| 
        BCD       L13,BGEQ              ; |281| 
        NOP
        DST       A,*SP(12)             ; |281| 
;----------------------------------------------------------------------
; 283 | temp = ener;                                                           
;----------------------------------------------------------------------
        DST       A,*SP(10)             ; |283| 
L13:    
;----------------------------------------------------------------------
; 285 | if (ener0 > temp)                                                      
;----------------------------------------------------------------------
        DLD       *SP(14),A             ; |285| 
        DLD       *SP(10),B
        SUB       A,B                   ; |285| 
        BCD       L14,BGEQ              ; |285| 
        NOP
        DST       A,*SP(14)             ; |285| 

;----------------------------------------------------------------------
; 287 | temp = ener0;                                                          
; 289 | j = norm_l(temp);                                                      
;----------------------------------------------------------------------
        DST       A,*SP(10)             ; |287| 
L14:    
;----------------------------------------------------------------------
; 290 | cmax = round(L_shl(cor_max, j));                                       
;----------------------------------------------------------------------
        DLD       *SP(10),A
        EXP       A                     ; |290| 
        RSBX      FRCT
        MVMD      T,AR7
        MVKD      *(AR7),*SP(0)
        DLD       *SP(8),A              ; |290| 
        CALL      #_L_shl               ; |290| 
        
        RSBX      OVM
        SSBX      SXM
        SFTA      A,8                   ; |290| 
        SSBX      OVM
        SFTA      A,-8                  ; |290| 
        ADD       #1,#15,A,A            ; |290| 
        SFTA      A,-16,A               ; |290| 
        STLM      A,AR1
;----------------------------------------------------------------------
; 291 | en = round(L_shl(ener, j));                                            
;----------------------------------------------------------------------
        MVKD      *(AR7),*SP(0)
        ;RSBX      OVM
        ;RSBX      FRCT
        DLD       *SP(12),A             ; |291| 
        CALL      #_L_shl               ; |291| 
        
        RSBX      OVM
        SSBX      SXM
        SFTA      A,8                   ; |291| 
        SFTA      A,-8                  ; |291| 
        SSBX      OVM
        ADD       #1,#15,A,A            ; |291| 
        SFTA      A,-16,A               ; |291| 
        STLM      A,AR6

;----------------------------------------------------------------------
; 292 | en0 = round(L_shl(ener0, j));                                          
; 297 | temp = L_mult(cmax, cmax);                                             
;----------------------------------------------------------------------
        ;RSBX      OVM
        MVKD      *(AR7),*SP(0)
        ;RSBX      FRCT
        DLD       *SP(14),A             ; |292| 
        CALL      #_L_shl               ; |292| 
        
        RSBX      OVM
        SSBX      SXM
        SFTA      A,8                   ; |292| 
        SFTA      A,-8                  ; |292| 
        SSBX      OVM
        ADD       #1,#15,A,A            ; |292| 
        SFTA      A,-16,A               ; |292| 

;----------------------------------------------------------------------
; 298 | temp = L_sub(temp, L_shr(L_mult(en, en0), 1));                         
; 300 | if (temp < (Word32)0)           /* if prediction gain < 3 dB   */      
; 302 |   for (i = 0; i < L_subfr; i++)                                        
; 303 |     signal_pst[i] = signal[i];                                         
; 304 |   return;                                                              
;----------------------------------------------------------------------
        SSBX      FRCT
        STLM      A,T
        MPY       *(AR6),A              ; |298| 
        ;RSBX      OVM
        ;RSBX      FRCT
        ;ST        #1,*SP(0)             ; |298| 
        ;CALL      #_L_shr               ; |298| 
        SFTA       A,-1
        
        DST       A,*SP(0)              ; |298| 
        MVMD      AR1,T
        ;SSBX      FRCT
        ;SSBX      OVM
        MPY       *(AR1),A              ; |298| 
        ;RSBX      FRCT
        ;RSBX      OVM
        ;NOP
        ;CALL      #_L_sub               ; |298| 
        DSUB      *SP(0),A
        
        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                   ; |298| 
        ;SFTA      A,-8                  ; |298| 
        BC        L20,ALT               ; |298| 

;----------------------------------------------------------------------
; 307 | if (sub(cmax, en) > 0)      /* if pitch gain > 1 */                    
; 309 |   g0 = INV_GAMMAP;                                                     
; 310 |   gain = GAMMAP_2;                                                     
; 312 | else {                                                                 
;----------------------------------------------------------------------
        LD        *(AR1),16,A           ; |307| 
        ;SSBX      OVM
        SUB       *(AR6),16,A,A         ; |307| 
        SFTA      A,-16,A               ; |307| 
        LD        *(AL),A               ; |307| 
        BC        L16,AGT               ; |307| 
;----------------------------------------------------------------------
; 313 | cmax = shr(mult(cmax, GAMMAP), 1);  /* cmax(Q14) = cmax(Q15) * GAMMAP *
;     | /                                                                      
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;NOP
        LD        #16384,16,A           ; |313| 
        ;SSBX      FRCT
        ;SSBX      OVM
        MVMD      AR1,T
        MPYA      A                     ; |313| 
        ;RSBX      FRCT
        ;RSBX      OVM
        ;ST        #1,*SP(0)             ; |313| 
        ;CALLD     #_crshft              ; |313| 
        SFTA       A,-1
        NOP
        SFTA      A,-16,A               ; |313| 

        STLM      A,AR1
;----------------------------------------------------------------------
; 314 | en = shr(en, 1);          /* Q14 */                                    
;----------------------------------------------------------------------
        ;RSBX      FRCT
        ;RSBX      OVM
        ;ST        #1,*SP(0)             ; |314| 
        ;CALLD     #_crshft              ; |314| 
        SFTA       A,-1
        NOP
        LDM       AR6,A
   
        STLM      A,AR6

;----------------------------------------------------------------------
; 315 | i = add(cmax, en);                                                     
; 316 | if(i > 0)                                                              
; 318 |   gain = div_s(cmax, i);    /* gain(Q15) = cor_max/(cor_max+ener)  */  
; 319 |   g0 = sub(32767, gain);    /* g0(Q15) = 1 - gain */                   
; 321 | else                                                                   
;----------------------------------------------------------------------
        ;SSBX      SXM
        ;RSBX      OVM
        LD        *(AR1),16,A           ; |315| 
        ;SSBX      OVM
        ADD       *(AR6),16,A,A         ; |315| 
        SFTA      A,-16,A               ; |315| 
        LD        *(AL),A               ; |315| 
        BC        L15,AGT               ; |315| 

;----------------------------------------------------------------------
; 323 | g0 =  32767;                                                           
;----------------------------------------------------------------------
        LD        #32767,A
        STLM      A,AR3

;----------------------------------------------------------------------
; 324 | gain = 0;                                                              
;----------------------------------------------------------------------
        BD        L17                   ; |324| 
        STM       #0,AR5
        
L15:    
        RSBX      FRCT
        RSBX      OVM
        STL       A,*SP(0)
        CALLD     #_divs                ; |318| 
        NOP
        LDM       AR1,A
        
        STLM      A,AR5

        RSBX      OVM
        NOP
        LD        #32767,16,A           ; |319| 
        SSBX      SXM
        SSBX      OVM
        SUB       *(AR5),16,A,A         ; |319| 
        SFTA      A,-16,A               ; |319| 
        STLM      A,AR3

        B         L17                   ; |320| 
       
L16:    

        LD        #21845,A
        STLM      A,AR3
        NOP
        STM       #10923,AR5
L17:    
;----------------------------------------------------------------------
; 329 | for (i = 0; i < L_subfr; i++)                                          
;----------------------------------------------------------------------
        LD        *SP(4),A
        BC        L22,ALEQ              ; |329| 

        RSBX      OVM
        LD        *SP(5),B
        LD        *SP(2),A
        SUB       B,A
        MVDK      *SP(3),*(AR2)
        STLM      A,AR4
        LD        *SP(4),A
        SUB       #1,A,A
        STLM      A,BRC
        MVDK      *SP(2),*(AR1)
        SSBX      OVM
        SSBX      SXM
        SSBX      FRCT
        RPTB      L19-1
L18:    
;----------------------------------------------------------------------
; 333 | signal_pst[i] = add(mult(g0, signal[i]), mult(gain, signal[i-t0]));    
;----------------------------------------------------------------------

⌨️ 快捷键说明

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