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

📄 gainpred_asm.asm

📁 g.729汇编手工优化
💻 ASM
字号:
	.mmregs
FP	.set	AR7



	.sect	".text"
	.global	_Gain_predict
;----------------------------------------------------------------------
;  30 | void Gain_predict(                                                     
;  31 | Word16 past_qua_en[], /* (i) Q10 :Past quantized energies        */    
;  32 | Word16 code[],        /* (i) Q13 :Innovative vector.             */    
;  33 | Word16 L_subfr,       /* (i)     :Subframe length.               */    
;  34 | Word16 *gcode0,       /* (o) Qxx :Predicted codebook gain        */    
;  35 | Word16 *exp_gcode0    /* (o)     :Q-Format(gcode0)               */    
;  36 | )                                                                      
;----------------------------------------------------------------------

_Gain_predict:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-4
;----------------------------------------------------------------------
;  38 | Word16  i, exp, frac;                                                  
;  39 | Word32  L_tmp;                                                         
;----------------------------------------------------------------------
        SSBX      SXM
        MVDK      *SP(8),*(AR2)
        MVDK      *SP(10),*(AR6)
        MVDK      *SP(11),*(AR7)
        LD        *SP(9),B
        STLM      A,AR1

;----------------------------------------------------------------------
;  45 | L_tmp = 0;                                                             
;----------------------------------------------------------------------
        LD        #0,A

;----------------------------------------------------------------------
;  46 | for(i=0; i<L_subfr; i++)                                               
;----------------------------------------------------------------------
        BC        L9,BLEQ               ; |46| 

        RSBX      OVM
        NOP
        SUB       #1,B,B
        STLM      B,BRC
        NOP
		SSBX      FRCT;;WLY
        SSBX      OVM;;WLY
        ORM       #2,*(PMST);;WLY
        RPTB      L9-1
       
L8:    
;----------------------------------------------------------------------
;  47 | L_tmp = L_mac(L_tmp, code[i], code[i]);                                
;----------------------------------------------------------------------
        ;;RSBX      OVM
        LD        *AR2+,B
        ;;SFTA      A,8                   ; |47| 
        STLM      B,T
        ;;SFTA      A,-8                  ; |47| 
        ;;ORM       #2,*(PMST)
        ;;SSBX      FRCT
        ;;SSBX      OVM
        ;;ORM       #2,*(PMST)
        MAC       *(BL), A              ; |47| 
        
L9:    

;----------------------------------------------------------------------
;  60 | Log2(L_tmp, &exp, &frac);               /* Q27->Q0 ^Q0 ^Q15       */   
;----------------------------------------------------------------------
        RSBX      OVM
        LDM       SP,B
        ADD       #2,B
        RSBX      FRCT
        STL       B,*SP(0)
        LDM       SP,B
        ADD       #3,B
        STL       B,*SP(1)
        CALL      #_Log2               
 
;----------------------------------------------------------------------
;  61 | L_tmp = Mpy_32_16(exp, frac, -24660);   /* Q0 Q15 Q13 -> ^Q14     */   
;----------------------------------------------------------------------
        LD        *SP(3),A
        ;;RSBX      FRCT
        ;;RSBX      OVM
        STL       A,*SP(0)
        ST        #-24660,*SP(1)       
        LD        *SP(2),A
        CALL      #_Mpy_32_16           

;----------------------------------------------------------------------
;  65 | L_tmp = L_mac(L_tmp, 32588, 32);        /* 32588*32[Q14]=127.298  */   
;----------------------------------------------------------------------
        ;;RSBX      OVM
        NOP
        SFTA      A,8                   
        SSBX      SXM
        STM       #32588,T
        LD        #32,B
        SFTA      A,-8                   
        ORM       #2,*(PMST)
        SSBX      OVM
        SSBX      FRCT
        ;;ORM       #2,*(PMST)
        MAC       *(BL), A              

;----------------------------------------------------------------------
;  72 | L_tmp = L_shl(L_tmp, 10);                      /* From Q14 to Q24 */   
;  73 | for(i=0; i<4; i++)                                                     
;----------------------------------------------------------------------
        ;;RSBX      FRCT
        ;;RSBX      OVM
        ;;ST        #10,*SP(0)            ; |72| 
        ;;CALL      #_L_shl               ; |72| 
        SFTA	A,10
        
        STM       #_pred,AR3
        MVMM      AR1,AR2
        STM       #3,BRC

        SSBX      FRCT;;WLY
        RPTB      L11-1
        
L10:    
;----------------------------------------------------------------------
;  74 | L_tmp = L_mac(L_tmp, pred[i], past_qua_en[i]); /* Q13*Q10 ->Q24 */     
;----------------------------------------------------------------------
        ;;RSBX      OVM
        ;;SSBX      SXM
        ;;SFTA      A,8                   ; |74| 
        ;;SFTA      A,-8                  ; |74| 
        ;;ORM       #2,*(PMST)
        ;;SSBX      FRCT
        ;;SSBX      OVM
        ;;ORM       #2,*(PMST)
        ;;NOP
        MAC       *AR2+, *AR3+, A, A    ; |74| 
        ; loop ends ; |74| 
L11:    
;----------------------------------------------------------------------
;  76 | *gcode0 = extract_h(L_tmp);                    /* From Q24 to Q8  */   
;----------------------------------------------------------------------
        LD        A,B                   ; |76| 
        SFTL      B,#-16,B              ; |76| 
        STL       B,*AR6                ; |76| 
;----------------------------------------------------------------------
;  84 | L_tmp = L_mult(*gcode0, 5439);       /* *0.166 in Q15, result in Q24*/ 
;----------------------------------------------------------------------
        ;;SSBX      FRCT
        ;;SSBX      OVM
        SFTL      A,#-16,A              ; |84| 
        MPY       *(AL),#5439,A         ; |84| 
;----------------------------------------------------------------------
;  85 | L_tmp = L_shr(L_tmp, 8);             /* From Q24 to Q16             */ 
;----------------------------------------------------------------------
        RSBX      FRCT
        ;;RSBX      OVM
        ;;ST        #8,*SP(0)             ; |85| 
        ;;CALL      #_L_shr               ; |85| 
        SFTA	A,-8


;----------------------------------------------------------------------
;  86 | L_Extract(L_tmp, &exp, &frac);       /* Extract exponent of gcode0  */ 
;----------------------------------------------------------------------
        RSBX      OVM
        LDM       SP,B
        ADD       #2,B
        STL       B,*SP(0)
        ;;RSBX      FRCT
        LDM       SP,B
        ADD       #3,B
        STL       B,*SP(1)
        CALL      #_L_Extract           ; |86| 

;----------------------------------------------------------------------
;  88 | *gcode0 = extract_l(Pow2(14, frac)); /* Put 14 as exponent so that  */ 
;----------------------------------------------------------------------
        ;;RSBX      OVM
        LD        *SP(3),A
        ;;RSBX      FRCT
        STL       A,*SP(0)
        CALLD     #_Pow2                ; |88| 
        NOP
        LD        #14,A
        ; call occurs [#_Pow2] ; |88| 
        NOP
        STL       A,*AR6

;----------------------------------------------------------------------
;  91 | *exp_gcode0 = sub(14,exp);                                             
;----------------------------------------------------------------------
        ;;RSBX      OVM
        SSBX      SXM
        LD        #14,16,A              
        SSBX      OVM
        NOP
        SUB       *SP(2),16,A,A         
        STH       A,*AR7                

        ANDM      #-833,*(ST1)
        ANDM      #-4,*(PMST)
        FRAME     #4
        POPM      AR7
        POPM      AR6
        POPM      AR1
        RET

;***************************************************************
;* UNDEFINED EXTERNAL REFERENCES                               *
;***************************************************************
	.global	_Log2
	.global	_Pow2
	.global	_L_Extract
	.global	_Mpy_32_16
	.global	_pred

⌨️ 快捷键说明

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