lpc_asm.asm
来自「g.729汇编手工优化」· 汇编 代码 · 共 1,973 行 · 第 1/5 页
ASM
1,973 行
;SFTA A,8
;SFTA A,-8
LD #1,B
LD *SP(8),T
;SSBX OVM
MAS *(BL), A
;RSBX OVM
;NOP
;SFTA A,8
;SFTA A,-8
DST A,*SP(10)
LD *SP(9),A
LD *SP(7),B
ADD A,B
STLM B,AR1
NOP
DLD *SP(10),A
LD *AR1,T
;SSBX OVM
LD #2048,B
MAC *(BL), A
DST A,*SP(10)
;----------------------------------------------------------------------
; 760 | t0 = L_shl(t0, 7); /* Q23 to Q30 with saturation */
; 761 | cheb = extract_h(t0); /* Result in Q14 */
;----------------------------------------------------------------------
;RSBX FRCT
;RSBX OVM
;ST #7,*SP(0)
;CALL #_L_shl
SFTA A,7
;----------------------------------------------------------------------
; 764 | return(cheb);
;----------------------------------------------------------------------
SFTL A,#-16,A
ANDM #-833,*(ST1)
ANDM #-4,*(PMST)
FRAME #12
POPM AR7
POPM AR6
POPM AR1
RET
; return occurs ; |784|
.endfunc 785,000018400h,15
.sect ".text"
.global _Az_lsp
.sym _Az_lsp,_Az_lsp, 32, 2, 0
.func 486
;***************************************************************
;* FUNCTION DEF: _Az_lsp *
;***************************************************************
;***************************************************************
;* *
;* Using -g (debug) with optimization (-o3) may disable key op *
;* *
;***************************************************************
_Az_lsp:
PSHM AR1
PSHM AR6
PSHM AR7
FRAME #-28
STLM A,AR1 ;ar1 = a
LD *SP(33),A
STL A,*SP(14) ;sp(14) = old_lsp
LD *SP(32),A
STL A,*SP(15) ;sp(15) = lsp
;----------------------------------------------------------------------
; 498 | f1[0] = 2048; /* f1[0] = 1.0 is in Q11 */
;----------------------------------------------------------------------
ST #2048,*SP(2)
;----------------------------------------------------------------------
; 499 | f2[0] = 2048; /* f2[0] = 1.0 is in Q11 */
; 528 | //if ( ovf_coef ) {
;----------------------------------------------------------------------
ST #2048,*SP(8)
;----------------------------------------------------------------------
; 529 | if(Test_Overflow(a, f1, f2)) {
; 532 | pChebps = Chebps_10;
;----------------------------------------------------------------------
RSBX OVM
RSBX FRCT
LDM SP,A
ADD #2,A
STL A,*SP(0) ;first par f1=sp(2)
LDM SP,A
ADD #8,A
STL A,*SP(1)
CALLD #_Test_Overflow
NOP
LDM AR1,A
STLM A,AR2
NOP
NOP
BANZ L31,*AR2 ;if( Overflow happend ) goto L31
LD #_Chebps_11,A
BD L33
NOP
STL A,*SP(16) ;sp(16) = pChebps
L31:
ST #1024,*SP(2) ;f1[0] = 1024
RSBX OVM
LDM AR1,A
ADD #10,A,A
STLM A,AR2 ;ar2 = &a[M]
MVMM SP,AR3
LDM AR1,A
MVMM SP,AR1
MAR *+AR3(#2) ;ar3 = f1
MAR *+AR1(#8) ;ar1 = f2
ADD #1,A,A
STLM A,AR4 ;ar4 = &a[1]
ST #1024,*SP(8) ;f2[0] = 1024
STM #4,BRC
LD #_Chebps_10,A
STL A,*SP(16) ;update pChebps
RPTB L33-1
L32:
;----------------------------------------------------------------------
; 542 | f1[i+1] = sub(x, f1[i]); /* f1[i+1] = a[i+1] + a[M-i] - f1[i
; | ] */
; 544 | t0 = L_mult(a[i+1], 8192); /* x = (a[i+1] - a[M-i]) >> 1
; | */
; 545 | t0 = L_msu(t0, a[M-i], 8192); /* -> From Q11 to Q10
; | */
; 546 | x = extract_h(t0);
;----------------------------------------------------------------------
SSBX SXM
SSBX FRCT
SSBX OVM
NOP
MPY *AR4,#8192,A ; a = L_mult(a[i+1], 8192)
SSBX SXM
RSBX OVM
LD #8192,B
SFTA A,8
LD *AR2,T ; T = a[M-i]
SFTA A,-8
ORM #2,*(PMST)
SSBX OVM
ORM #2,*(PMST)
MAC *(BL), A ; a = t0 = L_mac(t0, a[M-i], 8192)
RSBX OVM
SFTL A,#-16,A ; a = x = extract_h(t0)
LD *(AL),16,A
SSBX OVM
NOP
SUB *AR3,16,A,A ; a = sub(x, f1[i])
SFTA A,-16,A
STL A,*+AR3 ;fl[i+1] = sub(x, f1[i])
;----------------------------------------------------------------------
; 547 | f2[i+1] = add(x, f2[i]); /* f2[i+1] = a[i+1] - a[M-i] + f2[i
; | ] */
;----------------------------------------------------------------------
MPY *AR4+,#8192,A
RSBX OVM
NOP
SFTA A,8
LD *AR2-,T
LD #8192,B
SSBX OVM
SFTA A,-8
MAS *(BL), A
RSBX OVM
SFTL A,#-16,A
LD *(AL),16,A
SSBX OVM
NOP
ADD *AR1,16,A,A
SFTA A,-16,A
STL A,*+AR1
;----------------------------------------------------------------------
; 555 | nf=0; /* number of found frequencies */
; 556 | ip=0; /* indicator for f1 or f2 */
; 558 | coef = f1;
;----------------------------------------------------------------------
L33:
;----------------------------------------------------------------------
; 560 | xlow = grid[0];
;----------------------------------------------------------------------
STM #_grid,AR7
MVDK *AR7,*(AR1)
;----------------------------------------------------------------------
; 561 | ylow = (*pChebps)(xlow, coef, NC);
;----------------------------------------------------------------------
RSBX OVM
LDM SP,A
ADD #2,A
RSBX FRCT
STL A,*SP(0) ;coef = f1
ST #5,*SP(1)
LD *SP(16),B
LD *AR7,A ;a = xlow = grid[0]
CALA B
STLM A,AR6 ;ar6 = ylow = (*pChebps)(xlow, coef, NC)
LD #0,A
STL A,*SP(17) ;sp(17) = nf
LD #0,A
STL A,*SP(18) ;sp(18) = ip
RSBX OVM
LDM SP,A
ADD #2,A
STL A,*SP(19)
;----------------------------------------------------------------------
; 563 | j = 0;
; 564 | while ( (nf < M) && (j < GRID_POINTS) )
;----------------------------------------------------------------------
LD #0,A
STL A,*SP(20)
MVKD *(AR7),*SP(21) ;sp(21) = grid
L34:
;----------------------------------------------------------------------
; 566 | j =add(j,1);
;----------------------------------------------------------------------
SSBX SXM
LD *SP(20),A
;LD *(AL),16,A
;SSBX OVM
;NOP
;ADD #1,16,A,A
;SFTA A,-16,A
ADD #1,A,A
STL A,*SP(20) ;j = add(j,1)
;j no overflow
;----------------------------------------------------------------------
; 567 | xhigh = xlow;
;----------------------------------------------------------------------
MVKD *(AR1),*SP(22) ;sp(22) = xhigh
;----------------------------------------------------------------------
; 568 | yhigh = ylow;
;----------------------------------------------------------------------
MVKD *(AR6),*SP(23) ;sp(23) = yhigh
;----------------------------------------------------------------------
; 569 | xlow = grid[j];
;----------------------------------------------------------------------
RSBX OVM
LD A,B
LD *SP(21),A
ADD A,B ; b = grid[i]
STLM B,AR1 ; ar1 = grid[i]
NOP
NOP
MVDK *AR1,*(AR1) ; ar1 = xlow = grid[i]
;----------------------------------------------------------------------
; 570 | ylow = (*pChebps)(xlow,coef,NC);
; 572 | L_temp = L_mult(ylow ,yhigh);
;----------------------------------------------------------------------
;RSBX FRCT
; FRCT = OVM =0, SXM = 1
LD *SP(19),A ;sp(19) = coef
STL A,*SP(0)
ST #5,*SP(1)
LD *SP(16),B
CALAD B
NOP
LDM AR1,A
STLM A,AR6 ;ar6 = ylow = (*pChebps)(xlow,coef,NC)
;----------------------------------------------------------------------
; 573 | if ( L_temp <= (Word32)0)
; 578 | for (i = 0; i < 2; i++)
;----------------------------------------------------------------------
LD *SP(23),T ;T = yhigh
SSBX FRCT
SSBX OVM
MPY *(AR6),A ; a = L_temp
;RSBX OVM
;SSBX SXM
;SFTA A,8
;SFTA A,-8
BC L43,AGT ;if ( L_temp > (Word32)0) goto L43
STM #2,AR7
L35:
;----------------------------------------------------------------------
; 580 | xmid = add( shr(xlow, 1) , shr(xhigh, 1)); /* xmid = (xlow + xhigh)/2 *
; | /
;----------------------------------------------------------------------
SSBX SXM ;****
RSBX OVM ;****
RSBX FRCT ;****
;RSBX FRCT
;ST #1,*SP(0)
;CALLD #_crshft
;NOP
;LDM AR1,A
LD *(AR1),-1,A ;**** a= xlow >> 1
;SSBX SXM
;RSBX OVM
;RSBX FRCT
;ST #1,*SP(0)
LD *(AL),16,A
DST A,*SP(24)
;LD *SP(22),A
;CALL #_crshft
LD *SP(22),-1,A ;****
;RSBX OVM
;NOP
DLD *SP(24),B
SSBX OVM
;SSBX SXM
ADD *(AL),16,B,A
SFTA A,-16,A
STL A,*SP(26) ;sp(26) = xmid
;----------------------------------------------------------------------
; 582 | ymid = (*pChebps)(xmid,coef,NC);
; 584 | L_temp = L_mult(ylow,ymid);
;----------------------------------------------------------------------
LD *SP(19),A
STL A,*SP(0)
ST #5,*SP(1)
LD *SP(16),B
;RSBX FRCT
;RSBX OVM
LD *SP(26),A
CALA B
; FRCT = OVM = SXM = 0
;----------------------------------------------------------------------
; 585 | if ( L_temp <= (Word32)0)
; 587 | yhigh = ymid;
; 588 | xhigh = xmid;
; 590 | else
;----------------------------------------------------------------------
SSBX SXM ;****
STLM A,T ;a = ymid
SSBX FRCT
SSBX OVM
MPY *(AR6),B ;b = L_mult(ylow,ymid)
;RSBX OVM
;SSBX SXM
;SFTA B,8
;SFTA B,-8
BC L36,BLEQ ;if( L_temp <=0) goto L36
;----------------------------------------------------------------------
; 592 | ylow = ymid;
;----------------------------------------------------------------------
STLM A,AR6 ;ylow = ymid
;----------------------------------------------------------------------
; 593 | xlow = xmid;
;----------------------------------------------------------------------
BD L37
MVDK *SP(26),*(AR1)
L36:
STL A,*SP(23)
LD *SP(26),A
STL A,*SP(22)
L37:
;----------------------------------------------------------------------
; 602 | x = sub(xhigh, xlow);
; 603 | y = sub(yhigh, ylow);
;----------------------------------------------------------------------
BANZ L35,*+AR7(-1) ;End of for (i = 0; i < 2; i++)
;----------------------------------------------------------------------
; 605 | if(y == 0)
; 607 | xint = xlow;
; 609 | else
; 611 | sign= y;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?