chebps.asm

来自「基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是sta」· 汇编 代码 · 共 116 行

ASM
116
字号
*****************************************************************************
** Description:     Chebps() in az_lpc.c                                   **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**   ar6---Word16 x                                                        **
**   xar2---Word16 f[]                                                     **
**   ar7---Word16 n                                                        **
**                                                                         **
** Outputs:                                                                **
**                                                                         **
** Return value :       ah                                                 **
**                                                                         **
** Attribute    :       Cycles:420         Pm: 47                          **
**                      Modified Registers:  acc,p,t,ar0,ar1,xar3-5        **
**                                                                         **
** Programmer   :       YANG zhiwei                                        **
*****************************************************************************

      .global _Chebps
		
_Chebps: 
		mov		acc,#0x0100 
		lsl		acc,#16
        movl	xar5,acc	 				;b2_h = 256,b2_l = 0; 
        
        zapa
        mpy		p,ar6,#512					;p = x * 512
        
        mov 	ar0,#1						;i = 1
     
        mpya	p,*+xar2[ar0],#8192			;acc = L_mult (x, 512),p = f[1] * 8192
        addl	acc,p<<pm
        
        lsr		al,1						;L_Extract( acc ) to b1
        movl    xar4,acc
        
_loop_77:
        inc     ar0							;i++
        bar		_line_93,ar0,ar7,eq		    ;i = n ,jump to _line_93
        ;movl	acc,xar4					;acc = b1_h,b1_l
        mov		ar1,ah
        zapa
        mov     t,ar6						;t = x
        mpya	p,t,ar1
        mpya    p,t,ar4
        movh	t,p
        add 	acc,t<<1					;Mpy_32_16 (b1_h, b1_l, x)
                
        lsl		acc,#1
        
        movl	xt,xar5						;t = b2_h
        ;push	xar5
        push	ar5
        mov		ar5,#0x8000
        mpy		p,t,ar5
        ;mpy		p,t,#0x8000
        ;pop		xar5
        pop		ar5
        addl	acc,p<<Pm					;L_mac (t0, b2_h, (Word16) 0x8000)
                    
        mpy     p,ar5,#1
        subl	acc,p<<pm 					;L_msu (t0, b2_l, 1)
        
        mpy		p,*+xar2[ar0],#8192
        addl	acc,p<<Pm					;L_mac (t0, f[i], 8192)		
        
        lsr		al,1
        movl	xar3,acc					;L_Extract (t0, &b0_h, &b0_l)
        
        movl	xar5,xar4					;/* b2 = b1; */
        movl	xar4,xar3					;/* b1 = b0; */
        
        bf		_loop_77,unc				;jump to _loop_77
_line_93:
		;movl	acc,xar4					;acc = b1_h,b1_l
        mov		ar1,ah
        zapa
        mov     t,ar6						;t = x
        mpya	p,t,ar1
        mpya    p,t,ar4
        movh	t,p
        add 	acc,t<<1					;Mpy_32_16 (b1_h, b1_l, x)
        
        movl	xt,xar5						;t = b2_h
        ;push	xar5
        push	ar5
        mov		ar5,#0x8000
        ;mpy		p,t,#0x8000
        mpy		p,t,ar5
        ;pop		xar5
        pop		ar5
        addl	acc,p<<Pm					;L_mac (t0, b2_h, (Word16) 0x8000)
        
        mpy     p,ar5,#1
        subl	acc,p<<pm 					;L_msu (t0, b2_l, 1)
        
        mpy		p,*+xar2[ar0],#4096
        addl	acc,p<<Pm					;L_mac (t0, f[i], 4096)	
        
        sbf	    _end,eq						;if ( acc = 0 ) ,jump to _end
        bf		_orig_pos,gt				;if (acc > 0),jump to _orig_pos
		lsl		acc,#6						;else,N = 0,negative
		bf		_end,lt  					;if ( N < 0 ),sign not changed												;else orig neg
		mov		ah,#0x8000
		;movb	al,#0
		bf		_end,unc
_orig_pos:
        lsl		acc,#6								
        bf		_end,gt 					;if ( N > 0 ),sign not changed
        mov		ah,#0x7fff
        ;mov		al,#0xffff
_end:
		LRETR

⌨️ 快捷键说明

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