📄 codamr.asm
字号:
*****************************************************************************
** Description: codamr() in cod_amr.c **
** **
** Inputs: **
** *XAR3- Word16 new_speech[] : speech input (L_FRAME) **
** **
** Outputs: **
** *XAR4- Word16 ana[] :Analysis parameters **
** *XAR5- Word16 synth[] :Local synthesis **
** **
** Return value : **
** **
** Attribute : Cycles: Pm: **
** Modified Registers: **
** **
** Programmer : ZHOU Bei **
*****************************************************************************
.global _codamr
.ref _pre_process
.ref _lpc
.ref _copy
.ref _lsp
.ref _check_lsp
.ref _pre_big
.ref _pitch_ol
.ref _spreproc
.ref _update_gp_clipping
.ref _spstproc
.ref _code_2i40_9bits
.ref _cl_ltp
.ref _gainQuant
.ref _Prm2bits
.ref _buffer1
.ref _buffer3
.ref old_A
.ref p_window
.ref A_t
;.ref new_speech
.ref ana
.ref syn
.ref old_speech
.ref new_speech_st
.ref speech
.ref lsp_new
.ref Aq_t
.ref lsp_old_q
.ref lsp_old
.ref count
.ref gp
.ref gamma1
.ref gamma2
.ref mem_w
.ref wsp
.ref lsp_init_data
.ref old_wsp
.ref ai_zero
.ref xn
.ref error
.ref exc
.ref hvec
.ref mem_w0
.ref mem_err
.ref res
.ref res2
;.ref ol_gain_flg
.ref old_exc
.ref L_INTERPOL
.ref mem_syn
.ref sharp
.ref y1
.ref y2
.ref code
.ref xn2
.ref gCoeff
.ref MP1
.ref PIT_MAX
.ref M
.ref L_FRAME
.ref L_FRAME_BY2
.ref L_TOTAL
.ref L_WINDOW
.ref L_NEXT
.ref L_SUBFR
_codamr:
MOVW DP,#200H
;input: new_speech
movl xar3,#_buffer3
;output: ana,syn
movl xar4,#ana
movl xar5,#syn
;save input output address
ADDB SP,#26
MOVL *-SP[4],XAR3
MOVL *-SP[6],XAR4
MOVL *-SP[8],XAR5
;Call _pre_process
movl xar2,*-SP[4]
movb xar1,#0a0h
LCR _pre_process
;Copy(new_speech, st->new_speech, L_FRAME)
;AR1--length,XAR2--x[]
;Outputs:XAR3--y[]
MOV AR1,#L_FRAME
MOVL XAR2,*-SP[4]
MOVL XAR6,#new_speech_st
MOVL ACC,*XAR6
MOVL XAR3,ACC
LCR _copy
;Call _lpc
;lpc(st->lpcSt, st->p_window, st->p_window_12k2, A_t)
;*XAR3--Word16 st->levinsonSt[m+1] (old_A[])
;*XAR2--Word16 x[]
;Outputs:
;*XAR1--Word16 st->levinsonSt[m+1] (old_A[])
;*XAR4---Word16 a[]
MOVL XAR3,#old_A
MOVL XAR1,#old_A
MOVL XAR6,#p_window
MOVL ACC,*XAR6
MOVL XAR2,ACC
MOVL XAR4,#A_t
LCR _lpc
;call lsp
;lsp(st->lspSt, A_t, Aq_t, lsp_new, &ana)
;int lsp(lspState *st,az[],azQ[],lsp_new[],**anap)
;input: past_rq[M],lsp_old[M],lsp_old_q[M], xar5---Word16 az[]
;output: past_rq[M],lsp_old[M],lsp_old_q[M], xar5---Word16 az[],
; xar2---Word16 azQ[],xar3---Word16 lsp_new[],xar4---Word16 anap
MOVL XAR5,#A_t
MOVL XAR2,#Aq_t
MOVL XAR3,#lsp_new
MOVL XAR4,*-SP[6]
LCR _lsp
MOVL ACC,*-SP[6]
ADD ACC,#3
MOVL *-SP[6],ACC
;call check_lsp
;lsp_flag = check_lsp(st->tonStabSt, st->lspSt->lsp_old)
;Word16 check_lsp(tonStabState *st,Word16 *lsp)
;input: xar0--st->count,xar2--*lsp
;output: xar0--st->count
;return: al
MOVL XAR0,#count
;MOV AL,*XAR6
;MOV AR0,AL
MOVL XAR2,#lsp_old
LCR _check_lsp
MOV AL,AR6
;MOVL XAR6,#count
;MOV *XAR6,AR0
MOV *-SP[10],AL ;Save lsp_flag in *-SP[10]
;for(subfrNr = 0, i_subfr = 0;
; subfrNr < L_FRAME/L_FRAME_BY2;
; subfrNr++, i_subfr += L_FRAME_BY2)
MOV AR1,#L_FRAME/L_FRAME_BY2-1
MOV AR4,#0
_LOOP_354:
;pre_big(gamma1,gamma2, A_t, i_subfr, st->speech,st->mem_w, st->wsp);
;int pre_big(gamma1[],gamma2[],A_t[],frameOffset,speech[],mem_w[],wsp[])
;Input: xar0--*gamma1,xar7--*gamma2,xar3--*A_t,xar2--*speech,xar5--*mem_w,ar4--frameOffset
;Output: xar5--*mem_w,xar6--*wsp
PUSH XAR1
MOVL XAR6,#old_wsp+PIT_MAX
MOVL XAR0,#gamma1
MOVL XAR7,#gamma2
MOVL XAR3,#A_t
MOVL XAR2,#speech
MOVL ACC,*XAR2
MOVL XAR2,ACC
MOVL XAR5,#mem_w
LCR _pre_big
;ADD AR4,#L_FRAME_BY2
POP XAR1
BANZ _LOOP_354,AR1--
;T_op[0] = Pitch_ol(st->wsp, PIT_MIN, PIT_MAX,L_FRAME);
;Word16 Pitch_ol (signal[],pit_min,pit_max,L_frame)
;Inputs: XAR1--Word16 &signal
;Outputs: AL--Word16 p_max1
MOVL XAR1,#old_wsp+PIT_MAX
nop
LCR _pitch_ol
nop
MOV *-SP[11],AL ;Save T_op[0]
MOV *-SP[12],AL ;Save T_op[1]
;evenSubfr = 0;
;subfrNr = -1;
;for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
MOV *-SP[13],#0 ;Save evenSubfr
MOV *-SP[14],#-1 ;Save subfrNr
MOV *-SP[15],#0 ;Save i_subfr
MOVL XAR6,#A_t ;Save A_t
MOVL *-SP[22],XAR6
MOVL XAR6,#Aq_t ;Save Aq_t
MOVL *-SP[24],XAR6
_LOOP_401:
;subfrNr = add(subfrNr, 1);
ADD *-SP[14],#1
;evenSubfr = sub(1, evenSubfr);
MOV AL,#1
SUB AL,*-SP[13]
MOV *-SP[13],AL
;subframePreProc(gamma1,gamma2, A,
; Aq, &st->speech[i_subfr],
; st->mem_err, st->mem_w0, st->zero,
; st->ai_zero, &st->exc[i_subfr],
; st->h1, xn, res, st->error);
;int subframePreProc(gamma1[],gamma2[],*A,
; *Aq,*speech,*mem_err,mem_w0,*zero,ai_zero[],
; *exc[],h1[],xn[],res2[],error[])
;input:_buffer1--gamma1[],_buffer1+2--gamma2[],xar1--*A
; xar7--*Aq,_buffer1+4--speech[],_buffer1+6--mem_err[]
; _buffer1+8--mem_w0[],_buffer1+10--zero[]
;output: xar0--ai_zero[],xar2--exc[],xar3--h1[]
; xar4--xn[],xar5--res2[],xar6--error[]
;INPUT:
MOVL XAR6,#gamma1 ;gamma1
MOVL @_buffer1,XAR6
MOVL XAR6,#gamma2 ;gamma2
MOVL @_buffer1+2,XAR6
MOVL XAR1,*-SP[22] ;A
MOVL XAR7,*-SP[24] ;Aq
MOVL XAR6,#speech ;speech[i_subfr]
MOVL ACC,*XAR6
ADD ACC,*-SP[15]
MOVL @_buffer1+4,ACC
MOVL XAR6,#mem_err ;mem_err
MOVL @_buffer1+6,XAR6
MOVL XAR6,#mem_w0 ;mem_w0
MOVL @_buffer1+8,XAR6
MOVL XAR6,#ai_zero+MP1 ;zero
MOVL @_buffer1+10,XAR6
;OUTPUT:
MOVL XAR0,#ai_zero ;ai_zero
MOVL XAR6,#exc ;exc[i_subfr]
MOVL ACC,*XAR6
ADD ACC,*-SP[15]
MOVL XAR2,ACC
MOVL XAR3,#hvec+L_SUBFR ;h1
MOVL XAR4,#xn ;xn
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -