📄 postfilt_asm_nok.asm
字号:
.mmregs
FP .set AR7
.bss _res2_buf,183,0,0
.bss _res2,1,0,0
.bss _scal_res2_buf,183,0,0
.bss _scal_res2,1,0,0
.bss _mem_syn_pst,10,0,0
.sect ".cinit"
.align 1
.field 1,16
.field _mem_pre$1+0,16
.field 0,16 ; _mem_pre$1 @ 0
.sect ".text"
.bss _mem_pre$1,1,0,0
.sect ".cinit"
.align 1
.field 1,16
.field _past_gain$2+0,16
.field 4096,16 ; _past_gain$2 @ 0
.sect ".text"
.bss _past_gain$2,1,0,0
.sect ".text"
.global _preemphasis
;----------------------------------------------------------------------
; 347 | void preemphasis(
; 348 | Word16 *signal, /* (i/o) : input signal overwritten by the output */
; 349 | Word16 g, /* (i) Q15 : preemphasis coefficient */
; 350 | Word16 L /* (i) : size of filtering */
; 351 | )
;----------------------------------------------------------------------
_preemphasis:
PSHM AR1
NOP
;----------------------------------------------------------------------
; 353 | static Word16 mem_pre = 0;
; 354 | Word16 *p1, *p2, temp, i;
; 356 | p1 = signal + L - 1;
;----------------------------------------------------------------------
LD *SP(3),B
STLM B,AR3
NOP
MVDK *SP(2),*(AR2)
;----------------------------------------------------------------------
; 357 | p2 = p1 - 1;
;----------------------------------------------------------------------
RSBX OVM
NOP
ADD A,B ; |357|
SUB #1,B,A ; |357|
STLM A,AR1
SUB #1,A,A ; |357|
STLM A,AR4
NOP
;----------------------------------------------------------------------
; 358 | temp = *p1;
;----------------------------------------------------------------------
MVDK *AR1,*(AR1)
;----------------------------------------------------------------------
; 360 | for (i = 0; i <= L-2; i++)
;----------------------------------------------------------------------
SSBX SXM
SSBX OVM ; ****
SSBX FRCT ; ****
NOP ; ****
LDM AR3,A
LD *(AL),A ; |360|
SUB #2,A,A ; |360|
BC L2,ALT ; |360|
LDM AR3,A
SUB #2,A,A
STLM A,BRC
NOP
RPTB L2-1
L1:
;----------------------------------------------------------------------
; 362 | *p1-- = sub(*p1, mult(g, *p2--));
;----------------------------------------------------------------------
LD *AR4,16,A ; |362|
;SSBX FRCT
;SSBX OVM
MVMD AR2,T
MPYA A ; |362|
;RSBX OVM
LD *AR4(1),16,B ; |362|
;SSBX OVM
SFTA A,-16,A ; |362|
SUB *(AL),16,B,A ; |362|
;RSBX OVM
STH A,*AR4(1) ; |362|
MAR *AR4-
L2:
;----------------------------------------------------------------------
; 365 | *p1 = sub(*p1, mult(g, mem_pre));
;----------------------------------------------------------------------
LD *(_mem_pre$1),16,A ; |365|
;SSBX FRCT
;SSBX OVM
MVMD AR2,T
MPYA A ; |365|
;RSBX OVM
LD *AR4(1),16,B ; |365|
;SSBX OVM
SFTA A,-16,A ; |365|
SUB *(AL),16,B,A ; |365|
STH A,*AR4(1) ; |365|
;----------------------------------------------------------------------
; 367 | mem_pre = temp;
;----------------------------------------------------------------------
MVMD AR1,*(_mem_pre$1)
;----------------------------------------------------------------------
; 369 | return;
;----------------------------------------------------------------------
ANDM #-833,*(ST1)
ANDM #-4,*(PMST)
POPM AR1
RET
.sect ".text"
.global _pit_pst_filt
;----------------------------------------------------------------------
; 219 | void pit_pst_filt(
; 220 | Word16 *signal, /* (i) : input signal *
; | /
; 221 | Word16 *scal_sig, /* (i) : input signal (scaled, divided by 4) *
; | /
; 222 | Word16 t0_min, /* (i) : minimum value in the searched range *
; | /
; 223 | Word16 t0_max, /* (i) : maximum value in the searched range *
; | /
; 224 | Word16 L_subfr, /* (i) : size of filtering *
; | /
; 225 | Word16 *signal_pst /* (o) : harmonically postfiltered signal *
; | /
; 226 | )
;----------------------------------------------------------------------
_pit_pst_filt:
PSHM AR1
PSHM AR6
PSHM AR7
FRAME #-16
NOP
;----------------------------------------------------------------------
; 228 | Word16 i, j, t0;
; 229 | Word16 g0, gain, cmax, en, en0;
; 230 | Word16 *p, *p1, *deb_sig;
; 231 | Word32 corr, cor_max, ener, ener0, temp;
; 232 | Word32 L_temp;
;----------------------------------------------------------------------
STL A,*SP(2)
LD *SP(24),A
LD *SP(21),B
STL A,*SP(3)
MVDK *SP(20),*(AR6)
LD *SP(23),A
STL A,*SP(4)
MVDK *SP(22),*(AR2)
;----------------------------------------------------------------------
; 239 | deb_sig = &scal_sig[-t0_min];
; 240 | cor_max = MIN_32;
;----------------------------------------------------------------------
RSBX OVM
LDM AR6,A
SUB B,A ; |239|
STLM A,AR1
;----------------------------------------------------------------------
; 241 | t0 = t0_min; /* Only to remove warning from some compilers
; | */
;----------------------------------------------------------------------
STL B,*SP(5)
;----------------------------------------------------------------------
; 242 | for (i=t0_min; i<=t0_max; i++)
;----------------------------------------------------------------------
LD B,A
STL A,*SP(6)
SSBX SXM
NOP
LD #-32768,16,A ; |240|
DST A,*SP(8) ; |240|
;----------------------------------------------------------------------
; 244 | corr = 0;
;----------------------------------------------------------------------
LD B,A
LD *(AL),A ; |242|
SUB *(AR2),A ; |242|
BC L7,AGT ; |242|
LDM AR2,A
SUB B,A
ADD #1,A,A
STLM A,AR7
SSBX OVM ; ****
;SSBX SXM
SSBX FRCT
ORM #2,*(PMST)
L3:
;----------------------------------------------------------------------
; 245 | p = scal_sig;
;----------------------------------------------------------------------
MVMM AR6,AR2
;----------------------------------------------------------------------
; 246 | p1 = deb_sig;
;----------------------------------------------------------------------
MVMM AR1,AR3
LD #0,A
DST A,*SP(10) ; |244|
;----------------------------------------------------------------------
; 247 | for (j=0; j<L_subfr; j++)
;----------------------------------------------------------------------
LD *SP(4),A
BC L5,ALEQ ; |247|
LD *SP(4),A
SUB #1,A,A
STLM A,BRC
;NOP
DLD *SP(10),A
RPTB LOOP_1-1
L4:
;----------------------------------------------------------------------
; 248 | corr = L_mac(corr, *p++, *p1++);
;----------------------------------------------------------------------
;RSBX OVM
;NOP
;DLD *SP(10),A
;ORM #2,*(PMST)
;SSBX FRCT
;SSBX OVM
;ORM #2,*(PMST)
;NOP
MAC *AR3+, *AR2+, A, A ; |248|
;DST A,*SP(10)
LOOP_1:
DST A,*SP(10)
L5:
;----------------------------------------------------------------------
; 250 | L_temp = L_sub(corr, cor_max);
; 251 | if (L_temp > (Word32)0)
;----------------------------------------------------------------------
;RSBX OVM
;NOP
;DLD *SP(8),A
;RSBX FRCT
;DST A,*SP(0) ; |250|
DLD *SP(10),A ; |250|
;CALL #_L_sub ; |250|
DSUB *SP(8),A
;RSBX OVM
;SSBX SXM
;SFTA A,8 ; |250|
;SFTA A,-8 ; |250|
BC L6,ALEQ ; |250|
;----------------------------------------------------------------------
; 253 | cor_max = corr;
;----------------------------------------------------------------------
DLD *SP(10),A
DST A,*SP(8) ; |253|
;----------------------------------------------------------------------
; 254 | t0 = i;
;----------------------------------------------------------------------
LD *SP(6),A
STL A,*SP(5)
L6:
;----------------------------------------------------------------------
; 256 | deb_sig--;
;----------------------------------------------------------------------
MAR *AR1-
;----------------------------------------------------------------------
; 261 | ener = 1;
;----------------------------------------------------------------------
LD *SP(6),A
ADD #1,A
BANZD L3,*+AR7(-1) ; |257|
NOP
STL A,*SP(6)
L7:
;----------------------------------------------------------------------
; 262 | p = scal_sig - t0;
;----------------------------------------------------------------------
LD *SP(5),B
LDM AR6,A
SUB B,A ; |262|
STLM A,AR1
LD #1,A
DST A,*SP(12) ; |261|
;----------------------------------------------------------------------
; 263 | for ( i=0; i<L_subfr ;i++, p++)
;----------------------------------------------------------------------
LD *SP(4),A
BC L9,ALEQ ; |263|
LD *SP(4),A
SUB #1,A,A
STLM A,BRC
NOP
DLD *SP(12),A
RPTB LOOP_2-1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -