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

📄 pre_proc_asm.asm

📁 g.729汇编手工优化
💻 ASM
字号:
	.mmregs
FP	.set	AR7
	.bss	_y2_hi,1,0,0
	.bss	_y2_lo,1,0,0
	.bss	_y1_hi,1,0,0
	.bss	_y1_lo,1,0,0
	.bss	_x0,1,0,0
	.bss	_x1,1,0,0

	.sect	".text"
	.global	_Pre_Process

;----------------------------------------------------------------------
;  60 | void Pre_Process(                                                      
;  61 | Word16 signal[],    /* input/output signal */                          
;  62 | Word16 lg)          /* length of signal    */                          
;----------------------------------------------------------------------
_Pre_Process:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-8
        NOP
        MVDK      *SP(12),*(AR6)     ;ar6 = lg
;----------------------------------------------------------------------
;  67 | for(i=0; i<lg; i++)                                                    
;----------------------------------------------------------------------
        SSBX      SXM
        LD        *(AR6),B               
        BC        L2,BLEQ               

        STLM      A,AR1              ;ar1 = signal[]
        LD        #_y1_hi,A
        STL       A,*SP(2)           ;sp(2) = y1_hi
        LD        #_y1_lo,A
        STL       A,*SP(3)           ;sp(3) = y1_lo
L1:    

;----------------------------------------------------------------------
;  69 | x2 = x1;                                                               
;----------------------------------------------------------------------
        LD        *(_x1),A
        STL       A,*SP(4)           ;sp(4) = x1
        MVDK      *(_x0),*(_x1)      ;x1 = x0
        MVDK      *AR1,*(_x0)        ;x0 = signal[0]   

;----------------------------------------------------------------------
;  76 | L_tmp     = Mpy_32_16(y1_hi, y1_lo, a140[1]);                          
;----------------------------------------------------------------------
        STM       #_a140,AR7
        ;RSBX      FRCT
        ;RSBX      OVM
        ;MVKD      *(_y1_lo),*SP(0)       
        ;LD        *AR7(1),A
        ;STL       A,*SP(1)
        LD        *AR7(1), B
        ;LD        *(_y1_hi),A
        MVDK      *(_y1_hi),*(AR4) ;**** 
        ;CALL      #_Mpy_32_16           
;-------------------  Mpy_32_16  --------------------------------------
        ;LD        *SP(0),T         ; T = lo
        LD         *(_y1_lo), T
        ;LD        *SP(1),B        ; B = n
        ;STLM      A,AR4           ; ar1 = hi
        SSBX      SXM
        SSBX      FRCT
        SSBX      OVM
        LD        *(BL),16,A       ; ah = n   
        NOP
        MPYA      A                ; a = L_mult(lo, n)  
        STLM      B,T              ; T = n
        STH       A,*(AR2)         ; (ar2) = L_mult(lo, n)  
        MPY       *(AR4),A         ; a = L_mult(hi, n)           
        MVMD      AR2,T            
        MAC       #1, A   

;-------------------  Mpy_32_16 End  ----------------------------------
        DST       A,*SP(6)         ;sp(6) = L_tmp      

;----------------------------------------------------------------------
;  77 | L_tmp     = L_add(L_tmp, Mpy_32_16(y2_hi, y2_lo, a140[2]));            
;----------------------------------------------------------------------
        ;MVKD      *(_y2_lo),*SP(0)      
        ;RSBX      FRCT
        ;LD        *AR7(2),A
        ;RSBX      OVM
        ;STL       A,*SP(1)
        ;LD        *(_y2_hi),A
        ;CALL      #_Mpy_32_16           
;-------------------  Mpy_32_16  --------------------------------------
        LD        *AR7(2), B
        ;LD        *(_y1_hi),A
        MVDK      *(_y2_hi),*(AR4) ;**** 
        ;LD        *SP(0),T         ; T = lo
        LD         *(_y2_lo), T
        ;LD        *SP(1),B        ; B = n
        ;STLM      A,AR4           ; ar1 = hi
        ;SSBX      SXM
        ;SSBX      FRCT
        ;SSBX      OVM
        LD        *(BL),16,A       ; ah = n   
        NOP
        MPYA      A                ; a = L_mult(lo, n)  
        STLM      B,T              ; T = n
        STH       A,*(AR2)         ; (ar2) = L_mult(lo, n)  
        MPY       *(AR4),A         ; a = L_mult(hi, n)           
        MVMD      AR2,T            
        MAC       #1, A   

;-------------------  Mpy_32_16 End  ----------------------------------
        ;SSBX      SXM
        ;SSBX      OVM
        DLD       *SP(6),B
        ;RSBX      SXM
        NOP
        ADD       A,B              ; b = L_tmp      

;----------------------------------------------------------------------
;  78 | L_tmp     = L_mac(L_tmp, x0, b140[0]);                                 
;  79 | L_tmp     = L_mac(L_tmp, x1, b140[1]);                                 
;  80 | L_tmp     = L_mac(L_tmp, x2, b140[2]);                                 
;----------------------------------------------------------------------
        LD        B,A
        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                    
               
        STM       #_b140,AR2
        ;SFTA      A,-8                  
        LD        *(_x0),T
        ;ORM       #2,*(PMST)
        ;SSBX      OVM
        ;SSBX      FRCT
        ORM       #2,*(PMST)
        MAC       *(_b140), A          
        ;RSBX      OVM
        LD        *(_x1),T
        ;SFTA      A,8                    
        ;SFTA      A,-8                  
        ;SSBX      OVM
        MAC       *AR2(1), A            
        ;RSBX      OVM
        ;NOP
        ;SFTA      A,8                   
        ;SSBX      OVM
        ;SFTA      A,-8                   
        LD        *SP(4),T
        MAC       *AR2(2), A            

;----------------------------------------------------------------------
;  81 | L_tmp     = L_shl(L_tmp, 3);      /* Q28 --> Q31 (Q12 --> Q15) */      
;----------------------------------------------------------------------
        ;RSBX      FRCT
        ;RSBX      OVM
        ;ST        #3,*SP(0)             
        ;CALL      #_L_shl               
        SFTA      A,3
        NOP
        
        DST       A,*SP(6)              

;----------------------------------------------------------------------
;  82 | signal[i] = round(L_tmp);                                              
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                    
        ;SFTA      A,-8                   
        ;SSBX      OVM
        ADD       #1,#15,A,A             
        STH       A,*AR1+                

;----------------------------------------------------------------------
;  84 | y2_hi = y1_hi;                                                         
;----------------------------------------------------------------------
        MVDK      *(_y1_hi),*(_y2_hi)   

;----------------------------------------------------------------------
;  85 | y2_lo = y1_lo;                                                         
;----------------------------------------------------------------------
        MVDK      *(_y1_lo),*(_y2_lo)   

;----------------------------------------------------------------------
;  86 | L_Extract(L_tmp, &y1_hi, &y1_lo);                                      
;----------------------------------------------------------------------
        ;LD        *SP(2),A
        ;STL       A,*SP(0)
        ;LD        *SP(3),A
        ;RSBX      OVM
        ;STL       A,*SP(1)
        ;RSBX      FRCT
        DLD       *SP(6),A             
        ;CALL      #_L_Extract   
;-----------------  L_Extract inline  ---------------------------------
        ;SSBX      SXM             ; ****
        ;RSBX      OVM
        ;SSBX      FRCT
        ;SFTA      A,8
        ;SFTA      A,-8
        ;SSBX      OVM

        MVDK      *SP(3),*(AR4)
        MVDK      *SP(2),*(AR2)
        
        LD        A,B                   
        SFTL      B,#-16,B              
        STLM      B,AR3
        MVKD      *(AR3),*AR2

        SFTA      A,-1              
        
        MVMD      AR3,T
        LD        #16384,B
        ORM       #2,*(PMST)
        MAS       *(BL), A              
        STL       A,*AR4 
;-----------------  L_Extract End     ---------------------------------        
        NOP
;----------------------------------------------------------------------
;  88 | return;                                                                
;----------------------------------------------------------------------
        BANZ      L1,*+AR6(-1)          
L2:    
        ANDM      #-833,*(ST1)
        ANDM      #-4,*(PMST)
        FRAME     #8
        POPM      AR7
        POPM      AR6
        POPM      AR1
        RET



	.sect	".text"
	.global	_Init_Pre_Process
;----------------------------------------------------------------------
;  49 | void Init_Pre_Process(void)                                            
;----------------------------------------------------------------------
_Init_Pre_Process:

;----------------------------------------------------------------------
;  51 | y2_hi = 0;                                                             
;----------------------------------------------------------------------
        ST        #0,*(_y2_hi)          ; |51| 
;----------------------------------------------------------------------
;  52 | y2_lo = 0;                                                             
;----------------------------------------------------------------------
        ST        #0,*(_y2_lo)          ; |52| 
;----------------------------------------------------------------------
;  53 | y1_hi = 0;                                                             
;----------------------------------------------------------------------
        ST        #0,*(_y1_hi)          ; |53| 
;----------------------------------------------------------------------
;  54 | y1_lo = 0;                                                             
;----------------------------------------------------------------------
        ST        #0,*(_y1_lo)          ; |54| 
;----------------------------------------------------------------------
;  55 | x0   = 0;                                                              
;----------------------------------------------------------------------
        ST        #0,*(_x0)             ; |55| 
;----------------------------------------------------------------------
;  56 | x1   = 0;                                                              
;----------------------------------------------------------------------
        ST        #0,*(_x1)             ; |56| 
        RET


;***************************************************************
;* UNDEFINED EXTERNAL REFERENCES                               *
;***************************************************************
	.global	_b140
	.global	_a140



⌨️ 快捷键说明

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