?? lspgetq.asm
字號:
.mmregs
.include "ld8a.inc"
.include "tab_ld8a.inc"
.include "ld8a.inc"
.ref lsf_q
.ref freq_prev
.global Lsp_prev_extract
.global Lsp_expand_1
.global Lsp_expand_2
.global Lsp_expand_1_2
.global Lsp_get_quant
.bss buf3,10
.bss _stable_warn,1 ;1---low_warn,2--high_warn,0--no_warn
.global _stable_warn
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_get_quant(
; Word16 lspcb1[][M], /* (i) Q13 : first stage LSP codebook */
; Word16 lspcb2[][M], /* (i) Q13 : Second stage LSP codebook */
; Word16 code0, /* (i) : selected code of first stage */
; Word16 code1, /* (i) : selected code of second stage */
; Word16 code2, /* (i) : selected code of second stage */
; Word16 fg[][M], /* (i) Q15 : MA prediction coef. */
; Word16 freq_prev[][M], /* (i) Q13 : previous LSP vector */
; Word16 lspq[], /* (o) Q13 : quantized LSP parameters */
; Word16 fg_sum[] /* (i) Q15 : present MA prediction coef. */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_get_quant:
pshm ar0
pshm ar2
pshm ar3
pshm ar4
frame -5 ;*sp(4)--code0
;lspcb1,lspcb2,code0--cand[mode_index]--a,
;code1--tindex1[mode_index]--*sp(10)
;code2--tindex2[mode_index]--*sp(11)
;fg[][M]--fg[mode_index]--*sp(12)
;freq_prev,lspq--lsf_q,fg_sum[]--fg_sum[mode_index]--*sp(13)
stl a,*sp(4)
stm #5,t
mpy *sp(4),b
ld #lspcb1,a
add b,a
stlm a,ar2 ;ar2--lspcb1[code0]
mpy *sp(10),b
ld #lspcb2,a
add b,a
stlm a,ar3
stm #buf3,ar4
stm #NC-1,brc
rptb lgq_rep1-1
add *ar2+,*ar3+,b
sth b,*ar4+
lgq_rep1:
stm #5,t
mpy *sp(11),b
ld #lspcb2,a
add b,a
add #5,a
stlm a,ar3
stm #NC-1,brc
rptb lgq_rep2-1
add *ar2+,*ar3+,b
sth b,*ar4+
lgq_rep2:
stm #GAP1,*sp(0)
ld #buf3,a
call Lsp_expand_1_2
stm #GAP2,*sp(0)
ld #buf3,a
call Lsp_expand_1_2
st #lsf_q,*sp(0)
ld *sp(12),a
stl a,*sp(1)
st #freq_prev,*sp(2)
ld *sp(13),a
stl a,*sp(3)
ld #buf3,a
call Lsp_prev_compose
st #freq_prev,*sp(0)
ld #buf3,a
call Lsp_prev_update
ld #lsf_q,a
call Lsp_stability
frame 5
popm ar4
popm ar3
popm ar2
popm ar0
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_expand_1(
; Word16 buf[], /* (i/o) Q13 : LSP vectors */
; Word16 gap /* (i) Q13 : gap */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_expand_1:
pshm ar3
pshm ar4 ;*sp(3)--gap
stlm a,ar3 ;ar3--buf
add #1,a
stlm a,ar4 ;ar4--buf(1)
stm #NC-2,brc
rptb le1_rep-1
sub *ar3,*ar4,b
add *sp(3),16,b
ld b,-1,b
bc le1_n,bleq
ld *ar3,16,a
sub b,a
sth a,*ar3+
add *ar4,16,b,a
sth a,*ar4+
le1_n:
nop
le1_rep:
popm ar4
popm ar3
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_expand_2(
; Word16 buf[], /* (i/o) Q13 : LSP vectors */
; Word16 gap /* (i) Q13 : gap */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_expand_2:
pshm ar3
pshm ar4 ;*sp(3)--gap
add #4,a
stlm a,ar3 ;ar3--buf(4)
add #1,a
stlm a,ar4 ;ar4--buf(5)
stm #NC-1,brc
rptb le2_rep-1
sub *ar3,*ar4,b
add *sp(3),16,b
ld b,-1,b
bc le2_n,bleq
ld *ar3,16,a
sub b,a
sth a,*ar3+
add *ar4,16,b,a
sth a,*ar4+
le2_n:
nop
le2_rep:
popm ar4
popm ar3
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_expand_1_2(
; Word16 buf[], /* (i/o) Q13 : LSP vectors */
; Word16 gap /* (i) Q13 : gap */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_expand_1_2:
pshm ar3
pshm ar4 ;*sp(3)--gap
stlm a,ar3 ;ar3--buf
add #1,a
stlm a,ar4 ;ar4--buf(1)
stm #M-2,brc
rptb le12_rep-1
sub *ar3,*ar4,b
add *sp(3),16,b
ld b,-1,b
bc le12_n,bleq
ld *ar3,16,a
sub b,a
sth a,*ar3+
add *ar4,16,b,a
sth a,*ar4+
le12_n:
nop
le12_rep:
popm ar4
popm ar3
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_prev_compose(
; Word16 lsp_ele[], /* (i) Q13 : LSP vectors */
; Word16 lsp[], /* (o) Q13 : quantized LSP parameters */
; Word16 fg[][M], /* (i) Q15 : MA prediction coef. */
; Word16 freq_prev[][M], /* (i) Q13 : previous LSP vector */
; Word16 fg_sum[] /* (i) Q15 : present MA prediction coef. */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_prev_compose:
pshm ar0
pshm ar2
pshm ar3
pshm ar4
pshm ar5
pshm ar6
frame -1 ;lsp_ele--a,lsp--*sp(8),fg--*sp(9),freq_prev--*sp(10)
;fg_sum--*sp(11)
stm #M,ar0
stlm a,ar2
mvdk *sp(11),ar3
mvdk *sp(8),ar6
st #0,*sp(0)
lpcom_rep1:
mpy *ar2+,*ar3+,b
ld *sp(10),a
add *sp(0),a
stlm a,ar4
ld *sp(9),a
add *sp(0),a
stlm a,ar5
stm #MA_NP-1,brc
rptb lpcom_rep2-1
mac *ar4+,*ar5+,b
ld *ar4+0,t
ld *ar5+0,t
lpcom_rep2:
sth b,*ar6+
addm #1,*sp(0)
ld *sp(0),16,a
sub #M,16,a
bc lpcom_rep1,alt
frame 1
popm ar6
popm ar5
popm ar4
popm ar3
popm ar2
popm ar0
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_prev_extract(
; Word16 lsp[M], /* (i) Q13 : unquantized LSP parameters */
; Word16 lsp_ele[M], /* (o) Q13 : target vector */
; Word16 fg[MA_NP][M], /* (i) Q15 : MA prediction coef. */
; Word16 freq_prev[MA_NP][M], /* (i) Q13 : previous LSP vector */
; Word16 fg_sum_inv[M] /* (i) Q12 : inverse previous LSP vector */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_prev_extract:
pshm ar0
pshm ar1
pshm ar2
pshm ar3
pshm ar4
pshm ar5
;*sp(7)--lsp_ele,*sp(8)--fg
;*sp(9)--freq_prev,*sp(10)--fg_sum_inv
stlm a,ar1 ;ar1--lsp,ar2--lsp_ele,ar3--fg
mvdk *sp(7),ar2 ;ar4--freq_prev,ar5--fg_sum_inv
mvdk *sp(10),ar5
stm #M,ar0
ld #M,a
lpe_rep:
ld *ar1+,16,b
mvdk *sp(8),ar3 ;fg[][j]
mvdk *sp(9),ar4 ;freq_prev[][j]
stm #MA_NP-1,brc
rptb lpe_rep1-1
mas *ar4,*ar3,b
ld *ar4+0,t
ld *ar3+0,t
lpe_rep1:
addm #1,*sp(8)
addm #1,*sp(9)
ld b,-16,b
stlm b,t
mpy *ar5+,b
ld b,-3,b
sth b,*ar2+
sub #1,a
bc lpe_rep,agt
popm ar5
popm ar4
popm ar3
popm ar2
popm ar1
popm ar0
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_prev_update(
; Word16 lsp_ele[M], /* (i) Q13 : LSP vectors */
; Word16 freq_prev[MA_NP][M] /* (i/o) Q13 : previous LSP vectors */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_prev_update:
pshm ar2
pshm ar3
pshm ar4
;Word16 freq_prev--*sp(4)
add #9,a
stlm a,ar4 ;ar4--lsp_ele(9)
ld *sp(4),b ;ar2--freq_prev[k-1](9)
add #29,b
stlm b,ar2
ld *sp(4),b ;ar3--freq_prev[k](9)
add #39,b
stlm b,ar3
rpt 29
mvdd *ar2-,*ar3-
rpt 9
mvdd *ar4-,*ar3-
popm ar4
popm ar3
popm ar2
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_stability(
; Word16 buf[] /* (i/o) Q13 : quantized LSP parameters */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_stability:
pshm ar2
pshm ar3
frame -1
stl a,*sp(0)
stlm a,ar3 ;ar3--
add #1,a
stlm a,ar2
st #0,*(_stable_warn)
stm #M-2,brc
rptb lstbl_rep1-1
sub *ar2,*ar3,b
bc lstbl_nochange,bgeq
ld *ar2,b
mvdd *ar3,*ar2
stl b,*ar3
lstbl_nochange:
ld *ar3+,a
ld *ar2+,a
lstbl_rep1:
mvdk *sp(0),ar3
ld *ar3,16,b
sub #L_LIMIT,b
bc lstbl_stablel,bgeq
st #L_LIMIT,*ar3
st #1,*(_stable_warn)
lstbl_stablel:
mvdk *sp(0),ar3
ld *sp(0),a
add #1,a
stlm a,ar2
stm #M-2,brc
rptb lstbl_rep2-1
sub *ar2,*ar3,b
sub #GAP3,16,b
bc lstbl_addgap,bgeq
ld *ar3,16,b
add #GAP3,16,b
sth b,*ar2
lstbl_addgap:
ld *ar3+,a
ld *ar2+,a
lstbl_rep2:
ld *sp(0),a
add #M-1,a
stlm a,ar3
ld *ar3,16,b
sub #M_LIMIT,16,b
bc lstbl_stableh,bleq
st #M_LIMIT,*ar3
st #2,*(_stable_warn)
lstbl_stableh:
frame 1
popm ar3
popm ar2
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -