📄 pitch_a_c_asm.asm
字号:
MVMM SP,AR1
SUB #1,A,A
STLM A,BRC
MAR *+AR1(#8)
SSBX FRCT ; ****
ORM #2,*(PMST) ; ****
DLD *SP(6),A ; ****
RPTB L50-1
L49:
;----------------------------------------------------------------------
; 408 | s = L_mac(s, scaled_y1[i], scaled_y1[i]);
; 409 | exp_yy = norm_l(s);
;----------------------------------------------------------------------
LD *AR1+,B
;DLD *SP(6),A
STLM B,T
;ORM #2,*(PMST)
;SSBX FRCT
;SSBX OVM
;ORM #2,*(PMST)
MAC *(BL), A
;DST A,*SP(6)
L50:
DST A,*SP(6) ; ****
;----------------------------------------------------------------------
; 410 | yy = round( L_shl(s, exp_yy) );
;----------------------------------------------------------------------
DLD *SP(6),A
;RSBX OVM
EXP A
RSBX FRCT
MVMD T,AR1
MVKD *(AR1),*SP(0)
DLD *SP(6),A
CALL #_L_shl
;RSBX OVM
;SSBX SXM
;SFTA A,8
SSBX OVM
;SFTA A,-8
NOP
ADD #1,#15,A,A
SFTA A,-16,A
STLM A,AR6
;----------------------------------------------------------------------
; 411 | exp_yy = sub(exp_yy, 4);
;----------------------------------------------------------------------
;RSBX OVM
LD *(AR1),16,A
;SSBX OVM
;NOP
SUB #4,16,A,A
SFTA A,-16,A
BD L52
STLM A,AR1
NOP
L51:
SSBX SXM
NOP
DLD *SP(6),A
EXP A
NOP
MVMD T,AR1
RSBX FRCT
MVKD *(AR1),*SP(0)
DLD *SP(6),A
CALL #_L_shl
;RSBX OVM
;SSBX SXM
;SFTA A,8
SSBX OVM
;SFTA A,-8
NOP
ADD #1,#15,A,A
SFTA A,-16,A
STLM A,AR6
NOP
L52:
;----------------------------------------------------------------------
; 415 | if (Verifi_Overflow(0,xn,y1,0,L_subfr,1,&s)) {
; 416 | exp_xy = norm_l(s);
; 417 | xy = round( L_shl(s, exp_xy) );
; 419 | else {
;----------------------------------------------------------------------
LD *SP(48),A
STL A,*SP(0)
RSBX OVM
LD *SP(51),A
RSBX FRCT
STL A,*SP(1)
ST #0,*SP(2)
LD *SP(49),A
STL A,*SP(3)
LDM SP,A
ADD #6,A
ST #1,*SP(4)
STL A,*SP(5)
CALLD #_Verifi_Overflow
NOP
LD #0,A
STLM A,AR2
NOP
NOP
; BANZ L55,*AR2 ; if(*AR2!=0) go to L55
BC L55,AEQ ; if(A==0) goto L55 2005.8.19 dzc fix this bug
;----------------------------------------------------------------------
; 420 | s = 0;
;----------------------------------------------------------------------
LD #0,A
DST A,*SP(6) ; |420|
;----------------------------------------------------------------------
; 421 | for(i=0; i<L_subfr; i++)
;----------------------------------------------------------------------
SSBX SXM
NOP
LD *SP(49),A
BC L54,ALEQ ; |421|
;RSBX OVM
LD *SP(49),A
MVMM SP,AR2
MVDK *SP(48),*(AR3)
SUB #1,A,A
STLM A,BRC
MAR *+AR2(#8)
DLD *SP(6),A
SSBX FRCT
SSBX OVM
ORM #2,*(PMST)
RPTB L54-1
L53:
;----------------------------------------------------------------------
; 422 | s = L_mac(s, xn[i], scaled_y1[i]);
; 423 | exp_xy = norm_l(s);
;----------------------------------------------------------------------
;DLD *SP(6),A
;ORM #2,*(PMST)
;SSBX FRCT
;SSBX OVM
;ORM #2,*(PMST)
;NOP
MAC *AR2+, *AR3+, A, A
;DST A,*SP(6)
L54:
DST A,*SP(6)
;----------------------------------------------------------------------
; 424 | xy = round( L_shl(s, exp_xy) );
;----------------------------------------------------------------------
;DLD *SP(6),A
;RSBX OVM
EXP A
RSBX FRCT
MVMD T,AR7
MVKD *(AR7),*SP(0)
DLD *SP(6),A
CALL #_L_shl
;RSBX OVM
;SSBX SXM
;SFTA A,8
SSBX OVM
;SFTA A,-8
ADD #1,#15,A,A
SFTA A,-16,A
;----------------------------------------------------------------------
; 425 | exp_xy = sub(exp_xy, 2);
;----------------------------------------------------------------------
RSBX OVM
LD *(AR7),16,B
SSBX OVM
NOP
SUB #2,16,B,B
SFTA B,-16,B
BD L56
STLM B,AR7
NOP
L55:
SSBX SXM
NOP
DLD *SP(6),A
EXP A
NOP
MVMD T,AR7
RSBX OVM
RSBX FRCT
MVKD *(AR7),*SP(0)
DLD *SP(6),A
CALL #_L_shl
RSBX OVM
SSBX SXM
SFTA A,8
SSBX OVM
SFTA A,-8
ADD #1,#15,A,A
SFTA A,-16,A
L56:
;----------------------------------------------------------------------
; 428 | g_coeff[0] = yy;
;----------------------------------------------------------------------
MVDK *SP(50),*(AR2)
MVKD *(AR6),*AR2
;----------------------------------------------------------------------
; 429 | g_coeff[1] = sub(15, exp_yy);
;----------------------------------------------------------------------
RSBX OVM
NOP
LD #15,16,B ; |429|
SSBX OVM
SUB *(AR1),16,B,B ; |429|
STH B,*AR2(1) ; |429|
;----------------------------------------------------------------------
; 430 | g_coeff[2] = xy;
;----------------------------------------------------------------------
STL A,*AR2(2)
;----------------------------------------------------------------------
; 431 | g_coeff[3] = sub(15, exp_xy);
;----------------------------------------------------------------------
RSBX OVM
NOP
LD #15,16,B ; |431|
SSBX OVM
SUB *(AR7),16,B,B ; |431|
STH B,*AR2(3) ; |431|
;----------------------------------------------------------------------
; 436 | if (xy <= 0)
;----------------------------------------------------------------------
LD *(AL),A ; |436|
BC L57,AGT ; |436|
;----------------------------------------------------------------------
; 438 | g_coeff[3] = -15; /* Force exp_xy to -15 = (15-30) */
;----------------------------------------------------------------------
MVMM AR2,AR1
ST #-15,*AR1(3) ; |438|
;----------------------------------------------------------------------
; 439 | return( (Word16) 0);
;----------------------------------------------------------------------
BD L59 ; |439|
NOP
LD #0,A
L57:
;----------------------------------------------------------------------
; 444 | xy = shr(xy, 1); /* Be sure xy < yy */
;----------------------------------------------------------------------
RSBX FRCT
RSBX OVM
ST #1,*SP(0) ; |444|
CALL #_shr ; |444|
;----------------------------------------------------------------------
; 445 | gain = div_s( xy, yy);
; 447 | i = sub(exp_xy, exp_yy);
;----------------------------------------------------------------------
RSBX FRCT
RSBX OVM
MVKD *(AR6),*SP(0)
CALL #_divs ; |445|
;----------------------------------------------------------------------
; 448 | gain = shr(gain, i); /* saturation if > 1.99 in Q14 */
; 452 | if( sub(gain, 19661) > 0)
;----------------------------------------------------------------------
SSBX SXM
RSBX OVM
LD *(AR7),16,B
SSBX OVM
SUB *(AR1),16,B,B
RSBX FRCT
RSBX OVM
STH B,*SP(0)
CALL #_shr
SSBX SXM
RSBX OVM
LD *(AL),B
SUB #19662,B,B
BC L58,BLT
;----------------------------------------------------------------------
; 454 | gain = 19661;
;----------------------------------------------------------------------
LD #19661,A
L58:
;----------------------------------------------------------------------
; 458 | return(gain);
;----------------------------------------------------------------------
L59:
ANDM #-833,*(ST1) ; |458|
ANDM #-4,*(PMST) ; |458|
FRAME #52 ; |458|
POPM AR7 ; |458|
POPM AR6 ; |458|
POPM AR1 ; |458|
RET
.sect ".text"
.global _Enc_lag3
;----------------------------------------------------------------------
; 489 | Word16 Enc_lag3( /* output: Return index of encoding */
; 490 | Word16 T0, /* input : Pitch delay */
; 491 | Word16 T0_frac, /* input : Fractional pitch delay */
; 492 | Word16 *T0_min, /* in/out: Minimum search delay */
; 493 | Word16 *T0_max, /* in/out: Maximum search delay */
; 494 | Word16 pit_min, /* input : Minimum pitch delay */
; 495 | Word16 pit_max, /* input : Maximum pitch delay */
; 496 | Word16 pit_flag /* input : Flag for 1st subframe */
; 497 | )
;----------------------------------------------------------------------
_Enc_lag3:
PSHM AR1
NOP
MVDK *SP(2),*(AR5)
MVDK *SP(3),*(AR1)
MVDK *SP(4),*(AR3)
MVDK *SP(5),*(AR4)
MVDK *SP(7),*(AR0)
MVDK *SP(6),*(AR2)
;----------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -