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

📄 lsp_intp.asm

📁 TI C54写的G729代码,视线8kbps高质量语音解码,汇编优化
💻 ASM
字号:
;==========================================================================
;  File Name
;  ----------
;  LSP_INTP.ASM
;
;  Brief Description of the Code:
;  ------------------------------
;  Find the polynomial F1(z) and F2(z) from the LSPs
;
;  Ref
;  ------
;  LPCFUNC.C
;==========================================================================
;-----------------------------------------------------------
; procedure Get_lsp_pol:
;           ~~~~~~~~~~~
; Find the polynomial F1(z) and F2(z) from the LSPs
;-----------------------------------------------------------
;
; Parameters:
;  lsp[]   : line spectral freq. (cosine domain)    in Q15
;  f1[]    : the coefficients of F1                 in Q24
;  f2[]    : the coefficients of F2                 in Q24
;-----------------------------------------------------------
; void Get_lsp_pol(Word16 *lsp, Word32 *f)
;-----------------------------------------------------------
; Input : AR2 -> f1
;         AR3 -> f2
;         AR5 -> lsp
;
; Output: f1[], f2[]
;         AR0 =  4
;         AR2 -> f1[NC+1-2]=f1[4]
;         AR3 -> f2[NC+1-2]=f2[4]
;         AR5 -> lsp
;
; Modified Registers: AR0, AR1, AR2, AR3, AR4, AR5
;-----------------------------------------------------------
		.mmregs
        .include ..\include\const.h
        
        .text
        .def     Get_lsp_pol
        .def     LOOP

One_Q24 .set     100h

        .asg    "AR2", pf1
        .asg    "AR3", pf2
        .asg    "AR4", pLspCoef
        .asg    "AR5", pB               ; AR5 -> BL or BH

Get_lsp_pol:
        LD      #One_Q24, 16, A
        DST     A, *pf1+
        DST     A, *pf2+

        LD      *pLspCoef+, 10, A
        NEG     A
        DST     A, *pf1-                ; pf1 -> f1[-2]

        LD      *pLspCoef+, 10, A
        NEG     A
        DST     A, *pf2-                ; pf2 -> f2[-2]

        STM     #2-2, AR0               ; AR0 = i-2
        STM     #5-2+1, AR1             ; AR1 = 5-2+1 = 4
        STM     BL, AR5                 ; initially AR5 -> BL


LOOP            MVDM    AR0, BRC
                PSHM    AR0
                MVMM    AR1, AR0        ; AR0 = 4

                DLD     *pf1+0, A       ; *f1 = f1[-2]
                DST     A, *pf1

                RPTBD   BLK_END-1
                DLD     *pf2+0, A       ; *f2 = f2[-2]
                DST     A, *pf2

; Compute *f1+=(f1[-2]-2*f1[-1]*lsp)
                        DLD     *pf1-, A
                        DLD     *pf1-, B
                        DADD    *pf1+0, A
                        DST     A, *pf1

                  
                        SFTA    B, -1
                        SFTA    B, 1           ; to be bit-exact with C code

                        LD      #0, A
                        MACSU   *pB+, *pLspCoef, A
                        LD      A, -16, A
                        LD      A, -1, A
                        LD      A, 1, A
                        MAC     *pB-, *pLspCoef+, A
                        LD      A, 1, A

                        DRSUB   *pf1, A
                        DST     A, *pf1-

; Compute *f2+=(f2[-2]-2*f2[-1]*lsp)
                        DLD     *pf2-, A
                        DLD     *pf2-, B
                        DADD    *pf2+0, A
                        DST     A, *pf2

                        SFTA    B, -1
                        SFTA    B, 1           ; to be bit-exact with C code

                        LD      #0, A
                        MACSU   *pB+, *pLspCoef, A
                        LD      A, -16, A
                        LD      A, -1, A
                        LD      A, 1, A
                        MAC     *pB-, *pLspCoef-, A
                        LD      A, 1, A

                        DRSUB    *pf2, A
                        DST      A, *pf2-
BLK_END
                POPM    AR0                     ; AR0 = i-2
                LD      *pLspCoef+, 10, A
                DRSUB   *pf1, A
                DST     A, *pf1+0
                MAR     *pf1+0                  ; f1+=(i-2)

                LD      *pLspCoef+, 10, A
                DRSUB   *pf2, A
                DST     A, *pf2+0
                MAR     *pf2+0                  ; f2+=(i-2)

                MAR     *AR0+                   ; i++
                CMPR    0, AR1
        BC      LOOP, NTC

        RET




⌨️ 快捷键说明

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