📄 post_filter.asm
字号:
*****************************************************************************
** Description: Post_Filter() in pstpilt.c **
** **
** Inputs **
** **
** Post_FilterState *st 全局
** xar3---word16 *syn,
** xar1--- Word16 *Az_4 **
** Outputs: **
** xar3---word16 *syn **
** return **
** **
** Attribute : Cycles: 215812 Pm: 131 **
** Modified Registers: all _buffer1 **
** **
** Programmer : xiewei **
****************************************************************************
.ref _copy
.ref _agc
.ref _preemphasis
.ref _div_s
.ref _Syn_filt
.ref res2
.ref mem_syn_pst
.ref synth_buf
.ref mem_pre
.ref past_gain
.ref _buffer1
.ref _residu
.ref _Weight_Ai
.global _Post_Filter
_Post_Filter
;*syn_work = &st->synth_buf[M];
;Az = Az_4;
ADDB SP,#20
MOVL *-SP[8],XAR3
MOVL *-SP[10],XAR1
;Copy (syn, syn_work , L_FRAME); !!!!
MOV AR1,#160
MOVL XAR2,XAR3
MOVL XAR3,#synth_buf+10
LCR _copy
; for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
MOVL XAR1,*-SP[10]
MOV AR0,#0
_line_37:
MOV *-SP[6],AR0
MOVL *-SP[10],XAR1
CMP @AR0,#160
B _line_148,GEQ
;Weight_Ai (Az, gamma3, Ap3);
MOVL XAR7,#_buffer1
MOV *XAR7++,#18022
MOV *XAR7++,#9912
MOV *XAR7++,#5451
MOV *XAR7++,#2998
MOV *XAR7++,#1649
MOV *XAR7++,#907
MOV *XAR7++,#499
MOV *XAR7++,#274
MOV *XAR7++,#151
MOV *XAR7,#83
MOVL XAR2,#_buffer1+20
MOVL XAR7,#_buffer1
LCR _Weight_Ai ;Weight_Ai (Az, gamma4, Ap4);
MOVL *-SP[2],XAR2
MOVL XAR1,*-SP[10]
MOVL XAR7,#_buffer1+10
MOV *XAR7++,#22938
MOV *XAR7++,#16057
MOV *XAR7++,#11240
MOV *XAR7++,#7868
MOV *XAR7++,#5508
MOV *XAR7++,#3856
MOV *XAR7++,#2699
MOV *XAR7++,#1889
MOV *XAR7++,#1322
MOV *XAR7,#925
MOVL XAR7,#_buffer1+10
MOVL XAR2,#_buffer1+80
LCR _Weight_Ai
MOVL *-SP[4],XAR2
; Residu (Ap3, &syn_work[i_subfr], st->res2, L_SUBFR);
MOVL XAR7,*-SP[2]
MOVL XAR4,#synth_buf+10
MOVL ACC,XAR4
;by yangzhw
ADD ACC,*-SP[6]
MOVL XAR4,ACC
MOV AR1,#40
MOVL XAR3,#res2
LCR _residu ;Copy (Ap3, h, M + 1);
;Set_zero (&h[M + 1], L_H - M - 1=11); L_H=22 M+1=11
ADDB XAR7,#11
MOV AR1,#10
_loop_73:
MOV *XAR7++,#0
BANZ _loop_73,AR1--
;Syn_filt (Ap4, h, h, L_H, &h[M + 1], 0);
MOVL XAR7,*-SP[4]
MOVL XAR1,*-SP[2]
MOV AR0,#22
MOV AR4,#0
MOVL XAR3,*-SP[2]
ADDB XAR3,#11
MOVL XAR2,*-SP[2]
LCR _Syn_filt
;L_tmp = L_mult (h[0], h[0]);
MOVL XAR1,*-SP[2]
MOV T,*XAR1
MPY ACC,T,*XAR1++
LSL ACC,#1
MOV AR0,#20 ; for (i = 1; i < L_H; i++)
_loop_92: ; L_tmp = L_mac (L_tmp, h[i], h[i]);
MOV T,*XAR1
MPY P,T,*XAR1++
ADDL ACC,P<<PM
BANZ _loop_92,AR0--
MOV AR2,AH ;temp1 = extract_h (L_tmp);
MOVL XAR1,*-SP[2] ; L_tmp = L_mult (h[0], h[1]);
MOV T,*XAR1++
MPY ACC,T,*XAR1
LSL ACC,#1
MOV AR0,#19 ;for (i = 1; i < L_H - 1; i++)
_loop_103: ;L_tmp = L_mac (L_tmp, h[i], h[i + 1]);
MOV T,*XAR1++
MPY P,T,*XAR1
ADDL ACC,P<<PM
BANZ _loop_103,AR0--
MOV AR3,AH ; temp2 = extract_h (L_tmp);
MOV T,AH ;temp2 = mult (temp2, MU);MU=26214
MPY ACC,T,#26214
LSL ACC,#1
MOV AR1,AH ;temp2 = div_s (temp2, temp1); ?????
LCR _div_s
MOV AR2,AL
MOV AL,AR3 ;if (temp2 <= 0)
SB _line_118 ,GT
MOV AR2,#0 ;temp2 = 0;
_line_118:
;preemphasis (st->preemph_state, st->res2, temp2, L_SUBFR);
MOVL XAR0,#mem_pre
MOVL XAR1,#res2
MOV AR3,#40
LCR _preemphasis
;Syn_filt (Ap4, st->res2, &syn[i_subfr], L_SUBFR, st->mem_syn_pst, 1);
MOVL XAR7,*-SP[4]
MOVL XAR1,#res2
MOVL ACC,*-SP[8]
;by yangzhw
ADD ACC,*-SP[6]
MOVL XAR2,ACC
MOV AR0,#40
MOVL XAR3,#mem_syn_pst
MOV AR4,#1
LCR _Syn_filt
;agc (st->agc_state, &syn_work[i_subfr], &syn[i_subfr]);
MOVL XAR5,#past_gain
MOVL XAR4,#synth_buf+10
MOVL ACC,XAR4
;by yangzhw
ADD ACC,*-SP[6]
MOVL XAR4,ACC
MOVL ACC,*-SP[8]
;by yangzhw
ADD ACC,*-SP[6]
MOVL XAR6,ACC
LCR _agc
MOVL XAR1,*-SP[10] ;Az += MP1; MP1=M+1=11
ADDB XAR1,#11
MOV AH,*-SP[6]
ADD AH,#40
MOV AR0,AH
B _line_37,UNC
_line_148:
;Copy (&syn_work[L_FRAME - M], &syn_work[-M], M);
MOV AR1,#10
MOVL XAR2,#synth_buf+160
MOVL XAR3,#synth_buf
LCR _copy
SUBB SP,#20
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -