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

📄 vq_subvec4.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     Vq_subvec4 in q_plsf_3.c                               **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**   xar2---Word16 *lsf_r1                                                 **
**   xar3---Word16 *dico		                                           **
**   xar4---Word16 *wf1  		                                           **
**   ar7---Word16 dico_size		                                           **
**                                                                         **
** Outputs:            lsf_r1[]                                            **
**                                                                         **
** Return value :       al---Word16 index                                  **
**   		                                                               **
** Attribute    :       Cycles: 36340       Pm: 38                         **
**                      Modified Registers:  all                           **
**                                                                         **
** Programmer   :       YANG zhiwei                                        **
*****************************************************************************

      .global _Vq_subvec4
  
      .ref MAX_32   
 
_Vq_subvec4:  
	   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_69:
          bar		_line_97,ar0,ar7,eq		;if( i = dico_size ) ,jump to _line_97
  		  mov		ar1,#0
       	  movb		xar6,#0					;dist = 0
_loop_71:
	       	  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,#4
			  bf		_loop_71,lt				;if(ar1 < 4),jump to _loop_71
			  
	   	  cmpl		acc,xar5					;cmp dist with dist_min
	   	  bf		_line_69,geq				;if(dist >= dist_min),then jump to _line_69
		  movl		xar5,acc					;else,dist_min = dist
		  mov		*-sp[4],ar0					;index = i
_line_69:		  	
		  inc 	  	ar0							;i++
		  bf		_loop_69,unc
_line_97:	 
	   mov		acc,*-sp[4]					;al = index
	   lsl		acc,2
	   addl		acc,*-sp[2]
	   movl		xar3,acc					;p_dico = &dico[shl (index, 2)]
		  
       mov		ar0,#0
_loop_98:
          mov		al,*xar3++		
	   	  mov		*+xar2[ar0],al			;lsf_r1[i] = *p_dico++
	      inc		ar0
	      cmp		ar0,#4
	      bf		_loop_98,lt	
	   mov	 	al,*-sp[4]					;al = index
	   subb		sp,#6
	   lretr

⌨️ 快捷键说明

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