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

📄 lspgetq_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 4 页
字号:
        ;;ORM       #2,*(PMST)
        ;;SSBX      OVM
        ;;ORM       #2,*(PMST)
        NOP
        MAC       *AR3, *AR2, A, A      ; |136| 
        MAR       *+AR2(#10)
        MAR       *+AR3(#10)
        ; loop ends ; |136| 
L13:    
;**  	-----------------------    U$19 -= 39;
;**  	-----------------------    U$17 -= 39;
;** 138	-----------------------    *U$30++ = L_acc>>16;
;** 139	-----------------------    if ( (--L$1) != (-1) ) goto g2;
;**  	-----------------------    return;
        MAR       *+AR3(#-39)
        MAR       *+AR2(#-39)
	.line	17
;----------------------------------------------------------------------
; 138 | lsp[j] = extract_h(L_acc);                                             
;----------------------------------------------------------------------
        SFTL      A,#-16,A              ; |138| 
        STL       A,*AR1+               ; |138| 
	.line	18
;----------------------------------------------------------------------
; 140 | return;                                                                
;----------------------------------------------------------------------
        ;;RSBX      OVM
        ;;NOP
        NOP
        MAR       *AR4-
        BANZ      L11,*AR4(1)           ; |139| 
        ; branch occurs ; |139| 
	.line	20
        ANDM      #-833,*(ST1)
        ANDM      #-4,*(PMST)
        POPM      AR1
        RET
        ; return occurs
;;	.endfunc	141,000000400h,1



	.sect	".text"
	.global	_Lsp_expand_1_2

;----------------------------------------------------------------------
;  93 | void Lsp_expand_1_2(                                                   
;  94 | Word16 buf[],       /* (i/o) Q13 : LSP vectors */                      
;  95 | Word16 gap          /* (i)   Q13 : gap         */                      
;  96 | )                                                                      
;----------------------------------------------------------------------

;***************************************************************
;* FUNCTION DEF: _Lsp_expand_1_2                               *
;***************************************************************

;***************************************************************
;*                                                             *
;* Using -g (debug) with optimization (-o3) may disable key op *
;*                                                             *
;***************************************************************
_Lsp_expand_1_2:
	.line	5
;* A     assigned to _buf
	.sym	_buf,0, 19, 17, 16
	.sym	_gap,6, 3, 9, 16
;* AR1   assigned to U$4
	.sym	U$4,10, 19, 4, 16
;* AR6   assigned to L$1
	.sym	L$1,15, 4, 4, 16
;* A     assigned to _tmp
	.sym	_tmp,0, 3, 4, 16
;* AR7   assigned to _gap
	.sym	_gap,16, 3, 4, 16
;* A     assigned to _buf
	.sym	_buf,0, 19, 4, 16
;**  	-----------------------    #pragma MUST_ITERATE(9, 9, 9)
;**  	-----------------------    #pragma LOOP_FLAGS(5120u)
;**  	-----------------------    U$4 = buf;
;**  	-----------------------    L$1 = 9;
        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-2
;----------------------------------------------------------------------
;  98 | Word16 j, tmp;                                                         
;  99 | Word16 diff;        /* Q13 */                                          
; 101 | for ( j = 1 ; j < M ; j++ ) {                                          
; 102 |   diff = sub( buf[j-1], buf[j] );                                      
;----------------------------------------------------------------------
        STLM      A,AR1
        NOP
        STM       #9,AR6
        MVDK      *SP(6),*(AR7)
L14:    
;**	-----------------------g2:
;** 103	-----------------------    if ( (tmp = crshft(_sadd(_ssub(*U$4, U$4[1]), gap), 1)) <= 0 ) goto g4;
	.line	11
;----------------------------------------------------------------------
; 103 | tmp = shr( add( diff, gap), 1 );                                       
; 105 | if ( tmp > 0 ) {                                                       
;----------------------------------------------------------------------
        RSBX      OVM
        SSBX      SXM
        ;;ST        #1,*SP(0)             ; |103| 
        RSBX      FRCT
        LD        *AR1,16,A             ; |103| 
        SSBX      OVM
        SUB       *AR1(1),16,A,A        ; |103| 
        ADD       *(AR7),16,A,A         ; |103| 
        ;;RSBX      OVM
        NOP
        ;;CALLD     #_crshft              ; |103| 
        SFTA      A,-1;;WLY
        NOP
        SFTA      A,-16,A               ; |103| 
        ; call occurs [#_crshft] ; |103| 
        ;;SSBX      SXM
        LD        *(AL),A               ; |103| 
        BC        L15,ALEQ              ; |103| 
        ; branch occurs ; |103| 
;** 106	-----------------------    *U$4 = _ssub(*U$4, tmp);
;** 107	-----------------------    U$4[1] = _sadd(U$4[1], tmp);
	.line	14
;----------------------------------------------------------------------
; 106 | buf[j-1] = sub( buf[j-1], tmp );                                       
;----------------------------------------------------------------------
        ;;RSBX      OVM
        NOP
        LD        *AR1,16,B             ; |106| 
        ;;SSBX      OVM
        SUB       *(AL),16,B,B          ; |106| 
        STH       B,*AR1                ; |106| 
	.line	15
;----------------------------------------------------------------------
; 107 | buf[j]   = add( buf[j], tmp );                                         
;----------------------------------------------------------------------
        ;;RSBX      OVM
        LD        *AR1(1),16,B          ; |107| 
        ;;SSBX      OVM
        ADD       *(AL),16,B,A          ; |107| 
        STH       A,*AR1(1)             ; |107| 
L15:    
;**	-----------------------g4:
;** 109	-----------------------    ++U$4;
;** 109	-----------------------    if ( --L$1 ) goto g2;
;**  	-----------------------    return;
	.line	17
;----------------------------------------------------------------------
; 110 | return;                                                                
;----------------------------------------------------------------------
        BANZD     L14,*+AR6(-1)         ; |109| 
        NOP
        MAR       *AR1+
        ; branch occurs ; |109| 
	.line	19
        ANDM      #-833,*(ST1)
        ANDM      #-4,*(PMST)
        FRAME     #2
        POPM      AR7
        POPM      AR6
        POPM      AR1
        RET
        ; return occurs
;;	.endfunc	111,000018400h,5



	.sect	".text"
	.global	_Lsp_get_quant

;----------------------------------------------------------------------
;  16 | void Lsp_get_quant(                                                    
;  17 | Word16 lspcb1[][M],      /* (i) Q13 : first stage LSP codebook      */ 
;  18 | Word16 lspcb2[][M],      /* (i) Q13 : Second stage LSP codebook     */ 
;  19 | Word16 code0,            /* (i)     : selected code of first stage  */ 
;  20 | Word16 code1,            /* (i)     : selected code of second stage */ 
;  21 | Word16 code2,            /* (i)     : selected code of second stage */ 
;  22 | Word16 fg[][M],          /* (i) Q15 : MA prediction coef.           */ 
;  23 | Word16 freq_prev[][M],   /* (i) Q13 : previous LSP vector           */ 
;  24 | Word16 lspq[],           /* (o) Q13 : quantized LSP parameters      */ 
;  25 | Word16 fg_sum[]          /* (i) Q15 : present MA prediction coef.   */ 
;  26 | )                                                                      
;----------------------------------------------------------------------

;***************************************************************
;* FUNCTION DEF: _Lsp_get_quant                                *
;***************************************************************

;***************************************************************
;*                                                             *
;* Using -g (debug) with optimization (-o3) may disable key op *
;*                                                             *
;***************************************************************
_Lsp_get_quant:
	.line	12
;* A     assigned to _lspcb1
	.sym	_lspcb1,0, 211, 17, 16,, 10
	.sym	_lspcb2,20, 211, 9, 16,, 10
	.sym	_code0,21, 3, 9, 16
	.sym	_code1,22, 3, 9, 16
	.sym	_code2,23, 3, 9, 16
	.sym	_fg,24, 211, 9, 16,, 10
	.sym	_freq_prev,25, 211, 9, 16,, 10
	.sym	_lspq,26, 19, 9, 16
	.sym	_fg_sum,27, 19, 9, 16
;
; BRC	assigned to temp var  L$1
; BRC	assigned to temp var  L$2
;
;* BRC   assigned to L$1
	.sym	L$1,25, 4, 4, 16
;* BRC   assigned to L$2
	.sym	L$2,25, 4, 4, 16
;* A     assigned to L$2
	.sym	L$2,0, 4, 4, 16
;* A     assigned to L$1
	.sym	L$1,0, 4, 4, 16
;* AR2   assigned to U$23
	.sym	U$23,11, 20, 4, 16
;* AR4   assigned to U$23
	.sym	U$23,13, 20, 4, 16
;* AR3   assigned to U$18
	.sym	U$18,12, 20, 4, 16
;* AR5   assigned to U$18
	.sym	U$18,14, 20, 4, 16
;* AR3   assigned to _lspcb1
	.sym	_lspcb1,12, 211, 4, 16,, 10
;* BK    assigned to _lspcb2
	.sym	_lspcb2,19, 211, 4, 16,, 10
;* A     assigned to _code0
	.sym	_code0,0, 3, 4, 16
;* AR2   assigned to _code1
	.sym	_code1,11, 3, 4, 16
;* AR0   assigned to _code2
	.sym	_code2,9, 3, 4, 16
;* AR7   assigned to _fg
	.sym	_fg,16, 211, 4, 16,, 10
;* AR1   assigned to _freq_prev
	.sym	_freq_prev,10, 211, 4, 16,, 10
;* AR6   assigned to _lspq
	.sym	_lspq,15, 19, 4, 16
	.sym	_fg_sum,14, 19, 1, 16
;* B     assigned to K$16
	.sym	K$16,6, 4, 4, 16
;* AR4   assigned to U$32
	.sym	U$32,13, 20, 4, 16
;* AR2   assigned to U$14
	.sym	U$14,11, 20, 4, 16
	.sym	_buf,4, 51, 1, 160,, 10
;**  	-----------------------    #pragma MUST_ITERATE(5, 5, 5)
;**  	-----------------------    #pragma LOOP_FLAGS(4096u)
;**  	-----------------------    U$14 = &lspcb2[10*code1];
;**  	-----------------------    K$16 = code0*10;
;**  	-----------------------    U$18 = &lspcb1[K$16];
;**  	-----------------------    U$23 = &buf[0];
;**	-----------------------g2:
;**  	-----------------------    L$1 = 4;
;**	-----------------------g8:
        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-16
;----------------------------------------------------------------------
;  28 | Word16 j;                                                              
;  29 | Word16 buf[M];           /* Q13 */                                     
;  32 | for ( j = 0 ; j < NC ; j++ )                                           
;----------------------------------------------------------------------
        SSBX      SXM;;
        SSBX      OVM;;
        STLM      A,AR3
        STM       #10,T
        MVDK      *SP(20),*(BK)
        LD        *SP(27),A
        MVDK      *SP(22),*(AR2)
        MVDK      *SP(23),*(AR0)
        MVDK      *SP(25),*(AR1)
        LDM       BK,B
        MVDK      *SP(26),*(AR6)
        STL       A,*SP(14)
        MVDK      *SP(24),*(AR7)
        LD        *SP(21),A
        ANDM      #65533,*(PMST)
        RSBX      FRCT
        ;;RSBX      OVM
        ANDM      #65533,*(PMST)
        MVMM      SP,AR4
        MAC       *(AR2), B
        STM       #4,BRC
        STLM      A,T
        STLM      B,AR2
        MAR       *+AR4(#4)
        MPY       #10,B
        ADD       *(AR3),B,A
        STLM      A,AR5

        RPTB      L17-1
        ; loop starts
L16:    
;** 33	-----------------------    *U$23++ = _sadd(*U$18++, *U$14++);
;** 33	-----------------------    if ( --L$1 != -1 ) goto g8;
	.line	18
;----------------------------------------------------------------------
;  33 | buf[j] = add( lspcb1[code0][j], lspcb2[code1][j] );                    
;  35 | for ( j = NC ; j < M ; j++ )                                           
;----------------------------------------------------------------------
        ;;RSBX      OVM
        ;;SSBX      SXM
        ;;NOP
        LD        *AR5+,16,A            ; |33| 
        ;;SSBX      OVM
        NOP
        ADD       *AR2+,16,A,A          ; |33| 
        STH       A,*AR4+               ; |33| 
        ; loop ends ; |33| 
L17:    
;**  	-----------------------    #pragma MUST_ITERATE(5, 5, 5)
;**  	-----------------------    #pragma LOOP_FLAGS(4096u)
;**  	-----------------------    U$18 = &lspcb1[K$16+5];
;**  	-----------------------    U$23 = &buf[5];
;**  	-----------------------    U$32 = &lspcb2[10*code2+5];
;**	-----------------------g5:
;**  	-----------------------    L$2 = 4;
;**	-----------------------g7:
        ;;RSBX      OVM
        LDM       AR3,A
        MVMM      SP,AR2
        STM       #10,T
        ADD       B,A
        STM       #4,BRC
        ADD       #5,A,A
        STLM      A,AR3
        MAR       *+AR2(#9)
        LDM       BK,A
        MAC       *(AR0), A
        ADD       #5,A,A
        STLM      A,AR4
        RPTB      L19-1
        ; loop starts
L18:    
;** 36	-----------------------    *U$23++ = _sadd(*U$18++, *U$32++);
;** 36	-----------------------    if ( --L$2 != -1 ) goto g7;
	.line	21
;----------------------------------------------------------------------
;  36 | buf[j] = add( lspcb1[code0][j], lspcb2[code2][j] );                    
;----------------------------------------------------------------------
        ;;RSBX      OVM
        ;;SSBX      SXM
        ;;NOP
        LD        *AR3+,16,A            ; |36| 
        ;;SSBX      OVM
        NOP
        ADD       *AR4+,16,A,A          ; |36| 
        STH       A,*AR2+               ; |36| 
        ; loop ends ; |36| 

⌨️ 快捷键说明

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