📄 ph_disp.asm
字号:
*****************************************************************************
** Description: ph_disp() in ph_disp.c **
** **
** Inputs **
** **
** xar2---ph_dispState *state **
** xar3---Word16 x[] **
** ar5 ---Word16 cbGain ** **
** al ---Word16 ltpGain **
** xar4---Word16 inno[] **
** ar0 ---Word16 pitch_fac **
** **
** Outputs: **
** **
** xar3---Word16 x[] **
** xar4---Word16 inno[] **
** **
** **
** Return value : none **
** **
** Attribute : Cycles:8202 Pm: 128 **
** Modified Registers: all **
** **
** Programmer : Qi Ying **
*****************************************************************************
.global _ph_disp
.ref ph_imp_mid
.ref ph_imp_low
.ref _buffer3
.ref prevCbGain
.ref prevState
.ref lockFull
.ref onset
_ph_disp:
push xar0
push xar3
movl xar1, #3 ;ar1=i
_Loop_179:
mov ah, *+xar2[ar1]
inc ar1
mov *+xar2[ar1], ah
subb xar1, #2
cmp ar1, #0
sb _Loop_179, GEQ
mov *xar2, al ;state->gainMem[0]=ltpGain
cmp al, #14746 ;比较ltpGain和PHDTHR2LTP
sb _Line_198, GEQ
cmp al, #9830 ;比较ltpGain和PHDTHR1LTP
sb _Line_193, LEQ
mov ar6, #1 ;ar6=impNr
sb _Line_206, UNC
_Line_193:
mov ar6, #0
sb _Line_206, UNC
_Line_198:
mov ar6, #2
_Line_206:
movl xar3, #prevCbGain
mpy acc, *xar3, #16384
movl xar3, #onset
lsl acc, #3
add acc, #0x0800<<4 ;ah=tmp1
cmp ah, ar5 ;比较cbGain和tmp1
sb _Line_212, GEQ
mov *xar3, #2 ;state->onset=ONLENGTH
sb _Line_224, UNC
_Line_212:
cmp *xar3, #0
sb _Line_224, LEQ
dec *xar3
_Line_224:
cmp *xar3, #0
sb _Line_245, NEQ
mov ah, #0 ;ah=i1
mov ar1, #4
_Loop_228:
cmp *xar2++, #9830
sb _Line_235, GEQ
inc ah ;i1=add(i1,1)
_Line_235:
banz _Loop_228, ar1--
subb xar2, #5
cmp ah, #2
sb _Line_245, LEQ
mov ar6, #0 ;impNr=0
_Line_245:
movl xar3, #prevState
mov al, *xar3
movl xar3, #onset
inc al
cmp al, ar6 ;比较impNr和add(state->prevState, 1)
sb _Line_251, GEQ
cmp *xar3, #0 ;state->onset
sb _Line_251, NEQ
dec ar6
_Line_251:
cmp ar6, #2
sb _Line_258, GEQ
cmp *xar3, #0
sb _Line_258, LEQ
inc ar6
_Line_258:
cmp ar5, #10
sb _Line_264, GEQ
mov ar6, #2
_Line_264:
movl xar3, #lockFull
cmp *xar3, #1 ;sub(state->lockFull,1)==0
sb _Line_270, NEQ
mov ar6, #0
_Line_270:
movl xar3, #prevState
mov *xar3, ar6 ;state->prevState=impNr
movl xar3, #prevCbGain
mov *xar3, ar5 ;state->prevCbGain=cbGain
cmp ar6, #2
sb _Line_331, GEQ
push xar5 ;cbGain
mov ar0, #0 ;ar0=nze
movl xar5, #_buffer3 ;xar5=ps_poss[]
movl xar3, #_buffer3+40 ;xar3=inno_sav[]
mov ar1, #0 ;ar1=i
_Loop_281:
cmp ar1, #40
sb _Line_294, GEQ
cmp *+xar4[ar1], #0
sb _Line_289, EQ
mov *+xar5[ar0], ar1 ;ps_poss[nze]=i
inc ar0
_Line_289:
mov al, *+xar4[ar1]
mov *+xar3[ar1], al ;inno_sav[i]=inno[i]
mov *+xar4[ar1], #0
inc ar1
sb _Loop_281, UNC
_Line_294:
cmp ar6, #0
sb _Line_301, NEQ
movl xar6, #ph_imp_low ;xar6=ph_imp
sb _Line_307, UNC
_Line_301:
movl xar6, #ph_imp_mid ;xar6=ph_imp
_Line_307:
mov ar1, #0 ;ar1=npulse
dec ar0 ;循环次数nze
_Loop_307:
push xar0
push xar6
movz ar0, *+xar5[ar1] ;ar0=ppos
mov T, *+xar3[ar0] ;T=inno_sav[ppos]
_Loop_313:
cmp ar0, #40 ;ar0=i
sb _Line_320, GEQ
mpy acc, T, *xar6++ ;ph_imp[j++]
lsl acc, #1 ;ah=tmp1
add *+xar4[ar0], ah ;inno[i]=add(inno[i],tmp1)
inc ar0
sb _Loop_313, UNC
_Line_320:
mov ar0, #0
_Loop_320:
mov al, ar0 ;ar0=i
cmp al, *+xar5[ar1] ;ppos
sb _Line_326, GEQ
mpy acc, T, *xar6++ ;ph_imp[j++]
lsl acc, #1 ;ah=tmp1
add *+xar4[ar0], ah ;inno[i]=add(inno[i],tmp1)
inc ar0
sb _Loop_320, UNC
_Line_326:
pop xar6
pop xar0
inc ar1 ;nPulse++
banz _Loop_307, ar0--
pop xar5 ;cbGain
_Line_331:
pop xar3 ;x[]
pop xar0 ;pitch_fac
mov ar1, #0 ;ar1=i
_Loop_331:
cmp ar1, #40
sb _Line_344, GEQ
mov T, ar0 ;pitch_fac
mpy P, T, *+xar3[ar1] ;x[i]
mov T, ar5 ;cbGain
mpy acc, T, *+xar4[ar1] ;inno[i]
addl acc, P
lsl acc, #2
add acc, #0x0800<<4
mov *+xar3[ar1], ah
inc ar1
sb _Loop_331, UNC
_Line_344:
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -