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

📄 vq_subvec3.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     function_name() in file.c                              **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**   xar2---Word16 *lsf_r1                                                 **
**   xar3---Word16 *dico		                                           **
**   xar4---Word16 *wf1  		                                           **
**   ar7---Word16 dico_size		                                           **
**   ar7h---Word16 use_half		                                           **
**                                                                         **
** Outputs:            lsf_r1[]                                            **
**                                                                         **
** Return value :       al---Word16 index                                  **
**   		                                                               **
** Attribute    :       Cycles:             Pm: 49                         **
**                      Modified Registers:  acc,p,t,ar0,ar1,xar3,xar5-6   **
**                                                                         **
** Programmer   :       YANG zhiwei                                        **
*****************************************************************************

      .global _Vq_subvec3
  
	  .ref MAX_32   
 	  
_Vq_subvec3:  
	   addb 	sp,#6
       movl		xar5,#MAX_32			;dist_min = MAX_32
       movl		*-sp[2],xar3			;store *dico in buffer3
       
       mov		ar0,#0					;i = 0
       mov		*-sp[4],#0			;index = 0
       
_loop_126:
          bar		_line_172,ar0,ar7,eq		;if( i = dico_size ) ,jump to _line_172
  		  mov		ar1,#0
       	  movb		xar6,#0					;dist = 0
_loop_128:
	       	  mov		al,*+xar2[ar1]			;al = lsf_r1[i]
    	   	  sub		al,*xar3++				;al = temp = sub (lsf_r1[0], *p_dico++)
       		  mov		t,*+xar4[ar1]			;t = wf1[i]
          	  mpy		acc,t,al
          	  lsl		acc,1					;ah = temp = mult (wf1[0], temp)
     	      mov		t,ah
       		  mpy		p,t,ah					
        	  movl		acc,xar6				;restore dist from xar6
        	  addl		acc,p<<pm				;dist = L_mac (dist, temp, temp)
        	  movl		xar6,acc				;store dist into xar6
		  	  inc		ar1
			  cmp		ar1,#3
			  bf		_loop_128,lt				;if(ar1 < 3),jump to _loop_128
			  
	   	  cmpl		acc,xar5					;cmp dist with dist_min
	   	  bf		_line_126,geq				;if(dist >= dist_min),then jump to _line_126
		  movl		xar5,acc					;else,dist_min = dist
		  mov		*-sp[4],ar0				;index = i
_line_126:		  	
		  inc 	  	ar0							;i++
		  movl		xt,xar7
		  cmp		t,#0
		  bf		_loop_126,eq				;use_half = 0, jump to _loop_126
		  addb		xar3,#3						;else, p_dico = p_dico + 3
		  bf		_loop_126,unc  
_line_172:
	    movl	xt,xar7
        cmp		t,#0
	    bf		_line_146,eq					;use_half = 0, jump to _line_146
	    mpy		p,*-sp[4],#3				;acc = index * 3
	    movl    acc,  p
	    lsl		acc,1
	    addl	acc,*-sp[2]
	    movl	xar3,acc			    		;p_dico = &dico[shl(add(index, add(index, index)),1)]
		bf		_line_177,unc
_line_146:	
	    mpy		p,*-sp[4],#3				;acc = index * 3
	    movl	acc,p
	    addl	acc,*-sp[2]
	    movl	xar3,acc						;p_dico = &dico[add(index, add(index, index))]
_line_177:
		mov		ar0,#0
_loop_177:
          mov		al,*xar3++		
	   	  ;mov		*+xar2[ar0],al			;lsf_r1[i] = *p_dico++
	      mov		*xar2++,al				;lsf_r1[i] = *p_dico++
	      inc		ar0
	      cmp		ar0,#3
	      bf		_loop_177,lt	
	    mov	 	al,*-sp[4]				;al = index
	    subb 	sp,#6
	    lretr   

⌨️ 快捷键说明

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