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

📄 filter_asm.asm

📁 g.729汇编手工优化
💻 ASM
字号:
	.mmregs
FP	.set	AR7
	.sect	".text"
	.global	_Syn_filt
;----------------------------------------------------------------------
;  53 | void Syn_filt(                                                         
;  54 | Word16 a[],     /* (i) Q12 : a[m+1] prediction coefficients   (m=10)  *
;     | /                                                                      
;  55 | Word16 x[],     /* (i)     : input signal                             *
;     | /                                                                      
;  56 | Word16 y[],     /* (o)     : output signal                            *
;     | /                                                                      
;  57 | Word16 lg,      /* (i)     : size of filtering                        *
;     | /                                                                      
;  58 | Word16 mem[],   /* (i/o)   : memory associated with this filtering.   *
;     | /                                                                      
;  59 | Word16 update   /* (i)     : 0=no update, 1=update of memory.         *
;     | /                                                                      
;  60 | )                                                                      
;----------------------------------------------------------------------
_Syn_filt:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-112
;----------------------------------------------------------------------
;  62 | Word16 i, j;                                                           
;  63 | Word32 s;                                                              
;  64 | Word16 tmp[100];     /* This is usually done by memory allocation (lg+M
;     | ) */                                                                   
;  65 | Word16 *yy;                                                            
;----------------------------------------------------------------------
        STLM      A,AR7                ; (ar7)=a
        LD        *SP(120),A
        STL       A,*SP(102)           ; (sp(102)) = update
        LD        *SP(119),A           
        STL       A,*SP(103)           ; (sp(103) = mem
        LD        *SP(118),A           ; (a) = lg;
        STL       A,*SP(104)           ; (sp(104)) = lg
        LD        *SP(117),A           ; (a) = y
        STL       A,*SP(105)           ; (sp(105)) = y
        LD        *SP(116),A           ; (a) = x
        MVDK      *SP(103),*(AR3)      ; (ar3) = mem

        ;RSBX      OVM
        ;STM       #9,BRC
        LDM       SP,B
        ADD       #2,B
        STL       B,*SP(106)           ; tmp = sp+2
        MVDK      *SP(106),*(AR2)      ; d.l.b
        RPT       #9     
        MVDD      *AR3+,*AR2+                   
L2:    
        MVKD      *(AR2),*SP(106)      ; (sp(106)) = yy
        
        SSBX      SXM
        NOP
        LD        *SP(104),B
        BC        L6,BLEQ               
        

        SUB       #1,A,A
        STLM      A,AR6            ; (ar6) = &x[-1]
        LDM       SP,A
        ADD       #12,A            ; (a) = sp+12
        STL       A,*SP(107)       ; sp(107) = sp+M+2 = &tmp[M]
        
        LD        *SP(104),A
        SUB       #1,A
        STL       A,*(BRC)
        
        LD        *SP(105),A       ; (a) = y
        STL       A,*SP(108)       ; (sp(108)) = y = (sp(105))
        LD        *SP(106),A
        SUB       #1,A,A           ; (a) = &yy[-1]
        STL       A,*SP(109)       ; (sp(109)) = &yy[-1] 
        LDM       AR7,A
        ADD       #1,A,A           ; (a) = &a[1]
        STL       A,*SP(110)       ; (sp(110)) = &a[1]
        SSBX      FRCT
        SSBX      OVM
        MVDK      *SP(107),*(AR5)       ; ****
        MVDK      *SP(108),*(AR4)       ; **** 

        MVDK      *SP(106),*(AR1)
        ORM       #2,*(PMST)  
        RSBX      OVA               ; OVERFLOW BIT  
        RPTB      L6-1              ; ****
L3:    
;----------------------------------------------------------------------
;  80 | s = L_mult(x[i], a[0]);                                                
;  81 | for (j = 1; j <= M; j++)                                               
;----------------------------------------------------------------------
        LD        *AR7,T                ; *ar7 = a[0]

        MPY       *+AR6(1),A            ; (a) = L_mult(x[i], a[0]) 
        MVDK      *SP(110),*(AR2)       ; (ar2) = &a[1]  line-106
        MVDK      *SP(109),*(AR3)       ; (ar3) = &yy[-1] line-107

        RPT        #9
;----------------------------------------------------------------------
;  82 | s = L_msu(s, a[j], yy[-j]);                                            
;----------------------------------------------------------------------
        MAS       *AR3-, *AR2+, A, A    

        LD        *SP(109),B

        ADD       #1,B
        STL       B,*SP(109)             ;(sp(109)) ++

;----------------------------------------------------------------------
;  84 | s = L_shl(s, 3);                                                       
;----------------------------------------------------------------------
        ;RSBX      FRCT
        ;ST        #3,*SP(0)              ; |84| 
        ;CALL      #_L_shl                ; |84| 
        SFTA       A,3
        

;----------------------------------------------------------------------
;  85 | *yy++ = round(s);                                                      
;----------------------------------------------------------------------
        ADD       #1,#15,A,A            ; (a) = s 
        STH       A,*AR1+               ; *yy++ = round(s) (ar2) = yy
;----------------------------------------------------------------------
;  86 | y[i] = tmp[i+M];                                                       
;----------------------------------------------------------------------      
        MVDD      *AR5+,*AR4+                 
L6:    
       STM       #0,AR5                 ; ****
       BC        IF_OVM,ANOV            ; ****
       STM       #1,AR5
IF_OVM:
;----------------------------------------------------------------------
;  92 | if(update != 0)                                                        
;  93 |    for (i = 0; i < M; i++)                                             
;----------------------------------------------------------------------
        LD        *SP(102),A
        LD        *(AL),A              
        BC        L8,AEQ                 

        LD        *SP(104),B          ; (b) = lg
        LD        *SP(105),A          ; (a) = y
        ADD       B,A                 ; (a) = &y[lg]
        SUB       #10,A,A             ; (a) = &y[lg-M]
        STLM      A,AR3
        NOP
        MVDK      *SP(103),*(AR2)
        RPT       #9
L7:    
        MVDD      *AR3+,*AR2+          

L8:    
        ;ANDM      #-833,*(ST1)
        ;ANDM      #-4,*(PMST)
        LDM       AR5,A
        FRAME     #112
        POPM      AR7
        POPM      AR6
        POPM      AR1
        RET


	.sect	".text"
	.global	_Residu
;----------------------------------------------------------------------
; 107 | void Residu(                                                           
; 108 | Word16 a[],    /* (i) Q12 : prediction coefficients
;     |  */                                                                    
; 109 | Word16 x[],    /* (i)     : speech (values x[-m..-1] are needed
;     |  */                                                                    
; 110 | Word16 y[],    /* (o)     : residual signal
;     |  */                                                                    
; 111 | Word16 lg      /* (i)     : size of filtering
;     |  */                                                                    
; 112 | )                                                                      
;----------------------------------------------------------------------

;***************************************************************
;* FUNCTION DEF: _Residu                                       *
;***************************************************************

_Residu:
        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-6
        NOP
        STL       A,*SP(2)             ; sp(2) = a
        LD        *SP(10),A            ; (a) = x
        MVDK      *SP(12),*(AR6)       ; (ar6) = lg
        STL       A,*SP(3)             ; sp(3) = x
        MVDK      *SP(11),*(AR1)       ; (ar1) = y

;----------------------------------------------------------------------
; 117 | for (i = 0; i < lg; i++)                                               
;----------------------------------------------------------------------
        SSBX      SXM
        SSBX      FRCT                 ; added by d.l.b
        LD        *(AR6),A             ; (a) = lg
        BC        L12,ALEQ             
 
 
        SSBX      OVM
        LD        *SP(2),A
        LD        *SP(3),B
        ADD       #1,A,A               ; (a) = &a[1]
        SUB       #1,B,B               ; (b) = &x[-1]
        STL       A,*SP(4)             ; sp(4) = &a[1]
        ORM       #2,*(PMST)
        STLM      B,AR7                ; (ar7) = &x[-1]
        LD        #-1,A
        STL       A,*SP(5)             ; sp(5) = -1

L9:    
;----------------------------------------------------------------------
; 119 | s = L_mult(x[i], a[0]);                                                
; 120 | for (j = 1; j <= M; j++)                                               
;----------------------------------------------------------------------
        MVDK      *SP(2),*(AR2)        ; (ar2) = a 
        LD        *SP(5),B 
        LD        *AR2,T               ; (T)= a[0]

        MPY       *+AR7(1),A           ; (a) = L_mult(x[i], a[0])
        MVDK      *SP(3),*(AR2)        ; (ar2) = x
                
        ADD       *(AR2),B             ; (b) = &x[-1]
        STLM      B,AR3                ; (ar3) = &x[-1]
        MVDK      *SP(4),*(AR2)        ; added by d.l.b

        RPT       #9 
        MAC       *AR3-, *AR2+, A, A     
L11:     
;----------------------------------------------------------------------
; 123 | s = L_shl(s, 3);                                                       
;----------------------------------------------------------------------
        SFTA       A,3
                    
        ADD       #1,#15,A,A           
        STH       A,*AR1+               ; (ar1) = y
        LD        *SP(5),A
        ADD       #1,A
        BANZD     L9,*+AR6(-1)                      
        NOP
        STL       A,*SP(5)      
L12:    
        ANDM      #-833,*(ST1)
        ANDM      #-4,*(PMST)
        FRAME     #6
        POPM      AR7
        POPM      AR6
        POPM      AR1
        RET

⌨️ 快捷键说明

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