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

📄 lpcfunc_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	.mmregs
FP	.set	AR7

	.sect	".text"
	.global	_Lsp_lsf2
;----------------------------------------------------------------------
; 217 | void Lsp_lsf2(                                                         
; 218 | Word16 lsp[],    /* (i) Q15 : lsp[m] (range: -1<=val<1)   */           
; 219 | Word16 lsf[],    /* (o) Q13 : lsf[m] (range: 0.0<=val<PI) */           
; 220 | Word16 m         /* (i)     : LPC order                   */           
; 221 | )                                                                      
;----------------------------------------------------------------------
_Lsp_lsf2:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-8
;----------------------------------------------------------------------
; 223 | Word16 i, ind;                                                         
; 224 | Word16 offset;   /* in Q15 */                                          
; 225 | Word16 freq;     /* normalized frequency in Q16 */                     
; 226 | Word32 L_tmp;                                                          
; 228 | ind = 63;           /* begin at end of table2 -1 */                    
;----------------------------------------------------------------------
        SSBX      SXM

        LD        *SP(13),B			;B = m
        MVDK      *SP(12),*(AR3)	;AR3 = & lsp

;----------------------------------------------------------------------
; 230 | for(i= m-(Word16)1; i >= 0; i--)                                       
; 233 |   while( sub(table2[ind], lsp[i]) < 0 )                                
; 235 |     ind = sub(ind,1);                                                  
; 236 |     if ( ind <= 0 )                                                    
; 237 |       break;                                                           
;----------------------------------------------------------------------
        BC        L6,BLEQ               ; |230| 循环次数
        ;;RSBX      OVM
        NOP
        SUB       #1,B,B
        STM       #_table2,AR2	;AR2 = #_table2
        ADD       B,A			;A = lsf + B
        ADD       #1,A,A		;A +1
        STLM      A,AR7			;AR7 = A +1
        LDM       AR2,A			;
        ADD       #63,A,A		;A = A+63
        STLM      A,AR1			;AR1 = A
        ADD       *(AR3),B,A	;A = lsp + i
        STL       A,*SP(2)		;*SP(2) = lsp + i
        ADD       #1,B,A		;A = i +1
        STLM      A,AR6			;ar6 = i+1
        LD        #_slope_acos,A	; A = #_slope_acos
        STL       A,*SP(3)		;*SP(3) = #_slope_acos
        MVKD      *(AR2),*SP(4)	;SP(4) = AR2

        LD        #63,A			;A = #63
        STL       A,*SP(5)		;*SP(5) = #63
        SSBX      OVM         ; ****
        SSBX      FRCT        ; ****
        NOP
L3:    
        LD        *+AR7(-1),B	;B = lsf[]
L4:    
;----------------------------------------------------------------------
; 240 | offset = sub(lsp[i], table2[ind]);                                     
;----------------------------------------------------------------------
        ;;RSBX      OVM;;
        ;;NOP
        LD        *AR1,16,A             ; |238| 取TABLE表值
        ;SSBX      OVM   ; ****
        SUB       *(BL),16,A,A          ; |238| 
        SFTA      A,-16,A               ; |238| 
        ;;LD        *(AL),A               ; |238| 
        BC        L5,AGEQ               ; |238| 

        ;;RSBX      OVM
        LD        *SP(5),A
        LD        *(AL),16,A            ; |235| 
        ;;SSBX      OVM
        ;;NOP
        SUB       #1,16,A,A             ; |235| 
        ;;RSBX      OVM
        SFTA      A,-16,A               ; |235| 
        STL       A,*SP(5)
        MVDK      *SP(5),*(AR1)
        LD        *SP(4),A
        ADD       *(AR1),A
        STLM      A,AR1

        LD        *SP(5),A
        BC        L4,AGT                ; |237| 
       
L5:    
;----------------------------------------------------------------------
; 244 | L_tmp  = L_mult( slope_acos[ind], offset );   /* L_tmp in Q28 */       
;----------------------------------------------------------------------
        ;;RSBX      OVM;;
        LD        *(BL),16,A            ; |244| 
        ;SSBX      FRCT
        ;;SSBX      OVM
        LD        *SP(3),B
        SUB       *AR1,16,A,A           ; |244| 
        ;;RSBX      OVM;;
        STH       A,*(T)
        LD        *SP(5),A
        ADD       B,A                   ; |244| 
        STLM      A,AR2
        ;SSBX      OVM
        NOP
        NOP
        MPY       *AR2,A                ; |244| 

