?? lpc.asm
字號(hào):
stm #old_A+1,ar1
stm #M-1,brc
rptb endrep8-1 ;for(i=1; i<=M; i++)
ld *ar6+,16,b ;t0 = L_Comp(Ah[i], Al[i])
add *ar7+,1,b ;old_A[i] = A[i] = round(L_shl(t0, 1))
ld b,1,b
add #4000h,1,b
sth b,*ar4+
sth b,*ar1+
endrep8:
;old_rc[0] = rc[0]
mvdk *sp(19),ar5
stm #old_rc,ar2
mvdd *ar5+,*ar2+
;old_rc[1] = rc[1]
mvdd *ar5,*ar2
Le_Exit:
frame 9
popm ar7
popm ar6
pshm ar1
popm st1
popm st0
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;static Word16 Chebps_11(Word16 x, Word16 f[], Word16 n)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_Chebps_11:
pshm st0
pshm st1
pshm ar2
frame -7 ;*sp(0)--b0_h,*sp(1)--b0_l,*sp(2)--b1_h,*sp(3)--b1_l
;*sp(4)--b2_h,*sp(5)--b2_l,*sp(6)--x
;*sp(11)--f,*sp(12)--n
ssbx sxm
ssbx ovm
ssbx frct
mvdk *sp(11),ar2 ;ar2--f
stl a,*sp(6)
ld *ar2+,b ;ar2--f[1]
;All computation are done in Q24
st #256,*sp(4) ;b2 = 1.0 in Q24 DPF
st #0,*sp(5)
stlm a,t
mpy #512,b ;2*x in Q24
mac *ar2+,#4096,b ;+ f[1] in Q24,ar2--f[2]
sth b,*sp(2)
sub *sp(2),16,b
ld b,-1,b
stl b,*sp(3) ;b1 = 2*x + f[1]
ld *sp(12),a ;for (i = 2; i<n; i++)
sub #3,a
stlm a,brc
ssbx braf
rptb ch_11-1
ld *sp(6),t ;t0 = 2.0*x*b1
mpy *sp(2),b
mpy *sp(3),a
add a,-15,b
ld b,1,b
ld *sp(4),16,a ;t0 = 2.0*x*b1 - b2
add *sp(5),1,a
sub a,b
add *ar2+,13,b ;t0 = 2.0*x*b1 - b2 + f[i]
sth b,*sp(0) ;b0 = 2.0*x*b1 - b2 + f[i]
sub *sp(0),16,b
ld b,-1,b
stl b,*sp(1)
ld *sp(5),a ;b2 = b1
stl a,*sp(3)
ld *sp(4),a
stl a,*sp(2)
ld *sp(3),a ;b1 = b0
stl a,*sp(1)
ld *sp(2),a
stl a,*sp(0)
ch_11:
ld *sp(6),t ;t0 = x*b1
mpy *sp(2),b
mpy *sp(3),a
add a,-15,b
ld *sp(4),16,a ;t0 = x*b1 - b2
add *sp(5),1,a
sub a,b
add *ar2,12,b ;t0 = x*b1 - b2 + f[i]/2
ld b,6,b ; Q24 to Q30 with saturation
ld b,a
ld a,-16,a
frame 7
popm ar2
popm st1
popm st0
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;static Word16 Chebps_10(Word16 x, Word16 f[], Word16 n)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_Chebps_10:
pshm st0
pshm st1
pshm ar2
frame -7 ;*sp(0)--b0_h,*sp(1)--b0_l,*sp(2)--b1_h,*sp(3)--b1_l
;*sp(4)--b2_h,*sp(5)--b2_l,*sp(6)--x
;*sp(11)--f,*sp(12)--n
ssbx sxm
ssbx ovm
ssbx frct
mvdk *sp(11),ar2 ;ar2--f
stl a,*sp(6)
ld *ar2+,b ;ar2--f[1]
;All computation are done in Q24
st #128,*sp(4) ;b2 = 1.0 in Q23 DPF
st #0,*sp(5)
stlm a,t
mpy #256,b ;2*x in Q23
mac *ar2+,#4096,b ;+ f[1] in Q23,ar2--f[2]
sth b,*sp(2)
sub *sp(2),16,b
ld b,-1,b
stl b,*sp(3) ;b1 = 2*x + f[1]
ld *sp(12),a
sub #3,a
stlm a,brc
ssbx braf
rptb ch_10-1
ld *sp(6),t ;t0 = 2.0*x*b1
mpy *sp(2),b
mpy *sp(3),a
add a,-15,b
ld b,1,b
ld *sp(4),16,a ;t0 = 2.0*x*b1 - b2
add *sp(5),1,a
sub a,b
add *ar2+,13,b ;t0 = 2.0*x*b1 - b2 + f[i]
sth b,*sp(0) ;b0 = 2.0*x*b1 - b2 + f[i]
sub *sp(0),16,b
ld b,-1,b
stl b,*sp(1)
ld *sp(5),a ;b2 = b1
stl a,*sp(3)
ld *sp(4),a
stl a,*sp(2)
ld *sp(3),a ;b1 = b0
stl a,*sp(1)
ld *sp(2),a
stl a,*sp(0)
ch_10:
ld *sp(6),t ;t0 = x*b1
mpy *sp(2),b
mpy *sp(3),a
add a,-15,b
ld *sp(4),16,a ;t0 = x*b1 - b2
add *sp(5),1,a
sub a,b
add *ar2,12,b ;t0 = x*b1 - b2 + f[i]/2
ld b,7,b ; Q23 to Q30 with saturation
ld b,a
ld a,-16,a
frame 7
popm ar2
popm st1
popm st0
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Az_lsp(
; Word16 a[], /* (i) Q12 : predictor coefficients */
; Word16 lsp[], /* (o) Q15 : line spectral pairs */
; Word16 old_lsp[] /* (i) : old lsp[] (in case not found 10 roots) */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_Az_lsp:
pshm st0
pshm st1
pshm ar1
pshm ar6
pshm ar7
frame -20 ;*sp(2)--j,*sp(3)--nf,*sp(4)--ip
;*sp(5)--xlow,*sp(6)--ylow,*sp(7)--xhigh
;*sp(8)--yhigh,*sp(9)--xmid,*sp(10)--ymid
;*sp(11)--xint,*sp(12)--x,*sp(13)--y
;*sp(14)--sign,*sp(15)--exp,*sp(16)--coef
;*sp(17)--ovf_coef,*sp(18)--pChebps,
;*sp(19)--a
;*sp(26)--lsp,*sp(27)--old_lsp
rsbx ova
rsbx ovb
ssbx sxm
ssbx ovm
ssbx frct
stl a,*sp(19)
stlm a,ar2 ;ar2--a
stlm a,ar1
mvdk *sp(26),ar3 ;ar3--lsp
mvdk *sp(27),ar4 ;ar4--old_lsp
stm #grid,ar5 ;ar5--grid
stm #f1,ar6 ;ar6--f1
stm #f2,ar7 ;ar7--f2
st #_Chebps_11,*sp(18) ;pChebps = Chebps_11
st #2048,*ar6 ;f1[0] = 1.0 is in Q11
st #2048,*ar7 ;f2[0] = 1.0 is in Q11
rsbx ovb ;for (i = 0; i< NC; i++)
stm #M,ar0
ld *ar1+0,b
ld *ar2+,b
stm #NC-1,brc
rptb Az_repend1-1
ld *ar2,15,b ;x = (a[i+1] + a[M-i]) >> 1
add *ar1,15,b ;-> From Q12 to Q11
sub *ar6+,16,b ;f1[i+1] = a[i+1] + a[M-i] - f1[i]
sth b,*ar6
ld *ar2+,15,b ;x = (a[i+1] - a[M-i]) >> 1
sub *ar1-,15,b ;-> From Q12 to Q11
add *ar7+,16,b ;f2[i+1] = a[i+1] - a[M-i] + f2[i]
sth b,*ar7
Az_repend1:
bc Az_bnov,bnov
st #_Chebps_10,*sp(18) ;pChebps = Chebps_10
stm #f1,ar6
stm #f2,ar7
mvdk *sp(19),ar1
mvdk *sp(19),ar2
st #1024,*ar6 ;f1[0] = 1.0 is in Q10
st #1024,*ar7 ;f2[0] = 1.0 is in Q10
ld *ar1+0,b
ld *ar2+,b
rptb Az_bnov-1
ld *ar2,14,b ;x = (a[i+1] + a[M-i]) >> 1
add *ar1,14,b ;-> From Q11 to Q10
sub *ar6+,16,b ;f1[i+1] = a[i+1] + a[M-i] - f1[i]
sth b,*ar6
ld *ar2+,14,b ;x = (a[i+1] - a[M-i]) >> 1
sub *ar1-,14,b ;-> From Q11 to Q10
add *ar7+,16,b ;f2[i+1] = a[i+1] - a[M-i] + f2[i]
sth b,*ar7
Az_bnov:
;find the LSPs using the Chebichev pol. evaluation
st #0,*sp(3) ;nf=0
st #0,*sp(4) ;ip=0
st #f1,*sp(16) ;coef = f1
ld *ar5+,a ;xlow = grid[0]
stl a,*sp(5)
st #f1,*sp(0) ;ylow = (*pChebps)(xlow, coef, NC)
st #NC,*sp(1)
ld *sp(18),b
cala b
stl a,*sp(6)
st #0,*sp(2) ;j = 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;while ( (nf < M) && (j < GRID_POINTS) )
Az_while:
addm #1,*sp(2) ;j =add(j,1)
ld *sp(5),b ;xhigh = xlow
stl b,*sp(7)
ld *sp(6),b ;yhigh = ylow
stl b,*sp(8)
ld *ar5+,a ;xlow = grid[j]
stl a,*sp(5)
ld *sp(16),b ;ylow = (*pChebps)(xlow,coef,NC)
stl b,*sp(0)
ld *sp(18),b
cala b
stl a,*sp(6)
stlm a,t ;L_temp = L_mult(ylow ,yhigh)
mpy *sp(8),b
bc Az_ninter,bgt
;for (i = 0; i < 2; i++)
stm #1,brc
rptb Az_repend2-1
ld *sp(5),-1,a ;xmid = (xlow + xhigh)/2
add *sp(7),-1,a
stl a,*sp(9)
ld *sp(18),b ;ymid = (*pChebps)(xmid,coef,NC)
cala b
stl a,*sp(10)
stlm a,t ;L_temp = L_mult(ylow,ymid)
mpy *sp(6),b
bc Az_p,bgt ;if ( L_temp <= (Word32)0)
ld *sp(10),a ;yhigh = ymid
stl a,*sp(8)
ld *sp(9),a ;xhigh = xmid
stl a,*sp(7)
b Az_n
Az_p:
ld *sp(10),a ;ylow = ymid
stl a,*sp(6)
ld *sp(9),a ;xlow = xmid
stl a,*sp(5)
Az_n:
nop
Az_repend2:
ld *sp(7),16,b ;x = sub(xhigh, xlow)
sub *sp(5),16,b
sth b,*sp(12)
ld *sp(8),16,b ;y = sub(yhigh, ylow)
sub *sp(6),16,b
sth b,*sp(13)
bc Az_nz,bneq ;if(y == 0)
ld *sp(5),a ;xint = xlow
stl a,*sp(11)
b Az_z
Az_nz:
sth b,*sp(14) ;sign= y
abs b ;y = abs_s(y)
exp b ;exp = norm_s(y)
st t,*sp(15)
norm b ;y = shl(y, exp)
sth b,*sp(13)
ld #3fffh,16,b ;y = div_s( (Word16)16383, y)
rpt #14
subc *sp(3),b
stlm b,t ;t0 = L_mult(x, y)
mpy *sp(12),b
ld *sp(15),a ;t0 = L_shr(t0, sub(20, exp) )
sub #20,a
stl a,*sp(0)
ld *sp(0),asm
ld b,asm,b
stl b,*sp(13) ;y = extract_l(t0)
ld *sp(13),16,b ;if(sign < 0) y = negate(y)
ld *sp(14),16,a
xc 1,alt
neg b
sth b,*sp(13)
ld *sp(6),t ;result in Q26
mpy *sp(13),b ;t0 = L_mult(ylow, y)
ld b,-11,b ;result in Q15
ld b,8,b ;xint = sub(xlow, extract_l(t0))
ld b,8,b
ld *sp(5),16,a
sub b,a
ld a,-16,a
stl a,*sp(11)
Az_z:
stl a,*ar3+ ;lsp[nf] = xint
stl a,*sp(5) ;xlow = xint
addm #1,*sp(3) ;nf =add(nf,1)
ld *sp(4),b ;if(ip == 0)
bc Az_nz1,bneq
st #1,*sp(4) ;ip = 1
st #f2,*sp(16) ;coef = f2
b Az_z1
Az_nz1:
st #0,*sp(4) ;ip = 0
st #f1,*sp(16) ;coef = f1
Az_z1:
ld *sp(5),a ;ylow = (*pChebps)(xlow,coef,NC)
ld *sp(16),b
stl b,*sp(0)
ld *sp(18),b
cala b
stl a,*sp(6)
Az_ninter:
ld *sp(3),b ;while ( (nf < M) && (j < GRID_POINTS) )
sub #M,b
bc Az_x_while,bgeq
ld *sp(2),b
sub #GRID_POINTS,b
bc Az_x_while,bgeq
b Az_while
Az_x_while:
ld *sp(3),b ;if( sub(nf, M) < 0)
sub #M,b
bc Az_exit,bgeq
mvdk *sp(26),ar3
mvdk *sp(27),ar4
rpt #M-1
mvdd *ar4+,*ar3+
Az_exit:
frame 20
popm ar7
popm ar6
popm ar1
popm st1
popm st0
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -