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

📄 postfilt_asm_nok.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        ;RSBX      OVM
        ;NOP
        LD        *AR4+,16,A            ; |333| 
        ;SSBX      FRCT
        ;SSBX      OVM
        MVMD      AR5,T
        MPYA      A                     ; |333| 
        ;RSBX      OVM
        SFTA      A,-16,B               ; |333| 
        LD        *AR1+,16,A            ; |333| 
        ;SSBX      OVM
        MVMD      AR3,T
        MPYA      A                     ; |333| 
        ADD       *(BL),16,A,A          ; |333| 
        STH       A,*AR2+               ; |333| 

L19:    
        B         L22                   ; |335| 
        
L20:    

        LD        *SP(4),A
        BC        L22,ALEQ              ; |302| 

        LD        *SP(4),A
        SUB       #1,A,A
        MVDK      *SP(3),*(AR2)
        STLM      A,BRC
        MVDK      *SP(2),*(AR3)
        RPTB      L22-1
        
L21:    

        MVDD      *AR3+,*AR2+           ; |303| 
        
L22:    

        ANDM      #-833,*(ST1)
        ANDM      #-4,*(PMST)
        FRAME     #16
        POPM      AR7
        POPM      AR6
        POPM      AR1
        RET




	.sect	".text"
	.global	_agc

;----------------------------------------------------------------------
; 382 | void agc(                                                              
; 383 | Word16 *sig_in,   /* (i)     : postfilter input signal  */             
; 384 | Word16 *sig_out,  /* (i/o)   : postfilter output signal */             
; 385 | Word16 l_trm      /* (i)     : subframe size            */             
; 386 | )                                                                      
;----------------------------------------------------------------------

_agc:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-48
        NOP
;----------------------------------------------------------------------
; 388 | static Word16 past_gain=4096;         /* past_gain = 1.0 (Q12) */      
; 389 | Word16 i, exp;                                                         
; 390 | Word16 gain_in, gain_out, g0, gain;                     /* Q12 */      
; 391 | Word32 s;                                                              
; 393 | Word16 signal[L_SUBFR];                                                
;----------------------------------------------------------------------
        STL       A,*SP(42)
        LD        *SP(53),A
        STL       A,*SP(43)
        LD        *SP(52),A
        STL       A,*SP(44)
;----------------------------------------------------------------------
; 397 | for(i=0; i<l_trm; i++)                                                 
;----------------------------------------------------------------------
        SSBX      SXM
        SSBX      OVM
        SSBX      FRCT
        NOP
        LD        *SP(43),A
        BC        L24,ALEQ              ; |397| 

        MVMM      SP,AR1
        MVDK      *SP(43),*(AR7)
        MVDK      *SP(44),*(AR6)
        MAR       *+AR1(#2)
L23:    
;----------------------------------------------------------------------
; 398 | signal[i] = shr(sig_out[i], 2);                                        
;----------------------------------------------------------------------
        ;ST        #2,*SP(0)             ; |398| 
        ;RSBX      FRCT
        ;RSBX      OVM
        LD        *AR6+,A
        ;CALL      #_crshft              ; |398| 
        SFTA      A,-2
        
        BANZD     L23,*+AR7(-1)         ; |398| 
        NOP
        STL       A,*AR1+
L24:    
;----------------------------------------------------------------------
; 400 | s = 0;                                                                 
;----------------------------------------------------------------------
        LD        #0,A
;----------------------------------------------------------------------
; 401 | for(i=0; i<l_trm; i++)                                                 
;----------------------------------------------------------------------
        ;SSBX      SXM
        ;NOP
        LD        *SP(43),B
        BC        L26,BLEQ              ; |401| 

        ;RSBX      OVM
        LD        *SP(43),B
        MVMM      SP,AR1
        SUB       #1,B,B
        STLM      B,BRC
        MAR       *+AR1(#2)
        RPTB      L26-1

L25:    
;----------------------------------------------------------------------
; 402 | s = L_mac(s, signal[i], signal[i]);                                    
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *AR1+,B
        ;SFTA      A,8                   ; |402| 
        STLM      B,T
        ;SFTA      A,-8                  ; |402| 
        ;ORM       #2,*(PMST)
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        MAC       *(BL), A              ; |402| 
L26:    
;----------------------------------------------------------------------
; 404 | if (s == 0) {                                                          
; 405 |   past_gain = 0;                                                       
; 406 |   return;                                                              
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        A,B                   ; |404| 
        ;SFTA      B,8                   ; |404| 
        ;SFTA      B,-8                  ; |404| 
        BC        L35,BEQ               ; |404| 
;----------------------------------------------------------------------
; 408 | exp = sub(norm_l(s), 1);                                               
;----------------------------------------------------------------------
        LD        A,B                   ; |408| 
        ;SFTA      B,8                   ; |408| 
        ;SFTA      B,-8                  ; |408| 
        EXP       B                     ; |408| 
        LD        *(T),16,B             ; |408| 
        ;SSBX      OVM
        ;NOP
        SUB       #1,16,B,B             ; |408| 
        SFTA      B,-16,B               ; |408| 
        STL       B,*SP(45)

;----------------------------------------------------------------------
; 409 | gain_out = round(L_shl(s, exp));                                       
;----------------------------------------------------------------------
        ;RSBX      FRCT
        ;RSBX      OVM
        STL       B,*SP(0)
        CALL      #_L_shl               ; |409| 
        
        RSBX      OVM
        SSBX      SXM
        SFTA      A,8                   ; |409| 
        SFTA      A,-8                  ; |409| 
        SSBX      OVM
        ADD       #1,#15,A,A            ; |409| 
        SFTA      A,-16,A               ; |409| 
        STL       A,*SP(46)
;----------------------------------------------------------------------
; 413 | for(i=0; i<l_trm; i++)                                                 
;----------------------------------------------------------------------
        LD        *SP(43),A
        BC        L28,ALEQ              ; |413| 

        MVMM      SP,AR1
        MVDK      *SP(43),*(AR7)
        MVDK      *SP(42),*(AR6)
        MAR       *+AR1(#2)
L27:    
;----------------------------------------------------------------------
; 414 | signal[i] = shr(sig_in[i], 2);                                         
;----------------------------------------------------------------------
        ;ST        #2,*SP(0)             ; |414| 
        ;RSBX      FRCT
        ;RSBX      OVM
        LD        *AR6+,A
        ;CALL      #_crshft              ; |414| 
        SFTA      A,-2
        
        BANZD     L27,*+AR7(-1)         ; |414| 
        NOP
        STL       A,*AR1+
        
L28:    
;----------------------------------------------------------------------
; 416 | s = 0;                                                                 
;----------------------------------------------------------------------
        LD        #0,A
;----------------------------------------------------------------------
; 417 | for(i=0; i<l_trm; i++)                                                 
;----------------------------------------------------------------------
        ;SSBX      SXM
        ;NOP
        LD        *SP(43),B
        BC        L30,BLEQ              ; |417| 

        ;RSBX      OVM
        LD        *SP(43),B
        MVMM      SP,AR1
        SUB       #1,B,B
        STLM      B,BRC
        MAR       *+AR1(#2)
        SSBX      FRCT
        RPTB      L30-1
L29:    
;----------------------------------------------------------------------
; 418 | s = L_mac(s, signal[i], signal[i]);                                    
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *AR1+,B
        ;SFTA      A,8                   ; |418| 
        STLM      B,T
        ;SFTA      A,-8                  ; |418| 
        ;ORM       #2,*(PMST)
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        MAC       *(BL), A              ; |418| 
        
L30:    

;----------------------------------------------------------------------
; 420 | if (s == 0) {                                                          
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        A,B                   ; |420| 
        ;SFTA      B,8                   ; |420| 
        ;SFTA      B,-8                  ; |420| 
        BC        L31,BNEQ              ; |420| 

;----------------------------------------------------------------------
; 421 | g0 = 0;                                                                
;----------------------------------------------------------------------
        LD        #0,A
        STL       A,*SP(46)

;----------------------------------------------------------------------
; 423 | else {                                                                 
; 424 |   i = norm_l(s);                                                       
;----------------------------------------------------------------------
        B         L32                   ; |422| 
        ; branch occurs ; |422| 
L31:    
;----------------------------------------------------------------------
; 425 | gain_in = round(L_shl(s, i));                                          
;----------------------------------------------------------------------
        LD        A,B                   ; |425| 
        ;SFTA      B,8                   ; |425| 
        ;SFTA      B,-8                  ; |425| 
        EXP       B                     ; |425| 
        RSBX      FRCT
        MVMD      T,AR1
        MVKD      *(AR1),*SP(0)
        CALL      #_L_shl               ; |425| 
        
        RSBX      OVM
        SSBX      SXM
        SFTA      A,8                   ; |425| 
        SSBX      OVM
        SFTA      A,-8                  ; |425| 
        ADD       #1,#15,A,A            ; |425| 
        SFTA      A,-16,B               ; |425| 
;----------------------------------------------------------------------
; 426 | exp = sub(exp, i);                                                     
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *SP(45),A
        LD        *(AL),16,A            ; |426| 
        ;SSBX      OVM
        SUB       *(AR1),16,A,A         ; |426| 
        SFTA      A,-16,A               ; |426| 
        STL       A,*SP(45)
;----------------------------------------------------------------------
; 432 | s = L_deposit_l(div_s(gain_out,gain_in));   /* Q15 */                  
;----------------------------------------------------------------------
        RSBX      FRCT
        LD        *SP(46),A
        RSBX      OVM
        STL       B,*SP(0)
        CALL      #_divs                ; |432| 

        SSBX      SXM
        LD        *(AL),A               ; |432| 
        SSBX      OVM
;----------------------------------------------------------------------
; 433 | s = L_shl(s, 7);           /* s(Q22) = gain_out / gain_in */           
;----------------------------------------------------------------------
        ;RSBX      FRCT
        ;RSBX      OVM
        ;ST        #7,*SP(0)             ; |433| 
        ;CALL      #_L_shl               ; |433| 
        SFTA       A,7

;----------------------------------------------------------------------
; 434 | s = L_shr(s, exp);         /* Q22, add exponent */                     
;----------------------------------------------------------------------
        LD        *SP(45),B

⌨️ 快捷键说明

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