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

📄 qua_gain_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;* AR6   assigned to C$10
	.sym	C$10,15, 4, 4, 16
;* AR6   assigned to C$9
	.sym	C$9,15, 4, 4, 16
;* AR6   assigned to C$8
	.sym	C$8,15, 20, 4, 16
;* B     assigned to C$7
	.sym	C$7,6, 4, 4, 16
;* AR1   assigned to C$6
	.sym	C$6,10, 212, 4, 16,, 2
	.sym	C$5,41, 4, 1, 16
;* A     assigned to C$4
	.sym	C$4,0, 212, 4, 16,, 2
	.sym	C$3,41, 4, 1, 16
;* AR2   assigned to C$2
	.sym	C$2,11, 20, 4, 16
;* AR1   assigned to C$1
	.sym	C$1,10, 20, 4, 16
	.sym	_coeff,8, 51, 1, 80,, 5
	.sym	_coeff_lsf,13, 51, 1, 80,, 5
	.sym	_exp_min,18, 51, 1, 80,, 5
	.sym	_best_gain,23, 51, 1, 32,, 2
;** 75	-----------------------    Gain_predict(&past_qua_en, code, L_subfr, &gcode0, &exp_gcode0);
;** 93	-----------------------    L_tmp1 = _lsmpy(*g_coeff, g_coeff[2]);
;** 94	-----------------------    exp1 = _sadd(_sadd(*exp_coeff, exp_coeff[2]), (-1));
;** 95	-----------------------    C$13 = g_coeff[4];
;** 95	-----------------------    L_tmp2 = _lsmpy(C$13, C$13);
;** 96	-----------------------    C$12 = exp_coeff[4];
;** 96	-----------------------    exp2 = _sadd(_sadd(C$12, C$12), 1);
;** 98	-----------------------    if ( _ssub(exp1, exp2) > 0 ) goto g2;
        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-42
        NOP
;----------------------------------------------------------------------
;  53 | Word16  i, j, index1, index2;                                          
;  54 | Word16  cand1, cand2;                                                  
;  55 | Word16  exp, gcode0, exp_gcode0, gcode0_org, e_min ;                   
;  56 | Word16  nume, denom, inv_denom;                                        
;  57 | Word16  exp1,exp2,exp_nume,exp_denom,exp_inv_denom,sft,tmp;            
;  58 | Word16  g_pitch, g2_pitch, g_code, g2_code, g_pit_cod;                 
;  59 | Word16  coeff[5], coeff_lsf[5];                                        
;  60 | Word16  exp_min[5];                                                    
;  61 | Word32  L_gbk12;                                                       
;  62 | Word32  L_tmp, L_dist_min, L_temp, L_tmp1, L_tmp2, L_acc, L_accb;      
;  63 | Word16  best_gain[2];                                                  
;  67 | static Word16 past_qua_en[4] = { -14336, -14336, -14336, -14336 };     
;----------------------------------------------------------------------
        LD        *SP(51),B
        STL       B,*SP(25)
        LD        *SP(50),B
        STL       B,*SP(26)
        MVDK      *SP(47),*(AR7)
        LD        *SP(49),B
        STL       B,*SP(27)
        LD        *SP(48),B
        MVDK      *SP(46),*(AR1)
	.line	34
;----------------------------------------------------------------------
;  75 | Gain_predict( past_qua_en, code, L_subfr, &gcode0, &exp_gcode0 );      
;----------------------------------------------------------------------
        RSBX      OVM
        RSBX      FRCT
        STL       A,*SP(0)
        LDM       SP,A
        ADD       #6,A
        STL       B,*SP(1)
        STL       A,*SP(2)
        LDM       SP,A
        ADD       #7,A
        STL       A,*SP(3)
        CALLD     #_Gain_predict        ; |75| 
        LD        #_past_qua_en$1,A
        ; call occurs [#_Gain_predict] ; |75| 
	.line	52
;----------------------------------------------------------------------
;  93 | L_tmp1 = L_mult( g_coeff[0], g_coeff[2] );                             
;----------------------------------------------------------------------
        LD        *AR1(2),T
        SSBX      FRCT
        SSBX      OVM
        NOP
        MPY       *AR1,A                ; |93| 
        DST       A,*SP(28)             ; |93| 
	.line	53
;----------------------------------------------------------------------
;  94 | exp1   = add( add( exp_coeff[0], exp_coeff[2] ), 1-2 );                
;----------------------------------------------------------------------
        RSBX      OVM
        SSBX      SXM
        NOP
        LD        *AR7,16,A             ; |94| 
        SSBX      OVM
        ADD       *AR7(2),16,A,A        ; |94| 
        ADD       #-1,16,A,A            ; |94| 
        SFTA      A,-16,A               ; |94| 
        STL       A,*SP(30)
	.line	54
;----------------------------------------------------------------------
;  95 | L_tmp2 = L_mult( g_coeff[4], g_coeff[4] );                             
;----------------------------------------------------------------------
        LD        *AR1(4),A
        STLM      A,T
        MPY       *(AL),A               ; |95| 
        DST       A,*SP(32)             ; |95| 
	.line	55
;----------------------------------------------------------------------
;  96 | exp2   = add( add( exp_coeff[4], exp_coeff[4] ), 1 );                  
;----------------------------------------------------------------------
        LD        *AR7(4),B
        RSBX      OVM
        LD        *(BL),16,A            ; |96| 
        SSBX      OVM
        ADD       *(BL),16,A,A          ; |96| 
        ADD       #1,16,A,A             ; |96| 
        SFTA      A,-16,A               ; |96| 
        STLM      A,AR6
	.line	57
;----------------------------------------------------------------------
;  98 | if( sub(exp1, exp2)>0 ){                                               
;  99 |    L_tmp = L_sub( L_shr( L_tmp1, sub(exp1,exp2) ), L_tmp2 );           
; 100 |    exp = exp2;                                                         
; 102 | else{                                                                  
;----------------------------------------------------------------------
        LD        *SP(30),A
        RSBX      OVM
        LD        *(AL),16,A            ; |98| 
        SSBX      OVM
        SUB       *(AR6),16,A,A         ; |98| 
        SFTA      A,-16,A               ; |98| 
        LD        *(AL),A               ; |98| 
        BC        L9,AGT                ; |98| 
        ; branch occurs ; |98| 
;** 103	-----------------------    L_tmp = L_sub(L_tmp1, L_shr(L_tmp2, _ssub(exp2, exp1)));
;** 104	-----------------------    exp = exp1;
;** 104	-----------------------    goto g3;
	.line	62
;----------------------------------------------------------------------
; 103 | L_tmp = L_sub( L_tmp1, L_shr( L_tmp2, sub(exp2,exp1) ) );              
;----------------------------------------------------------------------
        RSBX      OVM
        LD        *(AR6),16,A           ; |103| 
        LD        *SP(30),B
        SSBX      OVM
        RSBX      FRCT
        SUB       *(BL),16,A,A          ; |103| 
        RSBX      OVM
        STH       A,*SP(0)              ; |103| 
        DLD       *SP(32),A             ; |103| 
        CALL      #_L_shr               ; |103| 
        ; call occurs [#_L_shr] ; |103| 
        RSBX      OVM
        RSBX      FRCT
        DST       A,*SP(0)              ; |103| 
        DLD       *SP(28),A             ; |103| 
        CALL      #_L_sub               ; |103| 
        ; call occurs [#_L_sub] ; |103| 
	.line	63
;----------------------------------------------------------------------
; 104 | exp = exp1;                                                            
; 106 | sft = norm_l( L_tmp );                                                 
;----------------------------------------------------------------------
        B         L10                   ; |104| 
        ; branch occurs ; |104| 
L9:    
;**	-----------------------g2:
;** 99	-----------------------    L_tmp = L_sub(L_shr(L_tmp1, _ssub(exp1, exp2)), L_tmp2);
;** 100	-----------------------    exp = exp2;
	.line	58
        RSBX      OVM
        LD        *SP(30),A
        LD        *(AL),16,A            ; |99| 
        RSBX      FRCT
        SSBX      OVM
        SUB       *(AR6),16,A,A         ; |99| 
        RSBX      OVM
        STH       A,*SP(0)              ; |99| 
        DLD       *SP(28),A             ; |99| 
        CALL      #_L_shr               ; |99| 
        ; call occurs [#_L_shr] ; |99| 
        RSBX      OVM
        RSBX      FRCT
        DLD       *SP(32),B             ; |99| 
        DST       B,*SP(0)              ; |99| 
        CALL      #_L_sub               ; |99| 
        ; call occurs [#_L_sub] ; |99| 
	.line	59
        MVKD      *(AR6),*SP(30)
L10:    
;**	-----------------------g3:
;** 107	-----------------------    C$11 = _lnorm(L_tmp);
;** 107	-----------------------    denom = (unsigned long)L_shl(L_tmp, C$11)>>16;
;** 110	-----------------------    inv_denom = divs(16384, denom);
;** 111	-----------------------    inv_denom = _sneg(inv_denom);
;** 112	-----------------------    exp_inv_denom = _ssub(29, _ssub(_sadd(exp, C$11), 16));
;** 117	-----------------------    L_tmp1 = _lsmpy(g_coeff[2], g_coeff[1]);
;** 118	-----------------------    exp1 = _sadd(exp_coeff[2], exp_coeff[1]);
;** 119	-----------------------    L_tmp2 = _lsmpy(g_coeff[3], g_coeff[4]);
;** 120	-----------------------    exp2 = _sadd(_sadd(exp_coeff[3], exp_coeff[4]), 1);
;** 122	-----------------------    if ( _ssub(exp1, exp2) > 0 ) goto g5;
	.line	66
;----------------------------------------------------------------------
; 107 | denom = extract_h( L_shl(L_tmp, sft) );                                
; 108 | exp_denom = sub( add( exp, sft ), 16 );                                
;----------------------------------------------------------------------
        RSBX      OVM
        LD        A,B                   ; |107| 
        SSBX      SXM
        SFTA      B,8                   ; |107| 
        SFTA      B,-8                  ; |107| 
        EXP       B                     ; |107| 
        RSBX      FRCT
        MVMD      T,AR6
        MVKD      *(AR6),*SP(0)
        CALL      #_L_shl               ; |107| 
        ; call occurs [#_L_shl] ; |107| 
        SFTL      A,#-16,A              ; |107| 
	.line	69
;----------------------------------------------------------------------
; 110 | inv_denom = div_s(16384,denom);                                        
;----------------------------------------------------------------------
        RSBX      FRCT
        RSBX      OVM
        STL       A,*SP(0)
        CALLD     #_divs                ; |110| 
        LD        #16384,A
        ; call occurs [#_divs] ; |110| 
	.line	70
;----------------------------------------------------------------------
; 111 | inv_denom = negate( inv_denom );                                       
;----------------------------------------------------------------------
        SSBX      SXM
        RSBX      OVM
        LD        *(AL),16,A            ; |111| 
        SSBX      OVM
        NOP
        NEG       A,A                   ; |111| 
        SFTA      A,-16,A               ; |111| 
        STL       A,*SP(34)
	.line	71
;----------------------------------------------------------------------
; 112 | exp_inv_denom = sub( 14+15, exp_denom );                               
;----------------------------------------------------------------------
        RSBX      OVM
        LD        *SP(30),A
        LD        *(AL),16,A            ; |112| 
        SSBX      OVM
        ADD       *(AR6),16,A,A         ; |112| 
        SUB       #16,16,A,A            ; |112| 
        RSBX      OVM
        SFTA      A,-16,A               ; |112| 
        LD        #29,16,B              ; |112| 
        SSBX      OVM
        SUB       *(AL),16,B,A          ; |112| 
        SFTA      A,-16,A               ; |112| 
        STL       A,*SP(35)
	.line	76
;----------------------------------------------------------------------
; 117 | L_tmp1 = L_mult( g_coeff[2], g_coeff[1] );                             
;----------------------------------------------------------------------
        LD        *AR1(1),T
        SSBX      FRCT
        MPY       *AR1(2),A             ; |117| 
	.line	77
;----------------------------------------------------------------------
; 118 | exp1   = add( exp_coeff[2], exp_coeff[1] );                            
;----------------------------------------------------------------------
        RSBX      OVM
        LD        *AR7(2),16,B          ; |118| 
        SSBX      OVM
        ADD       *AR7(1),16,B,B        ; |118| 
        SFTA      B,-16,B               ; |118| 
        STL       B,*SP(30)
	.line	78
;----------------------------------------------------------------------
; 119 | L_tmp2 = L_mult( g_coeff[3], g_coeff[4] );                             
;----------------------------------------------------------------------
        LD        *AR1(4),T
        MPY       *AR1(3),B             ; |119| 
        DST       B,*SP(28)             ; |119| 
	.line	79
;----------------------------------------------------------------------
; 120 | exp2   = add( add( exp_coeff[3], exp_coeff[4] ), 1 );                  
;----------------------------------------------------------------------
        RSBX      OVM
        LD        *AR7(3),16,B          ; |120| 
        SSBX      OVM
        ADD       *AR7(4),16,B,B        ; |120| 
        ADD       #1,16,B,B             ; |120| 
        SFTA      B,-16,B               ; |120| 
        STLM      B,AR6
	.line	81
;----------------------------------------------------------------------
; 122 | if( sub(exp1, exp2)>0 ){                                               
; 123 |    L_tmp = L_sub( L_shr( L_tmp1, add(sub(exp1,exp2),1 )), L_shr( L_tmp2
;     | ,1 ) );                                                                
; 124 |    exp = sub(exp2,1);                                                  
; 126 | else{                                                                  
;----------------------------------------------------------------------
        LD        *SP(30),B
        RSBX      OVM
        LD        *(BL),16,B            ; |122| 
        SSBX      OVM
        SUB       *(AR6),16,B,B         ; |122| 
        SFTA      B,-16,B               ; |122| 
        LD        *(BL),B               ; |122| 
        BC        L11,BGT               ; |122| 
        ; branch occurs ; |122| 
;** 127	-----------------------    L_tmp = L_sub(L_shr(L_tmp1, 1), L_shr(L_tmp2, _sadd(_ssub(exp2, exp1), 1)));
;** 128	-----------------------    exp = _ssub(exp1, 1);

⌨️ 快捷键说明

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