📄 d_plsf_3.asm
字号:
*****************************************************************************
** Description: D_plsf_3() in d_plsf_3.c **
** **
** Inputs **
** **
** D_plsfState *st **
** xar2---Word16 *indice **
** xar3---Word16 *lsp1_q **
** **
** Outputs: **
** **
** D_plsfState *st **
** xar3---Word16 *lsp1_q **
** **
** Return value : **
** **
** Attribute : Cycles: 62 Pm: 2322 **
** Modified Registers: acc,p,t,xar0,xar2-7 **
** **
** Programmer : YANG zhiwei **
*****************************************************************************
.global _D_plsf_3
.ref _reorder
.ref _copy
.ref _lsf_lsp
.ref dico1_lsf
.ref dico2_lsf
.ref mr515_3_lsf
.ref pred_fac
.ref mean_lsf
.ref past_r_q
.ref past_lsf_q
.ref _buffer2
.ref M
.ref LSF_GAP
_D_plsf_3:
movl xar4,#dico1_lsf ;xar4 point to p_cb1(dico1_lsf)
mov t,*xar2++ ;al = index = *indice++
mpy acc,t,#3 ;acc = al * 3
addl xar4,acc ;xar4 = p_dico = &p_cb1[add(index, add(index, index))]
movl xar5,#_buffer2 ;xar5 point to lsf1_r
mov al,*xar4++
mov *xar5++,al ;lsf1_r[0] = *p_dico++;
mov al,*xar4++
mov *xar5++,al ;lsf1_r[1] = *p_dico++;
mov al,*xar4++
mov *xar5++,al ;lsf1_r[2] = *p_dico++;
movl xar4,#dico2_lsf ;xar4 point to p_cb2(dico2_lsf)
mov al,*xar2++ ;al = index = *indice++
;lsl al,#1 ;index = shl(index,1)
mpy acc,al,#3*2 ;acc = al * 3 * 2
addl xar4,acc ;xar4 = p_dico = &p_cb2[add(index, add(index, index))]
mov al,*xar4++
mov *xar5++,al ;lsf1_r[3] = *p_dico++;
mov al,*xar4++
mov *xar5++,al ;lsf1_r[4] = *p_dico++;
mov al,*xar4++
mov *xar5++,al ;lsf1_r[5] = *p_dico++;
movl xar4,#mr515_3_lsf ;xar4 point to p_cb3(mr515_3_lsf)
mov acc,*xar2++ ;acc = index = *indice++
lsl acc,#2 ;index = shl(index,2)
addl xar4,acc ;xar4 = p_dico = &p_cb3[shl(index, 2)]
mov al,*xar4++
mov *xar5++,al ;lsf1_r[6] = *p_dico++;
mov al,*xar4++
mov *xar5++,al ;lsf1_r[7] = *p_dico++;
mov al,*xar4++
mov *xar5++,al ;lsf1_r[8] = *p_dico++;
mov al,*xar4++
mov *xar5++,al ;lsf1_r[9] = *p_dico++;
mov ar0,#M-1 ;M loops
movl xar4,#past_r_q
movl xar5,#pred_fac
movl xar6,#mean_lsf
movl xar7,#_buffer2+16 ;xar7 point to lsf1_q
movl xar2,#_buffer2 ;xar2 point to lsf1_r
_loop_120:
mov t,*xar4 ;t = past_r_q[i]
mpy acc,t,*xar5++ ;acc = past_r_q[i] * pred_fac[i]
lsl acc,#1 ;ah = mult(st->past_r_q[i], pred_fac[i])
add ah,*xar6++ ;ah = add(mean_lsf[i], mult(st->past_r_q[i], pred_fac[i]))
add ah,*xar2 ;ah = add(lsf1_r[i], temp)
mov *xar7++,ah ;lsf1_q[i] = ah
mov al,*xar2++ ;al = lsf1_r[i]
mov *xar4++,al ;past_r_q[i] = al
banz _loop_120,ar0-- ;if ( i < M ) then jump to _loop_120
movl xar7,#_buffer2+16 ;xar7 point to lsf1_q
mov ar1,#LSF_GAP
mov ar2,#M
lcr _reorder
movl xar2,#_buffer2+16 ;xar2 point to lsf1_q
push xar3 ;store address of lsp1_q[]
movl xar3,#past_lsf_q ;xar3 point to past_lsf_q
mov ar1,#M
lcr _copy
pop xar3 ;restore address of lsp1_q[]
movl xar2,#_buffer2+16 ;xar2 point to lsf1_q
lcr _lsf_lsp
lretr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -