📄 pitch_a_c_asm.asm
字号:
MAR *+AR3(#2)
MAR *+AR2(#2)
;DST A,*SP(10)
LOOP21:
DST A,*SP(10)
L22:
;----------------------------------------------------------------------
; 170 | L_temp = L_sub(sum, max);
;----------------------------------------------------------------------
;RSBX OVM
;DLD *FP(240),A
;RSBX FRCT
;DST A,*SP(0)
DLD *SP(10),A
;CALL #_L_sub
DSUB *FP(240),A
;RSBX OVM
;SSBX SXM
;SFTA A,8
;SFTA A,-8
BC L23,ALEQ
;----------------------------------------------------------------------
; 171 | if (L_temp > 0) { max = sum; T3 = i; }
;----------------------------------------------------------------------
DLD *SP(10),A
MVKD *(AR1),*FP(244)
DST A,*FP(240)
L23:
MAR *+AR1(#2)
LD *(AR1),A
SUB #143,A,A
BCD L20,ALT
MAR *+AR6(#-2)
;----------------------------------------------------------------------
; 176 | i = T3;
;----------------------------------------------------------------------
MVDK *FP(244),*(AR1) ; sp(244) = T3 = ar1 = i
;----------------------------------------------------------------------
; 177 | p = scal_sig;
;----------------------------------------------------------------------
MVDK *FP(236),*(AR2)
;----------------------------------------------------------------------
; 178 | p1 = &scal_sig[-(i+1)];
;----------------------------------------------------------------------
LDM AR1,A
ADD #1,A,B
LDM AR2,A
SUB B,A
STLM A,AR3 ; ar3 = p1
;----------------------------------------------------------------------
; 179 | sum = 0;
;----------------------------------------------------------------------
LD #0,A
DST A,*SP(10) ; |179|
;----------------------------------------------------------------------
; 180 | for (j=0; j<L_frame; j+=2, p+=2, p1+=2)
;----------------------------------------------------------------------
LD *FP(235),A
BC L25,ALEQ ; |180|
;LD *FP(235),A
ADD #1,A,A
LD *(AL),A
SFTA A,#-1,A
SUB #1,A
STLM A,BRC
DLD *SP(10),A ; ****
NOP
RPTB LOOP22-1
L24:
;----------------------------------------------------------------------
; 181 | sum = L_mac(sum, *p, *p1);
;----------------------------------------------------------------------
;DLD *SP(10),A
;ORM #2,*(PMST)
;SSBX FRCT
;SSBX OVM
;ORM #2,*(PMST)
;NOP
MAC *AR3, *AR2, A, A
MAR *+AR3(#2)
MAR *+AR2(#2)
;DST A,*SP(10)
LOOP22:
DST A,*SP(10)
L25:
;----------------------------------------------------------------------
; 182 | L_temp = L_sub(sum, max);
;----------------------------------------------------------------------
;RSBX OVM
;DLD *FP(240),A
;RSBX FRCT
;DST A,*SP(0)
DLD *SP(10),A
;CALL #_L_sub
DSUB *FP(240),A
;RSBX OVM
;SSBX SXM
;SFTA A,8
;SFTA A,-8
BC L26,ALEQ
;----------------------------------------------------------------------
; 183 | if (L_temp > 0) { max = sum; T3 = i+(Word16)1; }
;----------------------------------------------------------------------
DLD *SP(10),A
DST A,*FP(240)
LDM AR1,A
ADD #1,A,A
STL A,*FP(244)
L26:
;----------------------------------------------------------------------
; 185 | p = scal_sig;
;----------------------------------------------------------------------
; OVM = FRCT = SXM = 1
MVDK *FP(236),*(AR2)
;----------------------------------------------------------------------
; 186 | p1 = &scal_sig[-(i-1)];
;----------------------------------------------------------------------
LDM AR1,A
SUB #1,A,A
STLM A,AR1
NOP
LDM AR1,B
LDM AR2,A
SUB B,A
STLM A,AR3 ; ar3 = p1 = &scal_sig[-(i-1)]
;----------------------------------------------------------------------
; 187 | sum = 0;
;----------------------------------------------------------------------
LD #0,A
DST A,*SP(10)
;----------------------------------------------------------------------
; 188 | for (j=0; j<L_frame; j+=2, p+=2, p1+=2)
;----------------------------------------------------------------------
LD *FP(235),A
BC L28,ALEQ ; |188|
;LD *FP(235),A
ADD #1,A,A
LD *(AL),A
SFTA A,#-1,A
SUB #1,A
STLM A,BRC
DLD *SP(10),A
;SSBX FRCT ; ****
;SSBX OVM ; ****
;ORM #2,*(PMST) ; ****
;NOP
RPTB LOOP31-1
L27:
;----------------------------------------------------------------------
; 189 | sum = L_mac(sum, *p, *p1);
;----------------------------------------------------------------------
;DLD *SP(10),A
;ORM #2,*(PMST)
;SSBX FRCT
;SSBX OVM
;ORM #2,*(PMST)
;NOP
MAC *AR3, *AR2, A, A
MAR *+AR3(#2)
MAR *+AR2(#2)
;DST A,*SP(10)
LOOP31:
DST A,*SP(10)
L28:
;----------------------------------------------------------------------
; 190 | L_temp = L_sub(sum, max);
;----------------------------------------------------------------------
;RSBX OVM
;DLD *FP(240),A
;RSBX FRCT
;DST A,*SP(0)
DLD *SP(10),A
;CALL #_L_sub
DSUB *FP(240),A
;RSBX OVM
;SSBX SXM
;SFTA A,8
;SFTA A,-8
BC L29,ALEQ
;----------------------------------------------------------------------
; 191 | if (L_temp > 0) { max = sum; T3 = i-(Word16)1; }
;----------------------------------------------------------------------
DLD *SP(10),A
MVKD *(AR1),*FP(244)
DST A,*FP(240)
L29:
;----------------------------------------------------------------------
; 195 | sum = 1; /* to avoid division by zero */
;----------------------------------------------------------------------
LD #1,A
DST A,*SP(10)
;----------------------------------------------------------------------
; 196 | p = &scal_sig[-T3];
;----------------------------------------------------------------------
LD *FP(244),B
LD *FP(236),A
SUB B,A
STLM A,AR1 ; ar1 = p
;----------------------------------------------------------------------
; 197 | for(i=0; i<L_frame; i+=2, p+=2)
;----------------------------------------------------------------------
LD *FP(235),A
BC L31,ALEQ
ADD #1,A,A
LD *(AL),A
SFTA A,#-1,A
SUB #1,A
STLM A,BRC
DLD *SP(10),A ; ****
NOP
RPTB LOOP32-1
L30:
;----------------------------------------------------------------------
; 198 | sum = L_mac(sum, *p, *p);
;----------------------------------------------------------------------
LD *AR1,B
;DLD *SP(10),A
STLM B,T
;ORM #2,*(PMST)
;SSBX FRCT
;SSBX OVM
;ORM #2,*(PMST)
MAR *+AR1(#2)
MAC *(BL), A
;DST A,*SP(10)
LOOP32:
DST A,*SP(10)
L31:
;----------------------------------------------------------------------
; 203 | sum = Inv_sqrt(sum); /* 1/sqrt(energy), result in Q30 */
;----------------------------------------------------------------------
RSBX OVM
RSBX FRCT
DLD *SP(10),A ; |203|
CALL #_Inv_sqrt ; |203|
DST A,*SP(10) ; |203|
;----------------------------------------------------------------------
; 204 | L_Extract(max, &max_h, &max_l);
;----------------------------------------------------------------------
;RSBX OVM
;RSBX FRCT
LDM SP,A
ADD #6,A
STL A,*SP(0)
LDM SP,A
ADD #7,A
STL A,*SP(1)
DLD *FP(240),A ; |204|
CALL #_L_Extract ; |204|
;----------------------------------------------------------------------
; 205 | L_Extract(sum, &ener_h, &ener_l);
;----------------------------------------------------------------------
;RSBX OVM
LDM SP,A
ADD #8,A
STL A,*SP(0)
LDM SP,A
ADD #9,A
STL A,*SP(1)
;RSBX FRCT
DLD *SP(10),A ; |205|
CALL #_L_Extract ; |205|
;----------------------------------------------------------------------
; 206 | sum = Mpy_32(max_h, max_l, ener_h, ener_l);
;----------------------------------------------------------------------
LD *SP(7),A
STL A,*SP(0)
;RSBX FRCT
LD *SP(8),A
STL A,*SP(1)
LD *SP(9),A
STL A,*SP(2)
;RSBX OVM
LD *SP(6),A
CALL #_Mpy_32 ; |206|
DST A,*SP(10) ; |206|
;----------------------------------------------------------------------
; 207 | max3 = extract_l(sum);
;----------------------------------------------------------------------
MVDK *SP(11),*(AR6)
;----------------------------------------------------------------------
; 216 | i = sub(shl(T2,1), T3);
; 217 | j = sub(abs_s(i), 5);
;----------------------------------------------------------------------
SSBX SXM ; ****
SSBX OVM ; ****
NOP
;ST #1,*SP(0) ; |216|
;RSBX FRCT
;RSBX OVM
LD *FP(243),A
;CALL #_clshft ; |216|
SFTA A,1
;RSBX OVM
LD *FP(244),B
;SSBX SXM
LD *(AL),16,A ; |216|
;SSBX OVM
SUB *(BL),16,A,A ; |216|
SFTA A,-16,A ; |216|
STLM A,AR1
;----------------------------------------------------------------------
; 218 | if(j < 0)
;----------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -