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

📄 qua_lsp.asm

📁 G.729在54X上的定点实现源代码.C++编程,可以直接下载运行,并且优化
💻 ASM
📖 第 1 页 / 共 2 页
字号:
    addm   #1,*sp(0)
    ld     *sp(0),16,b
    sub    #NC0,16,b
    bc     l_pre_s2,blt 
    
    frame   4
    popm   ar4
    popm   ar3
    popm   ar0
    ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_select_1(
;  Word16 rbuf[],              /* (i) Q13 : target vector             */
;  Word16 lspcb1[],            /* (i) Q13 : first stage lsp codebook  */
;  Word16 wegt[],              /* (i) norm: weighting coefficients    */
;  Word16 lspcb2[][M],         /* (i) Q13 : second stage lsp codebook */
;  Word16 *index               /* (o)     : selected codebook index   */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_select_1:
    pshm   ar0
    pshm   ar2
    pshm   ar3
    pshm   ar4
    pshm   ar5
    pshm   ar6
    frame  -6  ;*sp(0)--k1,*sp(1)(2)--L_dist,*sp(3)(4)--L_dmin,*sp(5)--tmp
             ;rbuf,lspcb2,wegt,lspcb1[cand_cur]--*sp(13),*index--*sp(17)
    mvdk   *sp(13),ar2
    stm    #rbuf,ar3
    stm    #buf1,ar4
    stm    #lspcb2,ar5

    stm     #5,ar0
    
    stm    #NC-1,brc
    rptb   ls1_rep1-1
    sub    *ar3+,*ar2+,b
    sth    b,*ar4+
ls1_rep1:
    st     #0,*sp(17)      ;*index = 0
    ld     #7fffh,16,a     ;L_dmin = MAX_32
    or     #0ffffh,a
    dst    a,*sp(3)
    
    st     #0,*sp(0)      ;for ( k1 = 0 ; k1 < NC1 ; k1++ )
ls1_rep3:
    ld     #0,b           ;L_dist = 0
    
    stm    #buf1,ar4
    stm    #wegt,ar6
        
    stm    #NC-1,brc      ;for ( j = 0 ; j < NC ; j++ )
    rptb   ls1_rep2-1
    sub    *ar4+,*ar5+,a   ;tmp = sub(buf[j], lspcb2[k1][j])
    sth    a,*sp(5)        ;tmp2 = mult( wegt[j], tmp )
    ld     *ar6+,t         
    mpy    *sp(5),a
    ld     a,-16,a        
    stlm   a,t            ;L_dist = L_mac( L_dist, tmp2, tmp )
    mac    *sp(5),b       
ls1_rep2:
    dld    *sp(3),a
    min    b
    dst    b,*sp(3)
    ld     *sp(17),b
    xc     1,c
    ld     *sp(0),b
    stl    b,*sp(17)
    
    ld     *ar5+0,b     ;for lspcb2 next k1
    
    addm   #1,*sp(0)
    ld     *sp(0),16,b
    sub    #NC1,16,b
    bc     ls1_rep3,blt
    
    frame  6
    popm   ar6
    popm   ar5
    popm   ar4
    popm   ar3
    popm   ar2
    popm   ar0
    ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_select_2(
;  Word16 rbuf[],              /* (i) Q13 : target vector             */
;  Word16 lspcb1[],            /* (i) Q13 : first stage lsp codebook  */
;  Word16 wegt[],              /* (i) norm: weighting coef.           */
;  Word16 lspcb2[][M],         /* (i) Q13 : second stage lsp codebook */
;  Word16 *index               /* (o)     : selected codebook index   */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_select_2:
    pshm   ar0
    pshm   ar2
    pshm   ar3
    pshm   ar4
    pshm   ar5
    pshm   ar6
    frame  -6  ;*sp(0)--k1,*sp(1)(2)--L_dist,*sp(3)(4)--L_dmin,*sp(5)--tmp
             ;rbuf,lspcb2,wegt,lspcb1[cand_cur]--*sp(13),*index--*sp(17)
    mvdk   *sp(13),ar2
    stm    #rbuf+5,ar3
    stm    #buf2+5,ar4
    stm    #lspcb2+5,ar5 
    
    stm     #5,ar0
    
    ld     *ar2+0,a
    
    stm    #NC-1,brc
    rptb   ls1_rep2-1
    sub    *ar3+,*ar2+,b
    sth    b,*ar4+
ls2_rep1:
    st     #0,*sp(17)      ;*index = 0
    ld     #7fffh,16,a     ;L_dmin = MAX_32
    or     #0ffffh,a
    dst    a,*sp(3)
    
    st     #0,*sp(0)      ;for ( k1 = 0 ; k1 < NC1 ; k1++ )
ls2_rep3:
    ld     #0,b           ;L_dist = 0    
    
    stm    #buf2,ar4
    stm    #wegt,ar6

    stm    #NC-1,brc      ;for ( j = 0 ; j < NC ; j++ )
    rptb   ls2_rep2-1
    sub    *ar4+,*ar5+,a   ;tmp = sub(buf[j], lspcb2[k1][j])
    sth    a,*sp(5)        ;tmp2 = mult( wegt[j], tmp )
    ld     *ar6+,t         
    mpy    *sp(5),a
    ld     a,-16,a        
    stlm   a,t            ;L_dist = L_mac( L_dist, tmp2, tmp )
    mac    *sp(5),b       
ls2_rep2:
    dld    *sp(3),a
    min    b
    dst    b,*sp(3)
    ld     *sp(17),b
    xc     1,c
    ld     *sp(0),b
    stl    b,*sp(17)
    
    ld     *ar5+0,b     ;for lspcb2 next k1
    
    addm   #1,*sp(0)
    ld     *sp(0),16,b
    sub    #NC1,16,b
    bc     ls2_rep3,blt
        
    frame  6
    popm   ar6
    popm   ar5
    popm   ar4
    popm   ar3
    popm   ar2
    popm   ar0
    ret   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_get_tdist(
;  Word16 wegt[],        /* (i) norm: weight coef.                */
;  Word16 buf[],         /* (i) Q13 : candidate LSP vector        */
;  Word32 *L_tdist,      /* (o) Q27 : distortion                  */
;  Word16 rbuf[],        /* (i) Q13 : target vector               */
;  Word16 fg_sum[]       /* (i) Q15 : present MA prediction coef. */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_get_tdist:
    pshm   ar2
    pshm   ar3
    pshm   ar4
    pshm   ar5
    pshm   ar6
    
    frame  -1       ;*sp(0)--tmp2
                    ;*sp(7)--&L_tdist,*sp(8)--fg_sum[mode]
    
    stm   #wegt,ar2     ;ar2--wegt
    stm   #buf,ar3      ;ar3--buf
    stm   #rbuf,ar4     ;ar4--rbuf
    mvdk  *sp(7),ar6    ;ar6--&L_tdist[mode]
    mvdk  *sp(8),ar5    ;ar5--fg_sum[mode]
    
    ld    #0,b
    
    stm   #M-1,brc
    rptb  Lgt_rep-1
    sub   *ar3+,*ar4+,a
    ld    a,-16,a
    stlm  a,t
    mpy   *ar5+,a
    ld    a,-16,a
    stlm  a,t
    mpy   *ar2+,a
    ld    a,4,a
    sth   a,*sp(0)
    mac   *sp(0),b
Lgt_rep:
    dst   b,*ar6
    frame   1
    
    pshm   ar6
    popm   ar5
    popm   ar4
    popm   ar3
    popm   ar2
    ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Lsp_last_select(
;  Word32 L_tdist[],     /* (i) Q27 : distortion         */
;  Word16 *mode_index    /* (o)     : the selected mode  */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lsp_last_select:
    pshm   ar3
                  ;*sp(10)--mode_index
    stm    #L_tdist,ar3
    st     #0,*sp(10)
    dld     *ar3,b
    dld     *ar3(2),a
    sub    b,a
    xc     2,alt
    st     #1,*sp(10)
    
    popm   ar3
    ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;void Get_wegt(
;  Word16 flsp[],    /* (i) Q13 : M LSP parameters  */
;  Word16 wegt[]     /* (o) Q11->norm : M weighting coefficients */
;)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Get_wegt:
    PSHM    ST0
    PSHM    ST1
    pshm    ar2
    pshm    ar3
    pshm    ar4
    pshm    ar5
    frame   -4    ;*sp(0)--i,*sp(1)--tmp,*sp(2)--sft,*sp(3)--flsp
                  ;*sp(11)--wegt
    
    
    stl     a,*sp(3)
    add     #2,a,b
    stlm    b,ar2         ;ar2--flsp+2
    stlm    a,ar3         ;ar3--flsp
    mvdk    *sp(11),ar4   ;ar4--wegt
    stm     #buf,ar5      ;ar5--buf
    
    ld      *ar2(1),16,b     ;buf[0] = sub( flsp[1], (PI04+8192) )
    sub     #PI04+8192,16,b
    sth     b,*ar5+
    
    stm     #M-3,brc            ;for ( i = 1 ; i < M-1 ; i++ )
    rptb    gw_rep1-1
    sub     *ar2+,*ar3+,b       ;tmp = sub( flsp[i+1], flsp[i-1] )
    sub     #8192,b             ;buf[i] = sub( tmp, 8192 )
    sth     b,*ar5+
gw_rep1:
    ld      #PI92-8192,16,b    ;buf[M-1] = sub( (PI92-8192), flsp[M-2] )
    sub     *ar3,16,b
    sth     b,*ar5
    
    stm     #buf,ar5
    stm     #M-1,brc
    rptb    gw_rep2-1
    ld      *ar5,a
    bc      gw_n,aleq
    st      #2048,*ar4+
    ld      *ar5+,b
    b       gw_p
gw_n:
    squr    *ar5+,b
    sth     b,2,*sp(1)
    mpy     *sp(1),#CONST10,b
    ld      b,2,b
    add     #2048,16,b
    sth     b,*ar4+
gw_p:
    nop
gw_rep2:
    mvdk    *sp(11),ar4   ;ar4--wegt
    mpy     *ar4(4),#CONST12,b
    sth     b,1,*ar4(4)
    
    mpy     *ar4(5),#CONST12,b
    sth     b,1,*ar4(5)
    
    ld      #0,b     
    stm     #M-1,brc
    rptb    gw_rep3-1
    ld      *ar4+,16,a
    max     b
gw_rep3: 
    exp     b
    stm     #M-1,brc
    rptb    gw_rep4-1
    ld      *ar4,16,b
    norm    b
    sth     b,*ar4+
gw_rep4:
    
    frame   4
    popm    ar5
    popm    ar4
    popm    ar3
    popm    ar2
    POPM    ST1
    POPM    ST0
    RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         .end

⌨️ 快捷键说明

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