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

📄 cor_func_asm.asm

📁 g.729汇编手工优化
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        ;RSBX      OVM
        LD        A,B                   ; |76| 
        ;SFTA      B,8                   ; |76| 
        ;SFTA      B,-8                  ; |76| 
        EXP       B                     ; |76| 
        ;RSBX      FRCT
        NOP
        MVMD      T,AR1
        ;MVKD      *(AR1),*SP(0)
        ;CALL      #_L_shl               ; |76| 
;-----------------  L_shl inline  -------------------------------------
        ;RSBX      OVM        
        ;LD        *SP(0),B
        LDM        AR1,B
        ;SFTA      A,8
        ;SFTA      A,-8 
        BC        SHL_L9,BEQ             
        SUB       #1,B,B
        STLM      B,BRC
        ;SSBX      OVM
        RSBX      OVA
        RPTB      SHL_L9-1                 
        SFTA     A,#1       
        BC       SHL_L9,AOV        
SHL_L9:                                                   
;-----------------  L_shl End     -------------------------------------                
        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                   ; |76| 
        ;SSBX      OVM
        ;SFTA      A,-8                  ; |76| 
        ADD       #1,#15,A,A            ; |76| 
        SFTA      A,-16,A               ; |76| 

;----------------------------------------------------------------------
;  79 | g_coeff[4]     = y1y2;                                                 
;----------------------------------------------------------------------
        MVDK      *SP(44),*(AR2)
        STL       A,*AR2(4)

;----------------------------------------------------------------------
;  80 | exp_g_coeff[4] = sub(exp_y1y2,1);    ;                /* 2<y1,y2> */   
;----------------------------------------------------------------------
        ;RSBX      OVM
        LD        *(AR1),16,A           ; |80| 
        ;SSBX      OVM
        NOP
        ADD       #-6,16,A,A            ; |80| 
        SUB       #1,16,A,A             ; |80| 
        MVDK      *SP(43),*(AR1)
        STH       A,*AR1(4)             ; |80| 

;----------------------------------------------------------------------
;  82 | return;                                                                
;----------------------------------------------------------------------

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



	.sect	".text"
	.global	_Cor_h_X

;----------------------------------------------------------------------
;  92 | void Cor_h_X(                                                          
;  93 | Word16 h[],        /* (i) Q12 :Impulse response of filters      */     
;  94 | Word16 X[],        /* (i)     :Target vector                    */     
;  95 | Word16 D[]         /* (o)     :Correlations between h[] and D[] */     
;  97 | )                                                                      
;----------------------------------------------------------------------

_Cor_h_X:

        PSHM      AR1
        PSHM      AR6
        PSHM      AR7
        FRAME     #-90
