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

📄 lpcfunc_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        RSBX      FRCT
        LDM       SP,A
        ADD       #6,A
        STL       A,*SP(1)
        MVDK      *SP(12),*(AR1)
        DLD       *AR1(-2),A            ; |90| 
        CALL      #_L_Extract           ; |90| 


		;;SSBX		SXM;;WLY
		;;SSBX		OVM;;WLY
        LD        *SP(6),A
        ;;RSBX      FRCT
        RSBX      OVM
        NOP
        STL       A,*SP(0)
        MVDK      *SP(2),*(AR1)
        LD        *AR1,A
        STL       A,*SP(1)
        LD        *SP(5),A
        CALL      #_Mpy_32_16           ; |91| 
        ; call occurs [#_Mpy_32_16] ; |91| 
        DST       A,*SP(8)              ; |91| 

        ;RSBX      OVM
        ;RSBX      FRCT
        ;ST        #1,*SP(0)             ; |92| 
        ;DLD       *SP(8),A              ; |92| 
        ;CALL      #_L_shl               ; |92| 
        SSBX	SXM;;WLY
        SSBX	OVM;;WLY
        NOP
        DLD       *SP(8),A              ; |92| 
        SFTA 	A,1,A;;wly
        NOP
        ; call occurs [#_L_shl] ; |92| 
        DST       A,*SP(8)              ; |92| 

        SSBX      OVM
        SSBX      SXM
        MVDK      *SP(12),*(AR1)
        DLD       *AR1,A
        DADD      *AR1(-4),A,A          ; |93| 
        DST       A,*AR1                ; |93| 

        ;;RSBX      OVM
        NOP
        ;;DLD       *SP(8),A              ; |94| 
        ;;DST       A,*SP(0)              ; |94| 
        DLD		*SP(8),B;;WLY
        MVDK      *SP(12),*(AR1)
        ;;RSBX      FRCT
        DLD       *AR1,A                ; |94| 
        ;;CALL      #_L_sub               ; |94| 
        SUB		B,A;;WLY
        NOP
        ; call occurs [#_L_sub] ; |94| 
        ;;MVDK      *SP(12),*(AR1)
        DST       A,*AR1                ; |94| 

        ;;RSBX      OVM
        ;;SSBX      SXM
        ADDM      #1,*SP(4)             ; |95| 
        ADDM      #-2,*SP(12)           ; |95| 
        LD        *SP(3),A              ; |95| 
        SUB       *SP(4),A              ; |95| 
        BC        L106,AGT                ; |95| 
        ; branch occurs ; |95| 
L107:    

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

        ;;RSBX      OVM
        LD        *SP(3),B
        LD        *SP(12),A
        ADD       B,#1,A                ; |97| 
        STL       A,*SP(12)

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

        LD        #5,A
        ADDM      #1,*SP(3)             ; |99| 
        SUB       *SP(3),A              ; |99| 
        BC        L105,AGEQ               ; |99| 
        ; branch occurs ; |99| 

L108:    

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




	.sect	".text"
	.global	_Lsp_Az

;----------------------------------------------------------------------
;  27 | void Lsp_Az(                                                           
;  28 | Word16 lsp[],    /* (i) Q15 : line spectral frequencies            */  
;  29 | Word16 a[]       /* (o) Q12 : predictor coefficients (order = 10)  */  
;  30 | )                                                                      
;----------------------------------------------------------------------

_Lsp_Az:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-28
;----------------------------------------------------------------------
;  32 | Word16 i, j;                                                           
;  33 | Word32 f1[6], f2[6];                                                   
;  34 | Word32 t0;                                                             
;----------------------------------------------------------------------
        STLM      A,AR1
        LD        *SP(32),A
        STL       A,*SP(26)

;----------------------------------------------------------------------
;  36 | Get_lsp_pol(&lsp[0],f1);                                               
;----------------------------------------------------------------------
        ;;RSBX      OVM
        SSBX	OVM;;WLY
        SSBX	SXM;;WLY
        RSBX      FRCT
        LDM       SP,A
        ADD       #2,A
        STL       A,*SP(0)
        CALLD     #_Get_lsp_pol   ; |36| ;;wly to recover!
        ;;CALLD     #_Get_lsp_pol_asm   ; |36| 
        NOP
        LDM       AR1,A
        ; call occurs [#_Get_lsp_pol] ; |36| 

;----------------------------------------------------------------------
;  37 | Get_lsp_pol(&lsp[1],f2);                                               
;  39 | for (i = 5; i > 0; i--)                                                
;----------------------------------------------------------------------
        ;;RSBX      OVM
        SSBX	OVM;;WLY
        SSBX	SXM;;WLY        
        LDM       SP,A
        ADD       #14,A
        RSBX      FRCT
        STL       A,*SP(0)
        LDM       AR1,A
        CALLD     #_Get_lsp_pol         ; |37| ;;wly to recover!
        ;;CALLD     #_Get_lsp_pol_asm   ; |36| 
        ADD       #1,A,A                ; |37| 
        ; call occurs [#_Get_lsp_pol] ; |37| 
        STM       #5,AR7
        MVMM      SP,AR6
        MVMM      SP,AR1
        MAR       *+AR6(#12)
        MAR       *+AR1(#24)
        
        SSBX      SXM
        SSBX      OVM
L13:    
;----------------------------------------------------------------------
;  41 | f1[i] = L_add(f1[i], f1[i-1]);        /* f1[i] += f1[i-1]; */          
;----------------------------------------------------------------------
        ;;SSBX      SXM
        ;;SSBX      OVM
        DLD       *AR6,A
        DADD      *AR6(-2),A,A          ; |41| 
        DST       A,*AR6-               ; |41| 

;----------------------------------------------------------------------
;  42 | f2[i] = L_sub(f2[i], f2[i-1]);        /* f2[i] -= f2[i-1]; */          
;----------------------------------------------------------------------
        ;;RSBX      FRCT
        ;;RSBX      OVM
        ;;DLD       *AR1(-2),A            ; |42| 
        DLD       *AR1(-2),B;;WLY
        ;;DST       A,*SP(0)              ; |42| 
        DLD       *AR1,A                ; |42| 
        ;;CALL      #_L_sub               ; |42| 
        SUB	B,A;;WLY
        ; call occurs [#_L_sub] ; |42| 
        DST       A,*AR1-               ; |42| 

        BANZ      L13,*+AR7(-1)         ; |43| 

;----------------------------------------------------------------------
;  45 | a[0] = 4096;                                                           
;  46 | for (i = 1, j = 10; i <= 5; i++, j--)                                  
;  48 |   t0   = L_add(f1[i], f2[i]);                 /* f1[i] + f2[i]
;     |     */                                                                 
;----------------------------------------------------------------------
        MVDK      *SP(26),*(AR1)
        ;;RSBX      OVM
        ST        #4096,*AR1            ; |45| 
        MVMM      SP,AR6
        LD        *SP(26),A
        STM       #5,AR7
        MVMM      SP,AR1
        ADD       #1,A,A
        MAR       *+AR6(#4)
        STL       A,*SP(27)
        MAR       *+AR1(#16)
        LD        *SP(26),A
        ADD       #10,A,A
        STL       A,*SP(26)
L14:    

;----------------------------------------------------------------------
;  49 | a[i] = extract_l( L_shr_r(t0, 13) );        /* from Q24 to Q12 and * 0.
;     | 5 */                                                                   
;----------------------------------------------------------------------
        ;;SSBX      SXM
        ST        #13,*SP(0)            ; |49| 
        SSBX      OVM
        ;;RSBX      FRCT
        DLD       *AR6,A
        DADD      *AR1,A,A              ; |49| 
        ;;RSBX      OVM
        ;;NOP
        CALL      #_L_crshft_r          ; |49| 
        ;;SFTA	A,-13,A;;WLY
        ; call occurs [#_L_crshft_r] ; |49| 
        MVDK      *SP(27),*(AR2)
        STL       A,*AR2+
        MVKD      *(AR2),*SP(27)

;----------------------------------------------------------------------
;  51 | t0   = L_sub(f1[i], f2[i]);                 /* f1[i] - f2[i]
;     |   */                                                                   
;----------------------------------------------------------------------
        ;;RSBX      OVM
        ;;RSBX      FRCT
        ;;DLD       *AR1+,A               ; |51| 
        ;;SSBX	OVM;;WLY
        DLD       *AR1+,B;;WLY 
        ;;DST       A,*SP(0)              ; |51| 
        DLD       *AR6+,A               ; |51| 
        ;;CALL      #_L_sub               ; |51| 
        SSBX	OVM;;WLY
        SUB	B,A
        ; call occurs [#_L_sub] ; |51| 

;----------------------------------------------------------------------
;  52 | a[j] = extract_l( L_shr_r(t0, 13) );        /* from Q24 to Q12 and * 0.
;     | 5 */                                                                   
;----------------------------------------------------------------------
        ;;RSBX      FRCT
        ;;RSBX      OVM
        ST        #13,*SP(0)            ; |52| 
        CALL      #_L_crshft_r          ; |52| 
        ;;SFTA	A,-13,A;;
        ; call occurs [#_L_crshft_r] ; |52| 
        MVDK      *SP(26),*(AR2)
        STL       A,*AR2-
        MVKD      *(AR2),*SP(26)
;----------------------------------------------------------------------
;  56 | return;                                                                
;----------------------------------------------------------------------
        BANZ      L14,*+AR7(-1)         ; |54| 

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



	.sect	".text"
	.global	_Int_qlpc
;----------------------------------------------------------------------
; 290 | void Int_qlpc(                                                         
; 291 | Word16 lsp_old[], /* input : LSP vector of past frame              */  
; 292 | Word16 lsp_new[], /* input : LSP vector of present frame           */  
; 293 | Word16 Az[]       /* output: interpolated Az() for the 2 subframes */  
; 294 | )                                                                      
;----------------------------------------------------------------------

_Int_qlpc:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-16
;----------------------------------------------------------------------
; 296 | Word16 i;                                                              
; 297 | Word16 lsp[M];                                                         
; 301 | for (i = 0; i < M; i++) {                                              
;----------------------------------------------------------------------
        MVMM      SP,AR6
        STM       #10,AR7
        LD        *SP(21),B
        MAR       *+AR6(#2)
        STL       B,*SP(12)
        STL       A,*SP(14)
        LD        *SP(20),B
        STLM      B,AR1
        STL       B,*SP(13)
        SSBX      SXM
        SSBX      OVM
L20:    
;----------------------------------------------------------------------
; 302 | lsp[i] = add(shr(lsp_new[i], 1), shr(lsp_old[i], 1));                  
;----------------------------------------------------------------------
        ;ST        #1,*SP(0)             ; |302| 
        ;RSBX      FRCT
        MVDK      *SP(14),*(AR2)
        ;RSBX      OVM
        LD        *AR2+,A
        MVKD      *(AR2),*SP(14)
        ;CALL      #_crshft              ; |302| 
        SFTA      A,-1
        
        STL       A,*SP(15)
        ;RSBX      FRCT
        ;RSBX      OVM
        ;ST        #1,*SP(0)             ; |302| 
        LD        *AR1+,A
        ;CALL      #_crshft              
        SFTA      A,-1
        
        ;RSBX      OVM
        ;SSBX      SXM
        LD        *(AL),16,A            
        LD        *SP(15),B
        ;SSBX      OVM
        ADD       *(BL),16,A,A          
        STH       A,*AR6+               
        BANZ      L20,*+AR7(-1)         

;----------------------------------------------------------------------
; 305 | Lsp_Az(lsp, Az);              /* Subframe 1 */                         
;----------------------------------------------------------------------
        LD        *SP(12),A
        RSBX      FRCT
        RSBX      OVM
        STL       A,*SP(0)
        LDM       SP,A
        CALLD     #_Lsp_Az              ; |305| 
        ADD       #2,A

;----------------------------------------------------------------------
; 307 | Lsp_Az(lsp_new, &Az[MP1]);    /* Subframe 2 */                         
;----------------------------------------------------------------------
        RSBX      OVM
        LD        *SP(12),A
        RSBX      FRCT
        ADD       #11,A,A               ; |307| 
        STL       A,*SP(0)
        LD        *SP(13),A
        CALL      #_Lsp_Az              ; |307| 

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




;***************************************************************
;* UNDEFINED EXTERNAL REFERENCES                               *
;***************************************************************
	.global	_L_Extract
	.global	_Mpy_32_16
	.global	_L_crshft_r
	.global	_table
	.global	_slope
	.global	_table2
	.global	_slope_cos
	.global	_slope_acos		

	

⌨️ 快捷键说明

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