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

📄 lpcfunc_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        LD        *AR1,A
        ;CALL      #_crshft              ; |130| 
        ;NOP
        SFTA	  A,-8;;WLY

;----------------------------------------------------------------------
; 136 | lsp[i] = add(table[ind], extract_l(L_shr(L_tmp, 9)));                  
;----------------------------------------------------------------------
        ;;RSBX      OVM
        LD        *SP(3),B
        ;;SSBX      SXM
        ADD       *(AL),B,A
        STLM      A,AR7
        ST        #9,*SP(0)             ; |136| 
        
        LD        *AR7(1),16,A          ; |136| 
        ;;SSBX      OVM
        SSBX      FRCT
        SUB       *AR7,16,A,A           ; |136| 
        SFTA      A,-16,B               ; |136| 
        LD        #255,A
        AND       *AR1+,A               ; |136| 
        STLM      A,T
        MPY       *(BL),A               ; |136| 
        ;RSBX      FRCT
        ;RSBX      OVM
        
        ;;NOP
        ;;CALL      #_L_shr               ; |136| 
        SFTA		A,-9;;WLY
        ; call occurs [#_L_shr] ; |136| 
        ;RSBX      OVM
        ;;SSBX      SXM
        ;;NOP
        LD        *AR7,16,B             ; |136| 
        ;;SSBX      OVM
        MVDK      *SP(2),*(AR2)
        ADD       *(AL),16,B,A          ; |136| 
        STH       A,*AR2+               ; |136| 
        MVKD      *(AR2),*SP(2)

;----------------------------------------------------------------------
; 138 | return;                                                                
;----------------------------------------------------------------------
        BANZ      L18,*+AR6(-1)         ; |137| 

L19:    

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



	.sect	".text"
	.global	_Lsf_lsp2

;----------------------------------------------------------------------
; 184 | void Lsf_lsp2(                                                         
; 185 | Word16 lsf[],    /* (i) Q13 : lsf[m] (range: 0.0<=val<PI) */           
; 186 | Word16 lsp[],    /* (o) Q15 : lsp[m] (range: -1<=val<1)   */           
; 187 | Word16 m         /* (i)     : LPC order                   */           
; 188 | )                                                                      
;----------------------------------------------------------------------
_Lsf_lsp2:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-6
        NOP
;----------------------------------------------------------------------
; 190 | Word16 i, ind;                                                         
; 191 | Word16 offset;   /* in Q8 */                                           
; 192 | Word16 freq;     /* normalized frequency in Q15 */                     
; 193 | Word32 L_tmp;                                                          
;----------------------------------------------------------------------
        MVDK      *SP(11),*(AR7)
        MVDK      *SP(10),*(AR6)

;----------------------------------------------------------------------
; 195 | for(i=0; i<m; i++)                                                     
;----------------------------------------------------------------------
        SSBX      SXM
        LD        *(AR7),B              ; |195| 
        BC        L17,BLEQ              ; |195| 

        LD        #_slope_cos,B
        STL       B,*SP(2)
        STL       A,*SP(4)
        LD        #_table2,B
        STL       B,*SP(3)
        SSBX		OVM;;WLY
        SSBX      FRCT;;WLY
L15:    

;----------------------------------------------------------------------
; 198 | freq = mult(lsf[i], 20861);          /* 20861: 1.0/(2.0*PI) in Q17 */  
;----------------------------------------------------------------------
        ;;RSBX      OVM
        NOP
        LD        #20861,16,A           ; |198| 
        ;;SSBX      FRCT
        ;;SSBX      OVM
        MVDK      *SP(4),*(AR1)
        MPYA      *AR1+                 ; |198| 
        SFTA      B,-16,A               ; |198| 
        STL       A,*SP(5)
        MVKD      *(AR1),*SP(4)

;----------------------------------------------------------------------
; 199 | ind    = shr(freq, 8);               /* ind    = b8-b15 of freq */     
;----------------------------------------------------------------------
        ;;RSBX      FRCT
        ;;RSBX      OVM
        ;;ST        #8,*SP(0)             ; |199| 
        ;;CALL      #_crshft              ; |199| 
        SFTA		A,-8,A;;WLY
        ; call occurs [#_crshft] ; |199| 
        STLM      A,AR1

;----------------------------------------------------------------------
; 200 | offset = freq & (Word16)0x00ff;      /* offset = b0-b7  of freq */     
;----------------------------------------------------------------------
        LD        *SP(5),A
        AND       #255,A,A              ; |200| 
        STLM      A,T

;----------------------------------------------------------------------
; 202 | if ( sub(ind, 63)>0 ){                                                 
;----------------------------------------------------------------------
        ;;SSBX      SXM
        ;;RSBX      OVM
        LD        *(AR1),A              ; |202| 
        SUB       #64,A,A               ; |202| 
        BC        L16,ALT               ; |202| 

;----------------------------------------------------------------------
; 203 | ind = 63;                 /* 0 <= ind <= 63 */                         
; 208 | L_tmp   = L_mult(slope_cos[ind], offset);   /* L_tmp in Q28 */         
;----------------------------------------------------------------------
        STM       #63,AR1
L16:    
;----------------------------------------------------------------------
; 209 | lsp[i] = add(table2[ind], extract_l(L_shr(L_tmp, 13)));                
;----------------------------------------------------------------------
        ;;ST        #13,*SP(0)            ; |209| 
        LDM       AR1,A
        LD        *SP(2),B
        ;;SSBX      FRCT
        ADD       B,A                   ; |209| 
        STLM      A,AR2
        ;;SSBX      OVM
        NOP;;
        NOP;;MUST BE 2 NOP HERE
        MPY       *AR2,A                ; |209| 
        ;;RSBX      FRCT
        ;;RSBX      OVM
        ;;NOP
        ;;NOP
        ;;CALL      #_L_shr               ; |209| 
        SFTA		A,-13;WLY
        ; call occurs [#_L_shr] ; |209| 
        STLM      A,AR2
        LDM       AR1,B
        ;;RSBX      OVM
        ;;NOP
        LD        *SP(3),A
        ADD       A,B                   ; |209| 
        STLM      B,AR1
        ;;SSBX      SXM
        NOP
        NOP;;MUST BE 2 NOP HERE
        LD        *AR1,16,B             ; |209| 
        ;;SSBX      OVM
        ADD       *(AR2),16,B,A         ; |209| 
        STH       A,*AR6+               ; |209| 

;----------------------------------------------------------------------
; 212 | return;                                                                
;----------------------------------------------------------------------
        BANZ      L15,*+AR7(-1)         ; |211| 
     
L17:    
        ANDM      #-833,*(ST1)
        ANDM      #-4,*(PMST)
        FRAME     #6
        POPM      AR7
        POPM      AR6
        POPM      AR1
        RET




	.sect	".text"
	.global	_Weight_Az

;----------------------------------------------------------------------
; 261 | void Weight_Az(                                                        
; 262 | Word16 a[],      /* (i) Q12 : a[m+1]  LPC coefficients             */  
; 263 | Word16 gamma,    /* (i) Q15 : Spectral expansion factor.           */  
; 264 | Word16 m,        /* (i)     : LPC order.                           */  
; 265 | Word16 ap[]      /* (o) Q12 : Spectral expanded LPC coefficients   */  
; 266 | )                                                                      
;----------------------------------------------------------------------
_Weight_Az:

        PSHM      AR1
        FRAME     #-2
;----------------------------------------------------------------------
; 268 | Word16 i, fac;                                                         
;----------------------------------------------------------------------
        STLM      A,AR3
        NOP
        MVDK      *SP(4),*(BK)
        LD        *SP(5),B
        MVDK      *SP(6),*(AR2)

;----------------------------------------------------------------------
; 270 | ap[0] = a[0];                                                          
;----------------------------------------------------------------------
        MVDD      *AR3,*AR2             ; |270| 

;----------------------------------------------------------------------
; 271 | fac   = gamma;                                                         
;----------------------------------------------------------------------
        MVMD      BK,AR5

;----------------------------------------------------------------------
; 272 | for(i=1; i<m; i++)                                                     
;----------------------------------------------------------------------
        SSBX      SXM
        RSBX      OVM
        LD        B,A
        LD        *(AL),A               ; |272| 
        SUB       #2,A,A                ; |272| 
        BC        L2,ALT                ; |272| 

        LDM       AR3,A
        ADD       #1,A,A
        STLM      A,AR4
        LDM       AR2,A
        ADD       #1,A,A
        STLM      A,AR1
        LD        B,A
        SUB       #2,A,A
        STLM      A,BRC
        NOP
        RPTB      L2-1
        SSBX	OVM;;WLY
        SSBX      FRCT;;WLY
        NOP;;WLY
        
L1:    
;----------------------------------------------------------------------
; 274 | ap[i] = round( L_mult(a[i], fac) );                                    
;----------------------------------------------------------------------
        ;;SSBX      FRCT
        ;;SSBX      OVM
        MVMD      AR5,T
        MPY       *AR4+,A               ; |274| 
        ;;RSBX      OVM
        ;;NOP
        ;;SFTA      A,8                   ; |274| 
        ;;SSBX      OVM
        ;;SFTA      A,-8                  ; |274| 
        ADD       #1,#15,A,A            ; |274| 
        STH       A,*AR1+               ; |274| 

;----------------------------------------------------------------------
; 275 | fac   = round( L_mult(fac, gamma) );                                   
;----------------------------------------------------------------------
        MVMD      BK,T
        LDM       AR5,A
        MPY       *(AL),A               ; |275| 
        ;;RSBX      OVM
        ;;NOP
        ;;SFTA      A,8                   ; |275| 
        ;;SSBX      OVM
        ;;SFTA      A,-8                  ; |275| 
        ADD       #1,#15,A,A            ; |275| 
        SFTA      A,-16,A               ; |275| 
        STLM      A,AR5
        NOP

L2:    

;----------------------------------------------------------------------
; 277 | ap[m] = round( L_mult(a[m], fac) );                                    
;----------------------------------------------------------------------
        LDM       AR3,A
        ;;RSBX      OVM
        ;;SSBX      FRCT
        ADD       B,A                   ; |277| 
        STLM      A,AR1
        ;;SSBX      OVM
        MVMD      AR5,T
        MPY       *AR1,A                ; |277| 
        ;;RSBX      OVM
        ;;NOP
        ;;SFTA      A,8                   ; |277| 
        ;;SSBX      OVM
        ;;SFTA      A,-8                  ; |277| 
        ADD       #1,#15,A,A            ; |277| 
        ;;RSBX      OVM
        DST       A,*SP(0)              ; |277| 
        LDM       AR2,A
        ADD       B,A                   ; |277| 
        STLM      A,AR2
        NOP
        DLD       *SP(0),A              ; |277| 
        STH       A,*AR2                ; |277| 

;----------------------------------------------------------------------
; 279 | return;                                                                
;----------------------------------------------------------------------

        ANDM      #-833,*(ST1)
        ANDM      #-4,*(PMST)
        FRAME     #2
        POPM      AR1
        RET

        
        


	.sect	".text"
;----------------------------------------------------------------------
;  70 | static void Get_lsp_pol(Word16 *lsp, Word32 *f)                        
;----------------------------------------------------------------------

_Get_lsp_pol:

        PSHM      AR1
        FRAME     #-10
        NOP
        STL       A,*SP(2)

	    SSBX      SXM
        SSBX      FRCT
        SSBX      OVM
        NOP
        LD        #4096,A
        MVDK      *SP(12),*(AR1)
        MPY       *(AL),#2048,A         ; |77| 
        DST       A,*AR1                ; |77| 

        ;;RSBX      OVM
        NOP
        ADDM      #2,*SP(12)            ; |78| 

        LD        #512,B
        MVDK      *SP(2),*(AR1)
        LD        #0,A
        LD        *AR1,T
        ;ORM       #2,*(PMST)
        ;;SSBX      OVM
        ORM       #2,*(PMST)
        MVDK      *SP(12),*(AR1)
        MAS       *(BL), A              ; |79| 
        DST       A,*AR1                ; |79| 

        ;;SSBX      OVM
        NOP
        ADDM      #2,*SP(12)            ; |81| 

        ADDM      #2,*SP(2)             ; |82| 

        ;SSBX      SXM
        LD        #5,A
        ST        #2,*SP(3)             ; |84| 
        SUB       *SP(3),A              ; |84| 
        BC        L108,ALT                ; |84| 
        ; branch occurs ; |84| 
L105:    

        MVDK      *SP(12),*(AR1)
        DLD       *AR1(-4),A            ; |86| 
        DST       A,*AR1                ; |86| 

        ST        #1,*SP(4)             ; |88| 
        LD        *SP(3),A              ; |88| 
        SUB       *SP(4),A              ; |88| 
        BC        L107,ALEQ               ; |88| 
        ; branch occurs ; |88| 
L106:    

        LDM       SP,A
        ADD       #5,A
        STL       A,*SP(0)

⌨️ 快捷键说明

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