📄 spstproc.asm
字号:
*****************************************************************************
** Description: spstproc() in file.c **
** **
** Inputs **
** _buffer1---Word16 *speech **
** ar0---Word16 i_subfr **
** ar1---Word16 gain_pit
** ar2---Word16 gain_code **
** _buffer1+2---Word16 *Aq
** _buffer1+4---Word16 Synth[]
** _buffer1+6---Word16 Xn[]
** _buffer1+8---Word16 code[]
** _buffer1+10---Word16 y1[]
** _buffer1+12---Word16 y2[]
** xar3---Word16 *mem_syn
**
** **
** Outputs: **
** xar3---Word16 *mem_syn
** xar4---Word16 *mem_err
** xar5---Word16 *mem_w0
** xar6---Word16 *exc
** xar7---Word16 *sharp **
**
**
** **
** Temporary:
**
** **
** Return value : **
** **
** Attribute : Cycles: 19382 Pm: 94 **
** Modified Registers: xar0-xar7,acc,p,t **
** **
** Programmer : Zhang Xin **
***************************************************************************
.global _spstproc
.ref _buffer1
.ref _buffer2
.ref _buffer3
.ref _Syn_filt
.ref SHARPMAX
.ref L_SUBFR
_spstproc:
addb sp,#20
mov *-sp[2],ar1
mov *-sp[4],ar0
mov *-sp[6],ar2
movl *-sp[8],xar3
movl *-sp[10],xar5
movl *-sp[12],xar4
movl *-sp[14],xar7
movl *-sp[16],xar6
mov al,@ar1
mov *xar7,al
movl xar5,#_buffer1+8
movl xar5,*xar5 ;xar5的值为code[]的首址
mov ar3,#L_SUBFR
dec ar3
cmp al,#SHARPMAX
sb _L1,GT
sb _L2,UNC
_L1:
mov *xar7,#SHARPMAX
_L2:
zapa
mov al,@ar0 ;mov acc, @ar0
addl xar6,acc ;计算exc[i + i_subfr]
_L3:
zapa
mov t,@ar1
mpy p,t,*xar6
addl acc,p<<pm ;L_temp = L_mult (exc[i + i_subfr], pitch_fac);
mov t,@ar2
mpy p,t,*xar5++
addl acc,p<<pm ;L_temp = L_mac (L_temp, code[i], gain_code);
lsl acc,#1
add acc,#0x0800<<4
mov *xar6++,ah ;exc[i + i_subfr] = round (L_temp)
banz _L3,ar3--
movl xar7,#_buffer1+2
movl xar7,*xar7 ;*Aq
subb xar6,#L_SUBFR
movl xar1,@xar6 ;&exc[i_subfr]
movl xar2,#_buffer1+4
movl xar2,*xar2
mov ah, #0
mov al,@ar0 ;mov acc, ar0
addl xar2,acc ;&synth[i_subfr]
movl xar3,*-sp[8]
mov ar0,#L_SUBFR
mov ar4,#1
LCR _Syn_filt
mov ar3,#9 ;设置循环次数
addb xar2,#30 ;synth[i_subfr + i]
movl xar7,#_buffer1
movl xar7,*xar7
movl acc,*-sp[4]
addb acc,#30
mov ah, #0
addl xar7,acc ;speech[i_subfr + i] ??
movl xar0,#_buffer1+10
movl xar0,*xar0 ;xar0->y1[]
movl xar1,#_buffer1+12
movl xar1,*xar1 ;xar1->y2[]
movl xar6,#_buffer1+6
movl xar6,*xar6 ;xar6->xn[]
movl xar4,*-sp[12]
addb xar0,#30
addb xar1,#30
addb xar6,#30
movl xar5,*-sp[10]
_Loop_124:
movl *-sp[18],xar3
mov al,*xar7++
sub al,*xar2++
mov *xar4++,al ;mem_err[j] = sub(speech[i_subfr + i],synth[i_subfr + i])
zapa
mov t,*xar0++
mpy p,t,*-sp[2]
addl acc,p<<pm
lsl acc,#1
mov ar3,ah ;temp
zapa
mov t,*xar1++
mpy p,t,*-sp[6] ;L_mult(y2[i], gain_code)
addl acc,p<<pm
lsl acc,#2
add ah,@ar3
mov al,*xar6++
sub al,@ah
mov *xar5++,al
movl xar3,*-sp[18]
banz _Loop_124,ar3--
movl xar3,*-sp[8]
movl xar4,*-sp[12]
movl xar5,*-sp[10]
movl xar6,*-sp[16]
movl xar7,*-sp[14]
subb sp,#20
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -