📄 postfilt_asm_nok.asm
字号:
;RSBX OVM
;NOP
LD *AR4+,16,A ; |333|
;SSBX FRCT
;SSBX OVM
MVMD AR5,T
MPYA A ; |333|
;RSBX OVM
SFTA A,-16,B ; |333|
LD *AR1+,16,A ; |333|
;SSBX OVM
MVMD AR3,T
MPYA A ; |333|
ADD *(BL),16,A,A ; |333|
STH A,*AR2+ ; |333|
L19:
B L22 ; |335|
L20:
LD *SP(4),A
BC L22,ALEQ ; |302|
LD *SP(4),A
SUB #1,A,A
MVDK *SP(3),*(AR2)
STLM A,BRC
MVDK *SP(2),*(AR3)
RPTB L22-1
L21:
MVDD *AR3+,*AR2+ ; |303|
L22:
ANDM #-833,*(ST1)
ANDM #-4,*(PMST)
FRAME #16
POPM AR7
POPM AR6
POPM AR1
RET
.sect ".text"
.global _agc
;----------------------------------------------------------------------
; 382 | void agc(
; 383 | Word16 *sig_in, /* (i) : postfilter input signal */
; 384 | Word16 *sig_out, /* (i/o) : postfilter output signal */
; 385 | Word16 l_trm /* (i) : subframe size */
; 386 | )
;----------------------------------------------------------------------
_agc:
PSHM AR1
PSHM AR6
PSHM AR7
FRAME #-48
NOP
;----------------------------------------------------------------------
; 388 | static Word16 past_gain=4096; /* past_gain = 1.0 (Q12) */
; 389 | Word16 i, exp;
; 390 | Word16 gain_in, gain_out, g0, gain; /* Q12 */
; 391 | Word32 s;
; 393 | Word16 signal[L_SUBFR];
;----------------------------------------------------------------------
STL A,*SP(42)
LD *SP(53),A
STL A,*SP(43)
LD *SP(52),A
STL A,*SP(44)
;----------------------------------------------------------------------
; 397 | for(i=0; i<l_trm; i++)
;----------------------------------------------------------------------
SSBX SXM
SSBX OVM
SSBX FRCT
NOP
LD *SP(43),A
BC L24,ALEQ ; |397|
MVMM SP,AR1
MVDK *SP(43),*(AR7)
MVDK *SP(44),*(AR6)
MAR *+AR1(#2)
L23:
;----------------------------------------------------------------------
; 398 | signal[i] = shr(sig_out[i], 2);
;----------------------------------------------------------------------
;ST #2,*SP(0) ; |398|
;RSBX FRCT
;RSBX OVM
LD *AR6+,A
;CALL #_crshft ; |398|
SFTA A,-2
BANZD L23,*+AR7(-1) ; |398|
NOP
STL A,*AR1+
L24:
;----------------------------------------------------------------------
; 400 | s = 0;
;----------------------------------------------------------------------
LD #0,A
;----------------------------------------------------------------------
; 401 | for(i=0; i<l_trm; i++)
;----------------------------------------------------------------------
;SSBX SXM
;NOP
LD *SP(43),B
BC L26,BLEQ ; |401|
;RSBX OVM
LD *SP(43),B
MVMM SP,AR1
SUB #1,B,B
STLM B,BRC
MAR *+AR1(#2)
RPTB L26-1
L25:
;----------------------------------------------------------------------
; 402 | s = L_mac(s, signal[i], signal[i]);
;----------------------------------------------------------------------
;RSBX OVM
LD *AR1+,B
;SFTA A,8 ; |402|
STLM B,T
;SFTA A,-8 ; |402|
;ORM #2,*(PMST)
;SSBX FRCT
;SSBX OVM
;ORM #2,*(PMST)
MAC *(BL), A ; |402|
L26:
;----------------------------------------------------------------------
; 404 | if (s == 0) {
; 405 | past_gain = 0;
; 406 | return;
;----------------------------------------------------------------------
;RSBX OVM
LD A,B ; |404|
;SFTA B,8 ; |404|
;SFTA B,-8 ; |404|
BC L35,BEQ ; |404|
;----------------------------------------------------------------------
; 408 | exp = sub(norm_l(s), 1);
;----------------------------------------------------------------------
LD A,B ; |408|
;SFTA B,8 ; |408|
;SFTA B,-8 ; |408|
EXP B ; |408|
LD *(T),16,B ; |408|
;SSBX OVM
;NOP
SUB #1,16,B,B ; |408|
SFTA B,-16,B ; |408|
STL B,*SP(45)
;----------------------------------------------------------------------
; 409 | gain_out = round(L_shl(s, exp));
;----------------------------------------------------------------------
;RSBX FRCT
;RSBX OVM
STL B,*SP(0)
CALL #_L_shl ; |409|
RSBX OVM
SSBX SXM
SFTA A,8 ; |409|
SFTA A,-8 ; |409|
SSBX OVM
ADD #1,#15,A,A ; |409|
SFTA A,-16,A ; |409|
STL A,*SP(46)
;----------------------------------------------------------------------
; 413 | for(i=0; i<l_trm; i++)
;----------------------------------------------------------------------
LD *SP(43),A
BC L28,ALEQ ; |413|
MVMM SP,AR1
MVDK *SP(43),*(AR7)
MVDK *SP(42),*(AR6)
MAR *+AR1(#2)
L27:
;----------------------------------------------------------------------
; 414 | signal[i] = shr(sig_in[i], 2);
;----------------------------------------------------------------------
;ST #2,*SP(0) ; |414|
;RSBX FRCT
;RSBX OVM
LD *AR6+,A
;CALL #_crshft ; |414|
SFTA A,-2
BANZD L27,*+AR7(-1) ; |414|
NOP
STL A,*AR1+
L28:
;----------------------------------------------------------------------
; 416 | s = 0;
;----------------------------------------------------------------------
LD #0,A
;----------------------------------------------------------------------
; 417 | for(i=0; i<l_trm; i++)
;----------------------------------------------------------------------
;SSBX SXM
;NOP
LD *SP(43),B
BC L30,BLEQ ; |417|
;RSBX OVM
LD *SP(43),B
MVMM SP,AR1
SUB #1,B,B
STLM B,BRC
MAR *+AR1(#2)
SSBX FRCT
RPTB L30-1
L29:
;----------------------------------------------------------------------
; 418 | s = L_mac(s, signal[i], signal[i]);
;----------------------------------------------------------------------
;RSBX OVM
LD *AR1+,B
;SFTA A,8 ; |418|
STLM B,T
;SFTA A,-8 ; |418|
;ORM #2,*(PMST)
;SSBX FRCT
;SSBX OVM
;ORM #2,*(PMST)
MAC *(BL), A ; |418|
L30:
;----------------------------------------------------------------------
; 420 | if (s == 0) {
;----------------------------------------------------------------------
;RSBX OVM
LD A,B ; |420|
;SFTA B,8 ; |420|
;SFTA B,-8 ; |420|
BC L31,BNEQ ; |420|
;----------------------------------------------------------------------
; 421 | g0 = 0;
;----------------------------------------------------------------------
LD #0,A
STL A,*SP(46)
;----------------------------------------------------------------------
; 423 | else {
; 424 | i = norm_l(s);
;----------------------------------------------------------------------
B L32 ; |422|
; branch occurs ; |422|
L31:
;----------------------------------------------------------------------
; 425 | gain_in = round(L_shl(s, i));
;----------------------------------------------------------------------
LD A,B ; |425|
;SFTA B,8 ; |425|
;SFTA B,-8 ; |425|
EXP B ; |425|
RSBX FRCT
MVMD T,AR1
MVKD *(AR1),*SP(0)
CALL #_L_shl ; |425|
RSBX OVM
SSBX SXM
SFTA A,8 ; |425|
SSBX OVM
SFTA A,-8 ; |425|
ADD #1,#15,A,A ; |425|
SFTA A,-16,B ; |425|
;----------------------------------------------------------------------
; 426 | exp = sub(exp, i);
;----------------------------------------------------------------------
;RSBX OVM
LD *SP(45),A
LD *(AL),16,A ; |426|
;SSBX OVM
SUB *(AR1),16,A,A ; |426|
SFTA A,-16,A ; |426|
STL A,*SP(45)
;----------------------------------------------------------------------
; 432 | s = L_deposit_l(div_s(gain_out,gain_in)); /* Q15 */
;----------------------------------------------------------------------
RSBX FRCT
LD *SP(46),A
RSBX OVM
STL B,*SP(0)
CALL #_divs ; |432|
SSBX SXM
LD *(AL),A ; |432|
SSBX OVM
;----------------------------------------------------------------------
; 433 | s = L_shl(s, 7); /* s(Q22) = gain_out / gain_in */
;----------------------------------------------------------------------
;RSBX FRCT
;RSBX OVM
;ST #7,*SP(0) ; |433|
;CALL #_L_shl ; |433|
SFTA A,7
;----------------------------------------------------------------------
; 434 | s = L_shr(s, exp); /* Q22, add exponent */
;----------------------------------------------------------------------
LD *SP(45),B
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -