⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pitch_a_c_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        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 + -