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

📄 qua_lsp_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 3 页
字号:
; 172 | *mode_index = 0;                                                       
;----------------------------------------------------------------------
        ST        #0,*AR1               ; |172| 

;----------------------------------------------------------------------
; 173 | L_temp =L_sub(L_tdist[1] ,L_tdist[0]);                                 
; 174 | if (  L_temp<0L){                                                      
;----------------------------------------------------------------------
        ;DLD       *AR2,A                ; |173| 
        ;DST       A,*SP(0)              ; |173| 
        DLD       *AR2(2),A             ; |173| 
        ;CALL      #_L_sub               ; |173| 
        DSUB      *AR2,A
        
        ;SSBX      SXM
        ;SFTA      A,8                   ; |173| 
        ;SFTA      A,-8                  ; |173| 
        BC        L18,AGEQ               ; |173| 

;----------------------------------------------------------------------
; 175 | *mode_index = 1;                                                       
; 177 | return;                                                                
;----------------------------------------------------------------------
        ST        #1,*AR1               ; |175| 
L18:    
        ;FRAME     #2
        POPM      AR1
        RET      
  
	.sect	".text"
	.global	_Get_wegt

;----------------------------------------------------------------------
; 180 | void Get_wegt(                                                         
; 181 | Word16 flsp[],    /* (i) Q13 : M LSP parameters  */                    
; 182 | Word16 wegt[]     /* (o) Q11->norm : M weighting coefficients */       
; 183 | )                                                                      
;----------------------------------------------------------------------

_Get_wegt:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-14
;----------------------------------------------------------------------
; 185 | Word16 i;                                                              
; 186 | Word16 tmp;                                                            
; 187 | Word32 L_acc;                                                          
; 188 | Word16 sft;                                                            
; 189 | Word16 buf[M]; /* in Q13 */                                            
;----------------------------------------------------------------------
        STLM      A,AR2
        LD        *SP(18),A
        STL       A,*SP(12)

;----------------------------------------------------------------------
; 192 | buf[0] = sub( flsp[1], (PI04+8192) );           /* 8192:1.0(Q13) */    
; 194 | for ( i = 1 ; i < M-1 ; i++ ) {                                        
; 195 |   tmp = sub( flsp[i+1], flsp[i-1] );                                   
;----------------------------------------------------------------------
        ;RSBX      OVM
        SSBX      FRCT
        SSBX      OVM
        SSBX      SXM
        STM       #7,BRC
        MVMM      AR2,AR3
        MVMM      SP,AR1
        LD        *AR2(1),16,A          ; |192| 
        ;SSBX      OVM
        MAR       *+AR1(#3)
        SUB       #9221,16,A,A          ; |192| 
        STH       A,*SP(2)              ; |192| 
        RPTB      L20-1
        
L19:    
;----------------------------------------------------------------------
; 196 | buf[i] = sub( tmp, 8192 );                                             
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *AR3(2),16,A          ; |196| 
        ;SSBX      OVM
        ;NOP
        SUB       *AR3,16,A,A           ; |196| 
        SUB       #8192,16,A,A          ; |196| 
        STH       A,*AR1+               ; |196| 
        MAR       *AR3+
        
L20:    
;----------------------------------------------------------------------
; 199 | buf[M-1] = sub( (PI92-8192), flsp[M-2] );                              
; 202 | for ( i = 0 ; i < M ; i++ ) {                                          
;----------------------------------------------------------------------
        ;RSBX      OVM
        MVMM      SP,AR6
        STM       #10,AR7
        LD        #15485,16,A           ; |199| 
        MVDK      *SP(12),*(AR1)
        ;SSBX      OVM
        MAR       *+AR6(#1)
        SUB       *AR2(8),16,A,A        ; |199| 
        STH       A,*SP(11)             ; |199| 
L21:    

;----------------------------------------------------------------------
; 203 | if ( buf[i] > 0 ){                                                     
; 204 |   wegt[i] = 2048;                    /* 2048:1.0(Q11) */               
; 206 | else {                                                                 
; 207 |   L_acc = L_mult( buf[i], buf[i] );           /* L_acc in Q27 */       
;----------------------------------------------------------------------
        LD        *+AR6(1),A
        BC        L22,AGT               ; |203| 
;----------------------------------------------------------------------
; 208 | tmp = extract_h( L_shl( L_acc, 2 ) );       /* tmp in Q13 */           
; 210 | L_acc = L_mult( tmp, CONST10 );             /* L_acc in Q25 */         
;----------------------------------------------------------------------
        ;SSBX      FRCT
        STLM      A,T
        MPY       *(AL),A               ; |208| 
        ;RSBX      OVM
        ;RSBX      FRCT
        ;ST        #2,*SP(0)             ; |208| 
        ;CALL      #_L_shl               ; |208| 
        SFTA      A,2
        
        SFTL      A,#-16,A              ; |208| 

;----------------------------------------------------------------------
; 211 | tmp = extract_h( L_shl( L_acc, 2 ) );       /* tmp in Q11 */           
;----------------------------------------------------------------------
        ;SSBX      FRCT
        ;SSBX      OVM
        MPY       *(AL),#20480,A        ; |211| 
        ;RSBX      FRCT
        ;RSBX      OVM
        ;ST        #2,*SP(0)             ; |211| 
        ;CALL      #_L_shl               ; |211| 
        SFTA      A,2
        
        SFTL      A,#-16,A              ; |211| 

;----------------------------------------------------------------------
; 213 | wegt[i] = add( tmp, 2048 );                 /* wegt in Q11 */          
;----------------------------------------------------------------------
        ;SSBX      SXM
        ;RSBX      OVM
        LD        *(AL),16,A            ; |213| 
        ;SSBX      OVM
        ;NOP
        ADD       #2048,16,A,A          ; |213| 
        BD        L23                   ; |213| 
        NOP
        STH       A,*AR1                ; |213| 
       
L22:    
        ST        #2048,*AR1            ; |204| 
L23:    
;----------------------------------------------------------------------
; 218 | L_acc = L_mult( wegt[4], CONST12 );             /* L_acc in Q26 */     
;----------------------------------------------------------------------
        BANZD     L21,*+AR7(-1)         ; |215| 
        NOP
        MAR       *AR1+

;----------------------------------------------------------------------
; 219 | wegt[4] = extract_h( L_shl( L_acc, 1 ) );       /* wegt in Q11 */      
; 221 | L_acc = L_mult( wegt[5], CONST12 );             /* L_acc in Q26 */     
;----------------------------------------------------------------------
        ;ST        #1,*SP(0)            
        ;SSBX      FRCT
        MVDK      *SP(12),*(AR1)
        MPY       *AR1(4),#19661,A      
        ;RSBX      OVM
        ;RSBX      FRCT
        NOP
        ;CALL      #_L_shl              
        SFTA      A,1
        
        SFTL      A,#-16,A              
        STL       A,*AR1(4)             
;----------------------------------------------------------------------
; 222 | wegt[5] = extract_h( L_shl( L_acc, 1 ) );       /* wegt in Q11 */      
;----------------------------------------------------------------------
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ST        #1,*SP(0)             ; |222| 
        MPY       *AR1(5),#19661,A      ; |222| 
        ;RSBX      FRCT
        ;RSBX      OVM
        NOP
        ;CALL      #_L_shl              
        SFTA      A,1
        
        SFTL      A,#-16,A              ; |222| 
        STL       A,*AR1(5)             ; |222| 

;----------------------------------------------------------------------
; 225 | tmp = 0;                                                               
; 226 | for ( i = 0; i < M; i++ ) {                                            
;----------------------------------------------------------------------
        LD        #0,B
        STM       #9,BRC
        RPTB      L26-1
       
L24:    
;----------------------------------------------------------------------
; 227 | if ( sub(wegt[i], tmp) > 0 ) {                                         
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;SSBX      SXM
        MVDK      *AR1+,*(AR2)
        LD        *(AR2),16,A           ; |227| 
        ;SSBX      OVM
        SUB       *(BL),16,A,A          ; |227| 
        SFTA      A,-16,A               ; |227| 
        LD        *(AL),A               ; |227| 
        BC        L25,ALEQ              ; |227| 
;----------------------------------------------------------------------
; 228 | tmp = wegt[i];                                                         
;----------------------------------------------------------------------
        LDM       AR2,B
L25:    
        NOP
L26:    
;----------------------------------------------------------------------
; 232 | sft = norm_s(tmp);                                                     
; 233 | for ( i = 0; i < M; i++ ) {                                            
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;SSBX      SXM
        LD        *(BL),16,A            ; |232| 
        STM       #10,AR7
        EXP       A                     ; |232| 
        MVDK      *SP(12),*(AR1)
        MVMD      T,AR6
L27:    
;----------------------------------------------------------------------
; 234 | wegt[i] = shl(wegt[i], sft);                  /* wegt in Q(11+sft) */  
;----------------------------------------------------------------------
        MVKD      *(AR6),*SP(0)
        ;RSBX      FRCT
        ;RSBX      OVM
        LD        *AR1,A
        CALL      #_shl              
        
        STL       A,*AR1+
;----------------------------------------------------------------------
; 237 | return;                                                                
;----------------------------------------------------------------------
        BANZ      L27,*+AR7(-1)         

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

⌨️ 快捷键说明

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