;----------------------------------------------------------------------
;  99 | Word16 i, j;                                                           
; 100 | Word32 s, max, L_temp;                                                 
; 101 | Word32 y32[L_SUBFR];                                                   
;----------------------------------------------------------------------
        MVMM      SP,AR1
        STLM      A,AR6               ; a = ar6 = h[]
        MAR       *+AR1(#2)           ; ar1 = sp(2) = y32
        LD        *SP(95),A
        STL       A,*SP(82)           ; sp(82) = n[]
        MVDK      *SP(94),*(AR7)      ; ar7 = x[]

;----------------------------------------------------------------------
; 105 | max = 0;                                                               
;----------------------------------------------------------------------
        LD        #0,A
        DST       A,*SP(84)           ; sp(84) = max

;----------------------------------------------------------------------
; 107 | for (i = 0; i < L_SUBFR; i++)                                          
;----------------------------------------------------------------------
        LD        #0,A
        STL       A,*SP(86)           ; sp(86) = i
L8:    

        RSBX      OVM
        LD        *SP(86),A
        LD        *SP(86),B
        ADD       *(AR7),A
        STLM      A,AR3               ; ar3 = x[]
        LD        #39,A
        SUB       B,A                 ; a = 39-sp(86)
        MVMM      AR6,AR2             ; ar2 = h[]

;----------------------------------------------------------------------
; 109 | s = 0;                                                                 
; 110 | for (j = i; j <  L_SUBFR; j++)                                         
;----------------------------------------------------------------------
        LD        #0,B
        STLM      A,BRC
        DST       B,*SP(88)            ; sp(88) = s
        SSBX      SXM          ;****
        DLD       *SP(88),A    ;****
        SSBX      FRCT         ;****
        SSBX      OVM          ;****
        ORM       #2,*(PMST)   ;****
        RPTB      L10-1
        ; loop starts
L9:    
;----------------------------------------------------------------------
; 111 | s = L_mac(s, X[j], h[j-i]);                                            
;----------------------------------------------------------------------
        ;SSBX      SXM
        ;NOP
        ;DLD       *SP(88),A            
        ;ORM       #2,*(PMST)
        ;SSBX      FRCT
        ;SSBX      OVM
        ;ORM       #2,*(PMST)
        ;NOP
        MAC       *AR2+, *AR3+, A, A    
        ;DST       A,*SP(88)              
        
L10:    
        ;DST       A,*SP(88)    ;****
;----------------------------------------------------------------------
; 113 | y32[i] = s;                                                            
;----------------------------------------------------------------------
        ;SSBX      SXM
        NOP
        ;DLD       *SP(88),A
        DST       A,*AR1+               ; y32[i] = s 

;----------------------------------------------------------------------
; 115 | s = L_abs(s);                                                          
;----------------------------------------------------------------------
        ;SSBX      OVM
        ;NOP
        ABS       A,A                   
        DST       A,*SP(88)             ; sp(88) = s

;----------------------------------------------------------------------
; 116 | L_temp =L_sub(s,max);                                                  
; 117 | if(L_temp>0L) {                                                        
;----------------------------------------------------------------------
        ;RSBX      OVM
        ;RSBX      FRCT
        ;DLD       *SP(84),A
        ;DST       A,*SP(0)              
        ;DLD       *SP(88),A             
        ;CALL      #_L_sub               
;------------------  L_sub inline  ------------------------------------
        DLD        *SP(88),A
        NOP
        DSUB      *SP(84),A

;------------------  L_sub End     ------------------------------------        
        
        
        ;RSBX      OVM
        ;SSBX      SXM
        ;SFTA      A,8                    
        ;SFTA      A,-8                 
        BC        L11,ALEQ              ; |116| 

;----------------------------------------------------------------------
; 118 | max = s;                                                               
;----------------------------------------------------------------------
        DLD       *SP(88),A
        DST       A,*SP(84)             ; max = s 
L11:    

        LD        *SP(86),A
        ADD       #1,A             
        STL       A,*SP(86)             ;i++
        ;LD        *(AL),A               
        SUB       #40,A,A               
        BC        L8,ALT                 

;----------------------------------------------------------------------
; 125 | j = norm_l(max);                                                       
; 126 | if( sub(j,16) > 0) {                                                   
;----------------------------------------------------------------------

        DLD       *SP(84),A
        EXP       A                     
        NOP
        ST        T,*SP(86)             ;sp(86) = j
        LD        *SP(86),A
        SUB       #16,A,A                
        BC        L12,ALEQ              ;if( j-16 <= 0) goto L12

;----------------------------------------------------------------------
; 127 | j = 16;                                                                
;----------------------------------------------------------------------
        LD        #16,A
        STL       A,*SP(86)
L12:    

;----------------------------------------------------------------------
; 130 | j = sub(18, j);                                                        
; 132 | for(i=0; i<L_SUBFR; i++) {                                             
;----------------------------------------------------------------------
        LD        #18,16,A              
        LD        *SP(86),B             ; sp(86) = j
        MVMM      SP,AR6
        ;SSBX      OVM
        STM       #40,AR7
        MVDK      *SP(82),*(AR1)        ; ar1 = d[]
        SUB       *(BL),16,A,A          
        MAR       *+AR6(#2)             ; ar6 = y32[]
        SFTA      A,-16,A               
        STL       A,*SP(86)
L13:    
;----------------------------------------------------------------------
; 133 | D[i] = extract_l( L_shr(y32[i], j) );                                  
;----------------------------------------------------------------------
        LD        *SP(86),A
        RSBX      OVM
        RSBX      FRCT
        STL       A,*SP(0)
        DLD       *AR6+,A                
        CALL      #_L_shr  
;------------------- L_shr inline  ------------------------------------
        
;------------------- L_shr inline  ------------------------------------             
        STL       A,*AR1+      
        BANZ      L13,*+AR7(-1)         

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


;***************************************************************
;* UNDEFINED EXTERNAL REFERENCES                               *
;***************************************************************
;	.global	_L_sub
;	.global	_L_shl
	.global	_L_shr
;	.global	_shr

⌨️ 快捷键说明

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