📄 postfilt_asm_nok.asm
字号:
L8:
;----------------------------------------------------------------------
; 264 | ener = L_mac(ener, *p, *p);
; 268 | ener0 = 1;
;----------------------------------------------------------------------
LD *AR1+,B
;RSBX OVM
STLM B,T
;DLD *SP(12),A
;ORM #2,*(PMST)
;SSBX FRCT
;SSBX OVM
;ORM #2,*(PMST)
MAC *(BL), A ; |264|
;DST A,*SP(12) ; |264|
LOOP_2:
DST A,*SP(12)
L9:
;----------------------------------------------------------------------
; 269 | p = scal_sig;
;----------------------------------------------------------------------
MVMM AR6,AR2
LD #1,A
DST A,*SP(14) ; |268|
;----------------------------------------------------------------------
; 270 | for ( i=0; i<L_subfr; i++, p++)
;----------------------------------------------------------------------
LD *SP(4),A
BC L11,ALEQ ; |270|
;RSBX OVM
LD *SP(4),A
SUB #1,A,A
STLM A,BRC
DLD *SP(14),A ; ****
NOP
RPTB LOOP_3-1
L10:
;----------------------------------------------------------------------
; 271 | ener0 = L_mac(ener0, *p, *p);
;----------------------------------------------------------------------
LD *AR2+,B
;RSBX OVM
STLM B,T
;DLD *SP(14),A
;ORM #2,*(PMST)
;SSBX FRCT
;SSBX OVM
;ORM #2,*(PMST)
MAC *(BL), A ; |271|
;DST A,*SP(14) ; |271|
LOOP_3:
DST A,*SP(14)
L11:
;----------------------------------------------------------------------
; 273 | if (cor_max < 0)
;----------------------------------------------------------------------
;RSBX OVM
;NOP
DLD *SP(8),A
BC L12,AGEQ ; |273|
;----------------------------------------------------------------------
; 275 | cor_max = 0;
;----------------------------------------------------------------------
LD #0,A
DST A,*SP(8) ; |275|
L12:
;----------------------------------------------------------------------
; 280 | temp = cor_max;
;----------------------------------------------------------------------
DLD *SP(8),A
DST A,*SP(10) ; |280|
;----------------------------------------------------------------------
; 281 | if (ener > temp)
;----------------------------------------------------------------------
LD A,B
;SFTA B,8 ; |281|
DLD *SP(12),A ; |281|
;SFTA B,-8 ; |281|
SUB A,B ; |281|
BCD L13,BGEQ ; |281|
NOP
DST A,*SP(12) ; |281|
;----------------------------------------------------------------------
; 283 | temp = ener;
;----------------------------------------------------------------------
DST A,*SP(10) ; |283|
L13:
;----------------------------------------------------------------------
; 285 | if (ener0 > temp)
;----------------------------------------------------------------------
DLD *SP(14),A ; |285|
DLD *SP(10),B
SUB A,B ; |285|
BCD L14,BGEQ ; |285|
NOP
DST A,*SP(14) ; |285|
;----------------------------------------------------------------------
; 287 | temp = ener0;
; 289 | j = norm_l(temp);
;----------------------------------------------------------------------
DST A,*SP(10) ; |287|
L14:
;----------------------------------------------------------------------
; 290 | cmax = round(L_shl(cor_max, j));
;----------------------------------------------------------------------
DLD *SP(10),A
EXP A ; |290|
RSBX FRCT
MVMD T,AR7
MVKD *(AR7),*SP(0)
DLD *SP(8),A ; |290|
CALL #_L_shl ; |290|
RSBX OVM
SSBX SXM
SFTA A,8 ; |290|
SSBX OVM
SFTA A,-8 ; |290|
ADD #1,#15,A,A ; |290|
SFTA A,-16,A ; |290|
STLM A,AR1
;----------------------------------------------------------------------
; 291 | en = round(L_shl(ener, j));
;----------------------------------------------------------------------
MVKD *(AR7),*SP(0)
;RSBX OVM
;RSBX FRCT
DLD *SP(12),A ; |291|
CALL #_L_shl ; |291|
RSBX OVM
SSBX SXM
SFTA A,8 ; |291|
SFTA A,-8 ; |291|
SSBX OVM
ADD #1,#15,A,A ; |291|
SFTA A,-16,A ; |291|
STLM A,AR6
;----------------------------------------------------------------------
; 292 | en0 = round(L_shl(ener0, j));
; 297 | temp = L_mult(cmax, cmax);
;----------------------------------------------------------------------
;RSBX OVM
MVKD *(AR7),*SP(0)
;RSBX FRCT
DLD *SP(14),A ; |292|
CALL #_L_shl ; |292|
RSBX OVM
SSBX SXM
SFTA A,8 ; |292|
SFTA A,-8 ; |292|
SSBX OVM
ADD #1,#15,A,A ; |292|
SFTA A,-16,A ; |292|
;----------------------------------------------------------------------
; 298 | temp = L_sub(temp, L_shr(L_mult(en, en0), 1));
; 300 | if (temp < (Word32)0) /* if prediction gain < 3 dB */
; 302 | for (i = 0; i < L_subfr; i++)
; 303 | signal_pst[i] = signal[i];
; 304 | return;
;----------------------------------------------------------------------
SSBX FRCT
STLM A,T
MPY *(AR6),A ; |298|
;RSBX OVM
;RSBX FRCT
;ST #1,*SP(0) ; |298|
;CALL #_L_shr ; |298|
SFTA A,-1
DST A,*SP(0) ; |298|
MVMD AR1,T
;SSBX FRCT
;SSBX OVM
MPY *(AR1),A ; |298|
;RSBX FRCT
;RSBX OVM
;NOP
;CALL #_L_sub ; |298|
DSUB *SP(0),A
;RSBX OVM
;SSBX SXM
;SFTA A,8 ; |298|
;SFTA A,-8 ; |298|
BC L20,ALT ; |298|
;----------------------------------------------------------------------
; 307 | if (sub(cmax, en) > 0) /* if pitch gain > 1 */
; 309 | g0 = INV_GAMMAP;
; 310 | gain = GAMMAP_2;
; 312 | else {
;----------------------------------------------------------------------
LD *(AR1),16,A ; |307|
;SSBX OVM
SUB *(AR6),16,A,A ; |307|
SFTA A,-16,A ; |307|
LD *(AL),A ; |307|
BC L16,AGT ; |307|
;----------------------------------------------------------------------
; 313 | cmax = shr(mult(cmax, GAMMAP), 1); /* cmax(Q14) = cmax(Q15) * GAMMAP *
; | /
;----------------------------------------------------------------------
;RSBX OVM
;NOP
LD #16384,16,A ; |313|
;SSBX FRCT
;SSBX OVM
MVMD AR1,T
MPYA A ; |313|
;RSBX FRCT
;RSBX OVM
;ST #1,*SP(0) ; |313|
;CALLD #_crshft ; |313|
SFTA A,-1
NOP
SFTA A,-16,A ; |313|
STLM A,AR1
;----------------------------------------------------------------------
; 314 | en = shr(en, 1); /* Q14 */
;----------------------------------------------------------------------
;RSBX FRCT
;RSBX OVM
;ST #1,*SP(0) ; |314|
;CALLD #_crshft ; |314|
SFTA A,-1
NOP
LDM AR6,A
STLM A,AR6
;----------------------------------------------------------------------
; 315 | i = add(cmax, en);
; 316 | if(i > 0)
; 318 | gain = div_s(cmax, i); /* gain(Q15) = cor_max/(cor_max+ener) */
; 319 | g0 = sub(32767, gain); /* g0(Q15) = 1 - gain */
; 321 | else
;----------------------------------------------------------------------
;SSBX SXM
;RSBX OVM
LD *(AR1),16,A ; |315|
;SSBX OVM
ADD *(AR6),16,A,A ; |315|
SFTA A,-16,A ; |315|
LD *(AL),A ; |315|
BC L15,AGT ; |315|
;----------------------------------------------------------------------
; 323 | g0 = 32767;
;----------------------------------------------------------------------
LD #32767,A
STLM A,AR3
;----------------------------------------------------------------------
; 324 | gain = 0;
;----------------------------------------------------------------------
BD L17 ; |324|
STM #0,AR5
L15:
RSBX FRCT
RSBX OVM
STL A,*SP(0)
CALLD #_divs ; |318|
NOP
LDM AR1,A
STLM A,AR5
RSBX OVM
NOP
LD #32767,16,A ; |319|
SSBX SXM
SSBX OVM
SUB *(AR5),16,A,A ; |319|
SFTA A,-16,A ; |319|
STLM A,AR3
B L17 ; |320|
L16:
LD #21845,A
STLM A,AR3
NOP
STM #10923,AR5
L17:
;----------------------------------------------------------------------
; 329 | for (i = 0; i < L_subfr; i++)
;----------------------------------------------------------------------
LD *SP(4),A
BC L22,ALEQ ; |329|
RSBX OVM
LD *SP(5),B
LD *SP(2),A
SUB B,A
MVDK *SP(3),*(AR2)
STLM A,AR4
LD *SP(4),A
SUB #1,A,A
STLM A,BRC
MVDK *SP(2),*(AR1)
SSBX OVM
SSBX SXM
SSBX FRCT
RPTB L19-1
L18:
;----------------------------------------------------------------------
; 333 | signal_pst[i] = add(mult(g0, signal[i]), mult(gain, signal[i-t0]));
;----------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -