www.pudn.com > g729Decoder.rar > LSP_LSF.asm


;========================================================================== 
;  File Name 
;  ---------- 
;  LSP_LSF.ASM 
; 
;  Brief Description of the Code: 
;  ------------------------------ 
;  Lsp_Lsf2 : convert lsp coefficients to lsf coefficients. 
;  Lsf_Lsp2 : convert lsf coefficients to lsp coefficients. 
; 
;  Ref 
;  ------ 
;  LPCFUNC.C 
;========================================================================== 
        .mmregs 
 
        .include  ..\include\const.h 
        .include  ..\include\tab_ld8a.h 
        .include  ..\include\ld8amem.h 
 
        .text 
        .def      Lsp_Lsf 
        .def      Lsp_Lsf2 
        .def      Lsf_Lsp2 
 
;----------------------------------------------------------------------- 
;  Lsp_Lsf 
;----------------------------------------------------------------------- 
;  void Lsp_lsf( 
;    Word16 lsp[],    /* (i) Q15 : lsp[m] (range: -1<=val<1)                */ 
;    Word16 lsf[],    /* (o) Q15 : lsf[m] normalized (range: 0.0<=val<=1)   */ 
;    Word16 m         /* (i)     : LPC order                                */ 
;  ) 
;----------------------------------------------------------------------- 
;  Pointers : ptr_lsp_coef -> lsp 
;             ptr_lsf_coef -> lsf 
; 
;  Input : BRC = m - 1 
; 
;----------------------------------------------------------------------- 
;  Note : output of ASM code = output of C code << 1 
; 
;         There is no need to shift lsf[] left one bit in Perc_var(). 
;----------------------------------------------------------------------- 
        .asg    "AR1", AR_Index 
        .asg    "AR2", pLspCoef 
        .asg    "AR3", pLsfCoef 
        .asg    "AR4", pCosTable 
        .asg    "AR5", pSlopeACosQ12 
 
Lsp_Lsf: 
        MVDM    ptr_lsp_coef, pLspCoef 
        MVDM    ptr_lsf_coef, pLsfCoef 
 
        STM     #CosTable+63, pCosTable 
        STM     #SlopeACosQ12+63, pSlopeACosQ12 
 
        MAR     *+pLspCoef(M-1) 
        MAR     *+pLsfCoef(M-1) 
 
        RPTBD   End_Lsp_Lsf1-1 
        STM     #63, AR_Index 
 
                LD      *pLspCoef-, 16, B 
FindCosIndex1: 
                SUB     *pCosTable-, 16, B, A 
                BCD     FindCosIndex1, AGT 
                        MAR     *pSlopeACosQ12- 
                        MAR     *AR_Index- 
 
 
                MAR     *pSlopeACosQ12+ 
                MAR     *AR_Index+ 
 
        ;  acos(lsp[i])= ind*512 + (slope_acos[ind]*offset >> 11) 
 
                MPYA    *pSlopeACosQ12       ; B = SlopeACosQ12[ind]*offset 
 
                LDM     AR_Index, A 
                MAR     *pCosTable+ 
                SFTA    A, 9 
                sfta    b,4,b 
                add     #1,16,b 
                ADD     B, -16, A 
                ld    a,-1,a 
                ld     a,1,a 
                STL     A, *pLsfCoef- 
End_Lsp_Lsf1: 
        RET 
 
 
 
 
;----------------------------------------------------------------------- 
;  Lsp_Lsf2 
;----------------------------------------------------------------------- 
;  void Lsp_lsf2( 
;    Word16 lsp[],    /* (i) Q15 : lsp[m] (range: -1<=val<1)   */ 
;    Word16 lsf[],    /* (o) Q13 : lsf[m] (range: 0.0<=val lsp[] 
;              Addr_lsf_coefQ13 -> lsf[] 
; 
;  Input : BRC = m - 1 
; 
;----------------------------------------------------------------------- 
;  note : *(Addr_lsf_coefQ13 - 1)  = PI04 = 0.4  ã  
;         *(Addr_lsf_coefQ13 + 10) = PI92 = 0.92 ã  
; 
;----------------------------------------------------------------------- 
 
        .asg    "AR1", AR_Index 
        .asg    "AR2", pLspCoef 
        .asg    "AR3", pLsfCoefQ13 
        .asg    "AR4", pCosTable 
        .asg    "AR5", pSlopeACosQ12 
 
Lsp_Lsf2: 
        STM     #Addr_lsp_coef+M-1, pLspCoef 
        STM     #Addr_lsf_coefQ13+M, pLsfCoefQ13 
        STM     #CosTable+63, pCosTable 
        STM     #SlopeACosQ12+63, pSlopeACosQ12 
 
        ST      #PI92, *pLsfCoefQ13-            ; *(Addr_lsf_coefQ13 + 10) = PI92 = 0.92 ã  
 
        RPTBD   End_Lsp_Lsf-1 
        STM     #63, AR_Index 
 
                LD      *pLspCoef-, 16, B 
FindCosIndex: 
                        SUB     *pCosTable-, 16, B, A 
                BCD     FindCosIndex, AGT 
                        MAR     *pSlopeACosQ12- 
                        MAR     *AR_Index- 
 
 
                MAR     *pSlopeACosQ12+ 
                MAR     *AR_Index+ 
 
        ;  acos(lsp[i])= ind*512 + (slope_acos[ind]*offset >> 11) 
 
                MPYA    *pSlopeACosQ12       ; B = SlopeACosQ12[ind]*offset 
 
                LDM     AR_Index, A 
                MAR     *pCosTable+ 
                SFTA    A, 10 
                ADD     B, -11, A 
                SFTA    A, 15 
                STM     #25736, T             ; 25736: 2.0*PI in Q12 
                MPYA    A 
                STL     A, -16, *pLsfCoefQ13- 
End_Lsp_Lsf: 
        RETD 
        ST      #PI04, *pLsfCoefQ13           ; *(Addr_lsf_coefQ13 - 1)  = PI04 = 0.4  ã  
 
 
 
 
;----------------------------------------------------------------------- 
;  Lsf_Lsp2 
;----------------------------------------------------------------------- 
;  void Lsf_lsp2( 
;    Word16 lsf[],    /* (i) Q13 : lsf[m] (range: 0.0<=val lsp[] 
;              Addr_lsfq_coefQ13 -> lsf[] 
; 
;  Input : BRC = m - 1 
;          DP = Lmin1 
;----------------------------------------------------------------------- 
 
Inv2PIQ27          .set    20861 
 
        .asg    "AR1", pSlopeCosQ19 
        .asg    "AR5", pInv2PIQ27 
 
        .asg    "Lmin1", xAddr_Inv2PISQ27 
 
Lsf_Lsp2: 
        STM     #xAddr_Inv2PISQ27, pInv2PIQ27 
        STM     #Addr_lsfq_coefQ13, pLsfCoefQ13 
        ST      #Inv2PIQ27, *pInv2PIQ27 
 
        RPTBD   EndLsf_Lsp - 1 
        STM     #Addr_lspq_coef, pLspCoef 
 
                MPY     *pLsfCoefQ13+, *pInv2PIQ27, A 
 
                LD      A, -16, B 
                LD      B, -8, B 
                STLM    B, pSlopeCosQ19 
                STLM    B, pCosTable 
                AND     #0ffh, 16, A            ; A_hi = offset in Q8 
                MAR     *+pSlopeCosQ19(SlopeCosQ19) 
                MAR     *+pCosTable(CosTable) 
 
                MPYA    *pSlopeCosQ19            ; B(Q29) = Offsse * SlopeCos[ind] 
                SFTA    B, -13 
                ADD     *pCosTable, B 
                STL     B, *pLspCoef+ 
 
EndLsf_Lsp: 
        RET