;----------------------------------------------------------------------
; 245 | freq = add(shl(ind, 9), extract_l(L_shr(L_tmp, 12)));                  
;----------------------------------------------------------------------
        ;RSBX      FRCT
        ;;RSBX      OVM
        ;ST        #12,*SP(0)            ; |245| 
        ;CALL      #_L_shr               ; |245| 
        
        SFTA      A,-12
        ; call occurs [#_L_shr] ; |245| 
        STL       A,*SP(6)
        ;RSBX      FRCT
        ;RSBX      OVM
        ;SSBX      OVM
        NOP
        ;ST        #9,*SP(0)             ; |245| 
        LD        *SP(5),A
        ;CALL      #_clshft              ; |245|
        SFTA      A,9
        ;SFTA      A,9
        ; call occurs [#_clshft] ; |245| 
        ;;RSBX      OVM
        ;;SSBX      SXM
        LD        *(AL),16,B            ; |245| 
        ;SSBX      OVM
        LD        *SP(6),A
        ADD       *(AL),16,B,A          ; |245| 
        SFTA      A,-16,B               ; |245| 

;----------------------------------------------------------------------
; 246 | lsf[i] = mult(freq, 25736);           /* 25736: 2.0*PI in Q12 */       
;----------------------------------------------------------------------
        ;;RSBX      OVM
        NOP
        LD        #25736,16,A           ; |246| 
        ;SSBX      FRCT
        STLM      B,T
        ;;SSBX      OVM
        MVDK      *SP(2),*(AR2)
        MPYA      A                     ; |246| 
        STH       A,*AR2-               ; |246| 
        MVKD      *(AR2),*SP(2)

;----------------------------------------------------------------------
; 249 | return;                                                                
;----------------------------------------------------------------------
        BANZ      L3,*+AR6(-1)          ; |248| 
        ; branch occurs ; |248| 
L6:    

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




	.sect	".text"
	.global	_Lsp_lsf

;----------------------------------------------------------------------
; 142 | void Lsp_lsf(                                                          
; 143 | Word16 lsp[],    /* (i) Q15 : lsp[m] (range: -1<=val<1)
;     | */                                                                     
; 144 | Word16 lsf[],    /* (o) Q15 : lsf[m] normalized (range: 0.0<=val<=0.5)
;     | */                                                                     
; 145 | Word16 m         /* (i)     : LPC order
;     | */                                                                     
; 146 | )                                                                      
;----------------------------------------------------------------------
_Lsp_lsf:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-8
;----------------------------------------------------------------------
; 148 | Word16 i, ind, tmp;                                                    
; 149 | Word32 L_tmp;                                                          
; 151 | ind = 63;    /* begin at end of table -1 */                            
;----------------------------------------------------------------------
        SSBX      SXM
        SSBX      OVM ;;add by wly
        NOP
        LD        *SP(13),B
        MVDK      *SP(12),*(AR2)
;----------------------------------------------------------------------
; 153 | for(i= m-(Word16)1; i >= 0; i--)                                       
;----------------------------------------------------------------------
        BC        L10,BLEQ              ; |153| 
        
        ;;RSBX      OVM
        STM       #_table,AR1
        SUB       #1,B,B
        MVKD      *(AR1),*SP(2)
        ADD       B,A
        STM       #_slope,AR1
        ADD       #1,A,A
        STL       A,*SP(4)
        MVKD      *(AR1),*SP(3)
        LD        *SP(2),A
        ADD       #63,A,A
        STLM      A,AR1
        ADD       *(AR2),B,A
        STLM      A,AR7
        ADD       #1,B,A
        STLM      A,AR6

        LD        #63,A
        STL       A,*SP(5)
L7:    
;----------------------------------------------------------------------
; 156 | while( sub(table[ind], lsp[i]) < 0 )                                   
;----------------------------------------------------------------------
        MVDK      *SP(4),*(AR2)
        ;;RSBX      OVM
        MVDK      *+AR2(-1),*(AR3)
        MVKD      *(AR2),*SP(4)
        LD        *AR1,B
        LD        *(BL),16,A            ; |156| 
        ;;SSBX      OVM
        SUB       *(AR3),16,A,A         ; |156| 
        SFTA      A,-16,A               ; |156| 
        LD        *(AL),A               ; |156| 
        BC        L9,AGEQ               ; |156| 
        ; branch occurs ; |156| 
L8:    
;----------------------------------------------------------------------
; 158 | ind = sub(ind,1);                                                      
; 163 | L_tmp  = L_mult( sub(lsp[i], table[ind]) , slope[ind] );               
;----------------------------------------------------------------------
        ;;RSBX      OVM
        LD        *SP(5),A
        LD        *(AL),16,A            ; |158| 
        ;;SSBX      OVM
        NOP
        SUB       #1,16,A,A             ; |158| 
        ;;RSBX      OVM
        SFTA      A,-16,A               ; |158| 
        STL       A,*SP(5)
        LD        *SP(5),B
        LD        *SP(2),A
        ADD       *(BL),A
        STLM      A,AR1
        NOP
        NOP
        LD        *AR1,B
        LD        *(BL),16,A            ; |158| 
        ;;SSBX      OVM
        SUB       *(AR3),16,A,A         ; |158| 
        SFTA      A,-16,A               ; |158| 
        LD        *(AL),A               ; |158| 
        BC        L8,ALT                ; |158| 
        ; branch occurs ; |158| 
L9:    
;----------------------------------------------------------------------
; 164 | tmp = round(L_shl(L_tmp, 3));     /*(lsp[i]-table[ind])*slope[ind])>>12
;     | */                                                                     
;----------------------------------------------------------------------
        ;;RSBX      OVM
        LD        *(AR3),16,A           ; |164| 
       ;; ST        #3,*SP(0)             ; |164| 
        ;;SSBX      OVM
        SUB       *(BL),16,A,A          ; |164| 
        LD        *SP(5),B
        ;;RSBX      OVM
        SFTA      A,-16,A               ; |164| 
        STLM      A,AR3
        LD        *SP(3),A
        ADD       A,B                   ; |164| 
        STLM      B,AR2
        NOP;; THIS CAN'T BE DELETED, WLY
        SSBX      FRCT
        LD        *AR2,T
        ;;SSBX      OVM
        MPY       *(AR3),A              ; |164| 
        RSBX      FRCT
        ;;RSBX      OVM
        NOP
        ;;CALL      #_L_shl               ; |164| 
        SFTA 	A,3,A;;WLY
        ; call occurs [#_L_shl] ; |164| 
        ;;RSBX      OVM
        NOP
        ;;SFTA      A,8                   ; |164| 
        ;;SSBX      SXM
        ;;SSBX      OVM
        ;;SFTA      A,-8                  ; |164| 
        ADD       #1,#15,A,A            ; |164| 
        SFTA      A,-16,A               ; |164| 
        STL       A,*SP(6)

;----------------------------------------------------------------------
; 165 | lsf[i] = add(tmp, shl(ind, 8));                                        
;----------------------------------------------------------------------
        ;;RSBX      FRCT
        ;;ST        #8,*SP(0)             ; |165| 
        ;;RSBX      OVM
        LD        *SP(5),A
        ;;CALL      #_clshft              ; |165| 
        SFTA	A,8,A;;	WLY
        ; call occurs [#_clshft] ; |165| 
        ;;RSBX      OVM
        ;;SSBX      SXM
        LD        *SP(6),B
        LD        *(BL),16,B            ; |165| 
        ;;SSBX      OVM
        ADD       *(AL),16,B,A          ; |165| 
        STH       A,*AR7-               ; |165| 

;----------------------------------------------------------------------
; 167 | return;                                                                
;----------------------------------------------------------------------
        BANZ      L7,*+AR6(-1)          ; |166| 
        ; branch occurs ; |166| 
L10:    

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



	.sect	".text"
	.global	_Lsf_lsp

;----------------------------------------------------------------------
; 119 | void Lsf_lsp(                                                          
; 120 | Word16 lsf[],    /* (i) Q15 : lsf[m] normalized (range: 0.0<=val<=0.5)
;     | */                                                                     
; 121 | Word16 lsp[],    /* (o) Q15 : lsp[m] (range: -1<=val<1)
;     | */                                                                     
; 122 | Word16 m         /* (i)     : LPC order
;     | */                                                                     
; 123 | )                                                                      
;----------------------------------------------------------------------

_Lsf_lsp:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-4
        NOP
;----------------------------------------------------------------------
; 125 | Word16 i, ind, offset;                                                 
; 126 | Word32 L_tmp;                                                          
;----------------------------------------------------------------------
        MVDK      *SP(9),*(AR6)
        MVDK      *SP(8),*(AR2)

;----------------------------------------------------------------------
; 128 | for(i=0; i<m; i++)                                                     
;----------------------------------------------------------------------
        SSBX      SXM
        LD        *(AR6),B              ; |128| 
        BC        L19,BLEQ              ; |128| 

        STLM      A,AR1
        LD        #_table,A
        MVKD      *(AR2),*SP(2)
        STL       A,*SP(3)
        SSBX      OVM;;WLY
        SSBX	  SXM;;
        NOP
L18:    
;----------------------------------------------------------------------
; 130 | ind    = shr(lsf[i], 8);               /* ind    = b8-b15 of lsf[i] */ 
; 131 | offset = lsf[i] & (Word16)0x00ff;      /* offset = b0-b7  of lsf[i] */ 
; 135 | L_tmp   = L_mult(sub(table[ind+1], table[ind]), offset);               
;----------------------------------------------------------------------
        ;ST        #8,*SP(0)             ; |130| 
        ;;RSBX      FRCT
        ;;RSBX      OVM
        

⌨️ 快捷键说明

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