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

📄 mov_warn.asm

📁 TI C54写的G729代码,视线8kbps高质量语音编码,汇编优化
💻 ASM
字号:
;================================================================
;  File Name
;  ----------
;  MOV_WARN.ASM
;
;  Brief Description of the Code:
;  ------------------------------
;  Find the lag that has maximum correlation with scal_sig[] 
;  Only to remove warning from some compilers
;
;  Ref
;  ------
;  PITCH_A.C
;================================================================
;  mov_warn:
;----------------------------------------------------------------
;  arguments:
;
;    signal[]   :Signal used to compute the open loop pitch.
;    L_frame    :Length of frame to compute pitch.
;    lag_max    :Maximum lag
;    lag_min    :Minimum lag
;    *cor_max   ;Maximum of normalized correlation of lag found.
;
;  Return lag found.
;----------------------------------------------------------------
;  Str_Lag_max        .struct
;  ptr_signal         .word   1
;  lag_max            .word   1
;  lag_min            .word   1
;  ptr_cor_max        .word   1
;  Str_Lag_max_Len    .endstruct
;----------------------------------------------------------------
;  Buffer : Addr_lag_max_buf[2] at even boundary
;----------------------------------------------------------------
;  Output : AR1 = p_max
;  Modified Registers: AR0, AR1, AR4, AR5, AR6
;----------------------------------------------------------------
		.mmregs
		.include ..\include\const.h
		.include ..\include\struct.h
		.include ..\include\ld8amem.h

        .text
        .def     mov_warn

param_lag_max   .tag     Str_Lag_max

        .asg     "AR1", p_max
		.asg     "AR4", p
		.asg     "AR5", p1

        .asg     "Addr_lag_max_buf",         max
        .asg     "Addr_lag_max_buf+4",       inv_energy
        .asg     "ptr_wsp",                  signal
        .asg     "Addr_pitch_ol_buf",        scal_sig

;-------------------------------------------------------------
;  note : param_lag_max is set at Addr_pitch_ol_buf + 230,
;         which is same data page as Addr_lag_max_buf
;-------------------------------------------------------------

		.asg     "AR4", pSig
		.asg     "AR5", pSig1

		.asg     "AR4", pTemp
		.asg     "AR5", pMax

mov_warn:

		LD      #param_lag_max, DP
        LD      param_lag_max.lag_max, A
        SUB     param_lag_max.lag_min, A
        MVDM    param_lag_max.lag_min, AR0    ; AR0 = i = lag_min
        NOP
        SUB     #1, 0, A
        STLM    A, BRC

        STM     #scal_sig+PIT_MAX, pSig       ; pSig -> scal_sig[0]
        MVMM    AR0, p_max                    ; AR1 (p_max) = lag_min

		RPTBD   BLK_END-1
        LD      #8000h, 16, B                 ; max = MIN_32

                MVDM    pSig, pSig1                   
                NOP
                MAR     *pSig1-0              ; p1 = &scal_sig[-i]

                LD      #L_FRAME, A
                ROR     A
                SUB     #1, A
                STLM    A, AR6
                LD      #0, A

L0:
                MAC     *pSig, *pSig1, A
                MAR     *+pSig(2)             ; p += 2
                MAR     *+pSig1(2)            ; p1 += 2
                BANZ    L0, *AR6-

                MAX     B
                STM     #scal_sig+PIT_MAX, pSig ; pSig -> scal_sig[0]
                XC      2, NC
                        MVMM    AR0, p_max     ; AR1(p_max) = i

                NOP
                MAR     *AR0+                   ; i++

BLK_END

        STM      #max, pMax
        STL      B, -16, *pMax
        LD       *pMax+, 15, A
        LD       B, -1, B
        SUB      A, B
        STL      B, *pMax

        RET

⌨️ 快捷键说明

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