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

📄 cor_func_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	.mmregs
FP	.set	AR7


	.sect	".text"
	.global	_Corr_xy2
;----------------------------------------------------------------------
;  26 | void Corr_xy2(                                                         
;  27 | Word16 xn[],           /* (i) Q0  :Target vector.                  */  
;  28 | Word16 y1[],           /* (i) Q0  :Adaptive codebook.              */  
;  29 | Word16 y2[],           /* (i) Q12 :Filtered innovative vector.     */  
;  30 | Word16 g_coeff[],      /* (o) Q[exp]:Correlations between xn,y1,y2 */  
;  31 | Word16 exp_g_coeff[]   /* (o)       :Q-format of g_coeff[]         */  
;  32 | )                                                                      
;----------------------------------------------------------------------

_Corr_xy2:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-46
;----------------------------------------------------------------------
;  34 | Word16   i,exp;                                                        
;  35 | Word16   exp_y2y2,exp_xny2,exp_y1y2;                                   
;  36 | Word16   y2y2, xny2, y1y2;                                       
;  37 | Word32   L_acc;                                                        
;  38 | Word16   scaled_y2[L_SUBFR];                   
;  43 | for(i=0; i<L_SUBFR; i++) {                                             
;----------------------------------------------------------------------
        MVMM      SP,AR6
        STL       A,*SP(42)
        STM       #40,AR7
        LD        *SP(53),A
        MAR       *+AR6(#2)
        STL       A,*SP(43)
        MVDK      *SP(51),*(AR1)
        LD        *SP(52),A
        STL       A,*SP(44)
        LD        *SP(50),A
        STL       A,*SP(45)
        SSBX      SXM                ; ****
        SSBX      OVM
        NOP
L1:    

;----------------------------------------------------------------------
;  44 | scaled_y2[i] = shr(y2[i], 3);        }                                 
;----------------------------------------------------------------------
        ;ST        #3,*SP(0)             
        ;RSBX      FRCT
        ;RSBX      OVM
        LD        *AR1+,A
        ;CALL      #_crshft   
        SFTA      A,-3                ; ****
        
        BANZD     L1,*+AR7(-1)          
        NOP
        STL       A,*AR6+

        MVMM      SP,AR1
        MAR       *+AR1(#2)
;----------------------------------------------------------------------
;  47 | L_acc = 1;                       /* Avoid case of all zeros */         
;  48 | for(i=0; i<L_SUBFR; i++)                                               
;----------------------------------------------------------------------
        LD        #1,A
        STM       #39,BRC
        SSBX      FRCT
        ;SSBX      OVM
        ORM       #2,*(PMST)
        RPTB      L3-1
L2:    
;----------------------------------------------------------------------
;  49 | L_acc = L_mac(L_acc, scaled_y2[i], scaled_y2[i]);    /* L_acc:Q19 */   
;  51 | exp      = norm_l(L_acc);                                              
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *AR1+,B
        ;SSBX      SXM
        ;SFTA      A,8                   
        STLM      B,T
        ;SFTA      A,-8                  
        ;ORM       #2,*(PMST)
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        MAC       *(BL), A 
L3:    

;----------------------------------------------------------------------
;  52 | y2y2     = round( L_shl(L_acc, exp) );                                 
;  53 | exp_y2y2 = add(exp, 19-16);                          /* Q[19+exp-16] */
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        A,B                   ; |52| 
        ;SSBX      SXM
        ;SFTA      B,8                  ; |52| 
        ;SFTA      B,-8                 ; |52| 
        EXP       B                     ; |52| 
        ;RSBX      FRCT
        NOP
        MVMD      T,AR1
        ;MVKD      *(AR1),*SP(0)
        ;CALL      #_L_shl               ; |52| 
;-----------------  L_shl inline  -------------------------------------
        ;RSBX      OVM        
        ;LD        *SP(0),B
        LDM        AR1,B
        ;SFTA      A,8
        ;SFTA      A,-8
        BC        SHL_L7,BEQ              
        SUB       #1,B,B
        STLM      B,BRC
        ;SSBX      OVM
        RSBX      OVA
        RPTB      SHL_L7-1                 
        SFTA     A,#1       
        BC       SHL_L7,AOV        
SHL_L7:                          
                        
   
;-----------------  L_shl End     -------------------------------------        
        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                   ; |52| 
        ;SSBX      OVM
        ;SFTA      A,-8                  ; |52| 
        ADD       #1,#15,A,A            ; |52| 
        SFTA      A,-16,A               ; |52| 

;----------------------------------------------------------------------
;  55 | g_coeff[2]     = y2y2;                                                 
;----------------------------------------------------------------------
        MVDK      *SP(44),*(AR2)
        STL       A,*AR2(2)

;----------------------------------------------------------------------
;  56 | exp_g_coeff[2] = exp_y2y2;                                             
;----------------------------------------------------------------------
        MVMM      SP,AR2
        ;RSBX      OVM
        LD        *(AR1),16,A           ; |56| 
        ;SSBX      OVM
        MVDK      *SP(43),*(AR1)
        ADD       #3,16,A,A             ; |56| 
        STH       A,*AR1(2)             ; |56| 
        MVDK      *SP(42),*(AR3)
        MAR       *+AR2(#2)

;----------------------------------------------------------------------
;  59 | L_acc = 1;                       /* Avoid case of all zeros */         
;  60 | for(i=0; i<L_SUBFR; i++)                                               
;----------------------------------------------------------------------
        STM       #39,BRC
        LD        #1,A
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        RPTB      L5-1
L4:    

;----------------------------------------------------------------------
;  61 | L_acc = L_mac(L_acc, xn[i], scaled_y2[i]);           /* L_acc:Q10 */   
;  63 | exp      = norm_l(L_acc);                                              
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;NOP
        ;SFTA      A,8                   ; |61| 
        ;SFTA      A,-8                  ; |61| 
        ;ORM       #2,*(PMST)
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        ;NOP
        MAC       *AR2+, *AR3+, A, A    ; |61| 
L5:    

;----------------------------------------------------------------------
;  64 | xny2     = round( L_shl(L_acc, exp) );                                 
;  65 | exp_xny2 = add(exp, 10-16);                          /* Q[10+exp-16] */
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        A,B                   ; |64| 
        ;SFTA      B,8                   ; |64| 
        ;SFTA      B,-8                  ; |64| 
        EXP       B                     ; |64| 
        ;RSBX      FRCT
        NOP
        MVMD      T,AR1
        ;MVKD      *(AR1),*SP(0)
        ;CALL      #_L_shl               
;-----------------  L_shl inline  -------------------------------------
        ;RSBX      OVM        
        ;LD        *SP(0),B
        LDM        AR1,B
        ;SFTA      A,8
        ;SFTA      A,-8 
        BC        SHL_L8,BEQ             
        SUB       #1,B,B
        STLM      B,BRC
        ;SSBX      OVM
        RSBX      OVA
        RPTB      SHL_L8-1                 
        SFTA     A,#1       
        BC       SHL_L8,AOV        
SHL_L8:                                                   
;-----------------  L_shl End     -------------------------------------        
        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                   ; |64| 
        ;SSBX      OVM
        ;SFTA      A,-8                  ; |64| 
        ADD       #1,#15,A,A            ; |64| 
        SFTA      A,-16,A               ; |64| 

;----------------------------------------------------------------------
;  67 | g_coeff[3]     = negate(xny2);                                         
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *(AL),16,A            ; |67| 
        ;SSBX      OVM
        MVDK      *SP(44),*(AR2)
        NEG       A,A                   ; |67| 
        STH       A,*AR2(3)             ; |67| 

;----------------------------------------------------------------------
;  68 | exp_g_coeff[3] = sub(exp_xny2,1);                   /* -2<xn,y2> */    
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *(AR1),16,A           ; |68| 
        ;SSBX      OVM
        MVMM      SP,AR2
        ADD       #-6,16,A,A            ; |68| 
        SUB       #1,16,A,A             ; |68| 
        MVDK      *SP(43),*(AR1)
        STH       A,*AR1(3)             ; |68| 
        MVDK      *SP(45),*(AR3)
        MAR       *+AR2(#2)

;----------------------------------------------------------------------
;  71 | L_acc = 1;                       /* Avoid case of all zeros */         
;  72 | for(i=0; i<L_SUBFR; i++)                                               
;----------------------------------------------------------------------
        STM       #39,BRC
        ;SSBX      FRCT
        LD        #1,A
        RPTB      L7-1
        
L6:    

;----------------------------------------------------------------------
;  73 | L_acc = L_mac(L_acc, y1[i], scaled_y2[i]);           /* L_acc:Q10 */   
;  75 | exp      = norm_l(L_acc);                                              
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;NOP
        ;SFTA      A,8                   
        ;SFTA      A,-8                  
        ;ORM       #2,*(PMST)
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        ;NOP
        MAC       *AR2+, *AR3+, A, A   
L7:    

;----------------------------------------------------------------------
;  76 | y1y2     = round( L_shl(L_acc, exp) );                                 
;  77 | exp_y1y2 = add(exp, 10-16);                          /* Q[10+exp-16] */
;----------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -