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 + -
显示快捷键?