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

📄 postfilt_asm_nok.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        ;RSBX      FRCT
        ;RSBX      OVM
        STL       B,*SP(0)
        CALL      #_L_shr               ; |434| 

;----------------------------------------------------------------------
; 437 | s = Inv_sqrt(s);           /* Q19 */                                   
;----------------------------------------------------------------------
        RSBX      FRCT
        RSBX      OVM
        NOP
        CALL      #_Inv_sqrt            ; |437| 

;----------------------------------------------------------------------
; 438 | i = round(L_shl(s,9));     /* Q12 */                                   
;----------------------------------------------------------------------
        SSBX      SXM
        SSBX      OVM
        NOP
        ;RSBX      FRCT
        ;RSBX      OVM
        ;ST        #9,*SP(0)             ; |438| 
        ;CALL      #_L_shl               ; |438| 
        SFTA      A,9
        
        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                   ; |438| 
        ;SFTA      A,-8                  ; |438| 
        ;SSBX      OVM
        ADD       #1,#15,A,A            ; |438| 
        SFTA      A,-16,B               ; |438| 

;----------------------------------------------------------------------
; 441 | g0 = mult(i, AGC_FAC1);       /* Q12 */                                
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;NOP
        LD        #3276,16,A            ; |441| 
        ;SSBX      OVM
        STLM      B,T
        SSBX      FRCT
        NOP
        MPYA      A                     ; |441| 
        SFTA      A,-16,A               ; |441| 
        STL       A,*SP(46)
L32:    
;----------------------------------------------------------------------
; 447 | gain = past_gain;                                                      
;----------------------------------------------------------------------
        MVDM      *(_past_gain$2),AR1
;----------------------------------------------------------------------
; 448 | for(i=0; i<l_trm; i++) {                                               
;----------------------------------------------------------------------
        LD        *SP(43),A
        BC        L34,ALEQ              ; |448| 

        MVDK      *SP(43),*(AR7)
        MVDK      *SP(44),*(AR6)
L33:    
;----------------------------------------------------------------------
; 449 | gain = mult(gain, AGC_FAC);                                            
; 450 | gain = add(gain, g0);                                                  
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;SSBX      FRCT
        ;SSBX      SXM
        MVMD      AR1,T
        LD        #29491,16,A           ; |449| 
        ;SSBX      OVM
        LD        *SP(46),B
        MPYA      A                     ; |449| 
        ADD       *(BL),16,A,A          ; |449| 
        SFTA      A,-16,A               ; |449| 
        STLM      A,AR1
;----------------------------------------------------------------------
; 451 | sig_out[i] = extract_h(L_shl(L_mult(sig_out[i], gain), 3));            
;----------------------------------------------------------------------
        ;ST        #3,*SP(0)             ; |451| 
        MVMD      AR1,T
        MPY       *AR6,A                ; |451| 
        ;RSBX      FRCT
        ;RSBX      OVM
        ;NOP
        ;CALL      #_L_shl               ; |451| 
        SFTA      A,3
        
        SFTL      A,#-16,A              ; |451| 
        STL       A,*AR6+               ; |451| 
        BANZ      L33,*+AR7(-1)         ; |452| 
        
L34:    

;----------------------------------------------------------------------
; 453 | past_gain = gain;                                                      
;----------------------------------------------------------------------
        MVMD      AR1,*(_past_gain$2)
;----------------------------------------------------------------------
; 455 | return;                                                                
;----------------------------------------------------------------------
        B         L36                   ; |455| 
       
L35:    

        ST        #0,*(_past_gain$2)    ; |405| 
L36:    
        ANDM      #-833,*(ST1)
        ANDM      #-4,*(PMST)
        FRAME     #48
        POPM      AR7
        POPM      AR6
        POPM      AR1
        RET




	.sect	".text"
	.global	_Post_Filter
;----------------------------------------------------------------------
;  90 | void Post_Filter(                                                      
;  91 | Word16 *syn,       /* in/out: synthesis speech (postfiltered is output)
;     |     */                                                                 
;  92 | Word16 *Az_4,      /* input : interpolated LPC parameters in all subfra
;     | mes */                                                                 
;  93 | Word16 *T          /* input : decoded pitch lags in all subframes
;     |     */                                                                 
;  94 | )                                                                      
;----------------------------------------------------------------------
_Post_Filter:

        PSHM      AR1
        RSBX      OVM
        PSHM      AR6
        PSHM      FP
        ADDM      #-178,*(SP)
        NOP
        NOP
        MVMM      SP,FP
;----------------------------------------------------------------------
; 100 | Word16 res2_pst[L_SUBFR];  /* res2[] after pitch postfiltering */      
; 101 | Word16 syn_pst[L_FRAME];   /* post filtered synthesis speech   */      
; 103 | Word16 Ap3[MP1], Ap4[MP1];  /* bandwidth expanded LP parameters */     
; 105 | Word16 *Az;                 /* pointer to Az_4:                 */     
; 107 | Word16   t0_max, t0_min;    /* closed-loop pitch search range   */     
; 108 | Word16   i_subfr;           /* index for beginning of subframe  */     
; 110 | Word16 h[L_H];                                                         
; 112 | Word16  i, j;                                                          
; 113 | Word16  temp1, temp2;                                                  
; 114 | Word32  L_tmp;                                                         
;----------------------------------------------------------------------
        STL       A,*FP(170)
        LD        *FP(183),A
        STL       A,*FP(171)
        LD        *FP(182),A

;----------------------------------------------------------------------
; 120 | Az = Az_4;                                                             
; 122 | for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)               
;----------------------------------------------------------------------
        MVMM      SP,AR6
        MAR       *+AR6(#46)
        STL       A,*FP(172)
        LD        *FP(170),A
        STL       A,*FP(173)
        LD        #_mem_syn_pst,A
        STL       A,*FP(174)
        LD        #2,A
        STL       A,*FP(175)
L37:    
;----------------------------------------------------------------------
; 126 | t0_min = sub(*T++, 3);                                                 
;----------------------------------------------------------------------
        SSBX      SXM
        MVDK      *FP(171),*(AR1)
        LD        *AR1+,16,A            ; |126| 
        SSBX      OVM
        NOP
        SUB       #3,16,A,A             ; |126| 
        SFTA      A,-16,A               ; |126| 
        STL       A,*FP(176)
        MVKD      *(AR1),*FP(171)
;----------------------------------------------------------------------
; 127 | t0_max = add(t0_min, 6);                                               
; 128 | if (sub(t0_max, PIT_MAX) > 0) {                                        
; 129 |   t0_max = PIT_MAX;                                                    
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *(AL),16,A            ; |127| 
        ;SSBX      OVM
        NOP
        ADD       #6,16,A,A             ; |127| 
        SFTA      A,-16,A               ; |127| 
        ;RSBX      OVM
        STL       A,*FP(177)
        LD        *(AL),A               ; |127| 
        SUB       #144,A,A              ; |127| 
        BC        L38,ALT               ; |127| 

;----------------------------------------------------------------------
; 130 | t0_min = sub(t0_max, 6);                                               
;----------------------------------------------------------------------
        LD        #143,16,A             ; |130| 
        ;SSBX      OVM
        NOP
        SUB       #6,16,A,A             ; |130| 
        SFTA      A,-16,A               ; |130| 
        STL       A,*FP(176)

        LD        #143,A
        STL       A,*FP(177)
L38:    

;----------------------------------------------------------------------
; 135 | Weight_Az(Az, GAMMA2_PST, M, Ap3);                                     
;----------------------------------------------------------------------
        ST        #18022,*SP(0)         ; |135| 
        RSBX      OVM
        LDM       SP,A
        ST        #10,*SP(1)            ; |135| 
        ADD       #126,A
        STL       A,*SP(2)
        RSBX      FRCT
        LD        *FP(172),A
        CALL      #_Weight_Az           ; |135| 

;----------------------------------------------------------------------
; 136 | Weight_Az(Az, GAMMA1_PST, M, Ap4);                                     
;----------------------------------------------------------------------
        ST        #22938,*SP(0)         ; |136| 
        RSBX      OVM
        LDM       SP,A
        ST        #10,*SP(1)            ; |136| 
        ADD       #137,A
        STL       A,*SP(2)
        RSBX      FRCT
        LD        *FP(172),A
        CALL      #_Weight_Az           ; |136| 

;----------------------------------------------------------------------
; 140 | Residu(Ap3, &syn[i_subfr], res2, L_SUBFR);                             
;----------------------------------------------------------------------
        LD        *FP(173),A
        STL       A,*SP(0)
        MVKD      *(_res2),*SP(1)       ; |140| 
        RSBX      FRCT
        RSBX      OVM
        LDM       SP,A
        ST        #40,*SP(2)            ; |140| 
        CALLD     #_Residu              ; |140| 
        ADD       #126,A

;----------------------------------------------------------------------
; 144 | for (j=0; j<L_SUBFR; j++)                                              
;----------------------------------------------------------------------
        STM       #0,AR1
        SSBX      OVM
        SSBX      SXM
        NOP
L39:    

;----------------------------------------------------------------------
; 146 | scal_res2[j] = shr(res2[j], 2);                                        
;----------------------------------------------------------------------

        ;RSBX      OVM
        LDM       AR1,A
        ADD       *(_res2),A
        STLM      A,AR2
        ;ST        #2,*SP(0)             ; |146| 
        ;RSBX      FRCT
        LD        *AR2,A
        ;CALL      #_crshft              ; |146| 
        SFTA      A,-2
        
        LDM       AR1,B
        ;RSBX      OVM
        ADD       *(_scal_res2),B
        STLM      B,AR2
        NOP
        NOP
        STL       A,*AR2

        MAR       *AR1+
        ;SSBX      SXM
        LDM       AR1,A
        LD        *(AL),A               ; |147| 
        SUB       #40,A,A               ; |147| 
        BC        L39,ALT               ; |147| 

;----------------------------------------------------------------------
; 151 | pit_pst_filt(res2, scal_res2, t0_min, t0_max, L_SUBFR, res2_pst);      
;----------------------------------------------------------------------
        MVKD      *(_scal_res2),*SP(0)  ; |151| 
        LD        *FP(176),A
        STL       A,*SP(1)
        RSBX      FRCT
        LD        *FP(177),A
        STL       A,*SP(2)
        LDM       SP,A
        ADD       #6,A
        ST        #40,*SP(3)            ; |151| 
        STL       A,*SP(4)
        LD        *(_res2),A
        CALL      #_pit_pst_filt        ; |151| 

;----------------------------------------------------------------------
; 157 | Copy(Ap3, h, M+1);                                                     
;----------------------------------------------------------------------
        RSBX      OVM
        LDM       SP,A
        ADD       #148,A
        STL       A,*SP(0)
        LDM       SP,A
        RSBX      FRCT
        ST        #11,*SP(1)            ; |157| 
        CALLD     #_Copy                ; |157| 
        ADD       #126,A

;----------------------------------------------------------------------
; 158 | Set_zero(&h[M+1], L_H-M-1);                                            

⌨️ 快捷键说明

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