📄 vq_subvec3.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 + -