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

📄 qua_gain.asm

📁 TI C54写的G729代码,视线8kbps高质量语音编码,汇编优化
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		STL     B, exp

		SUB     #1, A
            NOP
			BC      Tar1,AGT
            ABS     A,B
			SUB     #31,B
			NOP
			BC      Com1,BLT
			LD      L_tmp2,B
			NOP 
                     NOP
            XC     2,BLT
			       LD   #-1,B
				   NOP
            XC     1,BGEQ
			       LD  #0,B
            NOP
			B       End1		           
Tar1:
            LD      A,B
			SUB     #31,B
			NOP
			BC      Com1,BLT
			LD      L_tmp2,B
			NOP
                     NOP
			BC      Lt1,BLT
			        LD  #0X7fff,16,B
					OR  #0xFFFF,B
					B    End1
Lt1:         
            LD      #0X8000,16,B
			B       End1

Com1:
			SFTA    A, -1
			STL     A, shift
			LD      shift, ASM
			DLD     L_tmp2, B
			XC      1, C
     				LD      B, 1, B
			LD      B, ASM, B
			LD      B, ASM, B
End1:
	    	DLD     L_tmp1, A
		    LD      A, -1, A
		    SUB     B, A            ; A = L_tmp
Next3:
	EXP     A
	NOP
	NORM    A                       ; A = nume

	LDM     T, B
	ADD     exp, B
	ADD     exp_inv_denom, B
	SUB     #16+2+16-1, B
	NEG     B

		SFTA    B, -1
		STL     B, shift
		LD      shift, ASM
	    MPYA    inv_denom
		XC      1, C
		LD      B, 1, B
		LD      B, ASM, B
		LD      B, ASM, B

	SAT     B
	STL     B,-16, best_gain1

;-----------------------------------------------------------------
;  --- Change Q-format of gcode0 ( Q[exp_gcode0] -> Q4 ) ---
;-----------------------------------------------------------------

	LD      exp_gcode0, A
	SUB     #4, A
	BC      Else4, ALT
If4:
		NEG     A

			SFTA    A, -1
			STL     A, shift
			LD      shift, ASM
			LD      gcode0, A
			XC      1, C
				LD      A, 1, A
			LD      A, ASM, A
			LD      A, ASM, A

		BD      Next4
		STL     A, gcode0_org
		NOP

Else4:
		NEG     A
		ADD     #16, A

			SFTA    A, -1
			STL     A, shift
			LD      shift, ASM
			LD      gcode0, A
			XC      1, C
				LD      A, 1, A
			LD      A, ASM, A
			LD      A, ASM, A

		STL     A,-16, gcode0_org

Next4:

;----------------------------------------------
;       - presearch for gain codebook -
;----------------------------------------------

	CALL    Gbk_presel

;----------------------------------------------
;         - Find the best quantizer -
;----------------------------------------------

	LD      #0, ASM

	STM     #exp_min+4, AR5         ; pExp_min   -> exp_min[4]
							; pExp_coeff -> exp_coeff[4]
	LD      *pExp_coeff-, 16, A     ; pExp_coeff -> exp_coeff[3]
	ADD     exp_gcode0, 16, A
	SUB     #4, 16, A
	ST      A, *pExp_min-           ; pExp_min   -> exp_min[3]
    ||  LD      *pExp_coeff-, A         ; pExp_coeff -> exp_coeff[2]

	ADD     exp_gcode0, 16, A
	SUB     #3, 16, A
	ST      A, *pExp_min-           ; pExp_min   -> exp_min[2]
    ||  LD      *pExp_coeff-, A         ; pExp_coeff -> exp_coeff[1]

	ADD     exp_gcode0, 16, A
	ADD     exp_gcode0, 16, A
	SUB     #21, 16, A
	ST      A, *pExp_min-           ; pExp_min   -> exp_min[1]
    ||  LD      *pExp_coeff-, A         ; pExp_coeff -> exp_coeff[0]

	ADD     #14, 16, A
	ST      A, *pExp_min-           ; pExp_min   -> exp_min[0]
    ||  LD      *pExp_coeff, A          ; pExp_coeff -> exp_coeff[0]

	ADD     #13, 16, A

	STM     #4-1, BRC
	STL     A,-16, *pExp_min            ; pExp_min   -> exp_min[0]
	RPTBD   BLK1_END-1
	LD      *pExp_min+, A
	NOP
		LD      *pExp_min+, B
		MIN     A
BLK1_END
	STL     A, e_min

;  --- align coeff[] ---

	MAR     *pExp_min-              ; pExp_min   -> exp_min[4]
	STM     #5-1, BRC
	RPTBD   BLK2_END-1
	STM     #coeff+4*2, AR4
	    LD      e_min, A
		SUB     *pExp_min-, A

			SFTA    A, -1
			STL     A, shift
			LD      shift, ASM
			LD      *pG_coeff-, 16, A
			XC      1, C
				LD      A, 1, A
			LD      A, ASM, A
			LD      A, ASM, A

       STL       A,-16,*pCoeff
       LD        *pCoeff+,15,B
       LD        A,-1,A
       SUB       B,A
       STL       A,*pCoeff
       MAR       *+pCoeff(-3)
BLK2_END:

; --- Codebook search ---

	LD      #7FFFh, 16, A
	STM     #0FFFFh, AL
	DST     A, L_dist_min

	LD      #Addr_TempFlag, DP
	CMPM    Addr_TempFlag, 1

	LD      #Addr_local_buf1, DP
	STM     #NCAN1-1, AR1

	LD      cand1, 1, A
	ADD     #gbk1Q13Q14, A
	STLM    A, AR2

	LD      cand2, 1, A
	ADD     #gbk2Q14Q13, A
	STL     A, cand2
	STLM    A, AR3

	BCD     Else5, NTC
	STM     #g2_pitch, AR5          ; AR5 -> g2_pitch
If5:
Outter_Loop_Start1:
		STM     #NCAN2-1, BRC
		RPTB    BLK3_END-1

			STM     #coeff+1, AR4

			ADD     *pGbk1+, *pGbk2+, A
			STL     A,-16, g_pitch
			SUB     #GP0999, 16, A
			BC      Else6, AGEQ
If6:
				ADD     *pGbk1-, *pGbk2+, A
				LD      A,-1,A
				MPYA    gcode0
				LD      B,-16,B
				STL     B,  g_code
				SQUR    g_pitch, A
				STL     A, -16,g2_pitch
				SQUR    g_code, A
				STL     A,-16, g2_code
				MPY     g_pitch, A
				STL     A,-16, g_pit_cod

;MPY32_16
				LD      #0, B
				MACSU   *pCoeff-, *AR5, B
				LD      B, -16, B
				LD      B,  1,B    
				MAC     *AR5+, *pCoeff+0%, B, A
;MPY32_16
				LD      #0, B
				MACSU   *pCoeff-, *AR5, B
				LD      B, -16, B
				LD      B,  1,B    
				MAC     *AR5+, *pCoeff+0%, B
				ADD     B, A
;MPY32_16
				LD      #0, B
				MACSU   *pCoeff-, *AR5, B
				LD      B, -16, B
				LD      B,  1,B    
				MAC     *AR5+, *pCoeff+0%, B
				ADD     B, A
;MPY32_16
				LD      #0, B
				MACSU   *pCoeff-, *AR5, B
				LD      B, -16, B
				LD      B,  1,B    
				MAC     *AR5+, *pCoeff+0%, B
				ADD     B, A
;MPY32_16
				LD      #0, B
				MACSU   *pCoeff-, *AR5, B
				LD      B, -16, B
				LD      B,  1,B    
				MAC     *AR5-, *pCoeff+0%, B   ; AR5 -> g_code
				ADD     B, A                   ; A = L_tmp

				DLD     L_dist_min, B
				MIN     B

				BCD     Next7, C
				MAR     *AR5-0                 ; AR5 -> g2_pitch
				NOP
If7:
					MVMD     pGbk1, index1
					MVMD     pGbk2, index2
Next7:
				BD      Next6
					DST      B, L_dist_min
					NOP

Else6:
				MAR     *pGbk1-
				MAR     *pGbk2+

Next6:
				NOP
BLK3_END
		MAR     *+pGbk1(2)
		BANZD   Outter_Loop_Start1, *AR1-
		MVDM    cand2, AR3

	B       Next5

Else5:

Outter_Loop_Start2:
		STM     #NCAN2-1, BRC
		RPTB    BLK4_END-1

			STM     #coeff+1, AR4

			ADD     *pGbk1+, *pGbk2+, A
			STL     A, -16,g_pitch

			ADD     *pGbk1-, *pGbk2+, A
			LD      A,-1,A
			MPYA    gcode0
			LD      B,-16,B
			STL     B,  g_code
			SQUR    g_pitch, A
			STL     A,-16, g2_pitch
			SQUR    g_code, A
			STL     A,-16, g2_code
			MPY     g_pitch, A
			STL     A,-16, g_pit_cod

;MPY32_16
			LD      #0, B
			MACSU   *pCoeff-, *AR5, B
			LD      B, -16, B
			LD      B,  1,B
			MAC     *AR5+, *pCoeff+0%, B, A ; AR5 -> g_pitch
;MPY32_16
			LD      #0, B
			MACSU   *pCoeff-, *AR5, B
			LD      B, -16, B
			LD      B,  1,B    
			MAC     *AR5+, *pCoeff+0%, B    ; AR5 -> g2_code
			ADD     B, A
;MPY32_16
			LD      #0, B
			MACSU   *pCoeff-, *AR5, B
			LD      B, -16, B
			LD      B,  1,B

			MAC     *AR5+, *pCoeff+0%, B    ; AR5 -> g_code
			ADD     B, A
;MPY32_16
			LD      #0, B
			MACSU   *pCoeff-, *AR5, B
			LD      B, -16, B
			LD      B,  1,B

			MAC     *AR5+, *pCoeff+0%, B    ; AR5 -> g_pit_cod
			ADD     B, A
;MPY32_16
			LD      #0, B
			MACSU   *pCoeff-, *AR5, B
			LD      B, -16, B
			LD      B,  1,B    
			MAC     *AR5-, *pCoeff+0%, B    ; AR5 -> g_code
			ADD     B, A                    ; A = L_tmp

			DLD     L_dist_min, B
			MIN     B

			BCD     Next8, C
			MAR     *AR5-0                  ; AR5 -> g2_pitch
			NOP
If8:
			MVMD    pGbk1, index1
			MVMD    pGbk2, index2
Next8:
			DST     B, L_dist_min
BLK4_END
		MAR     *+pGbk1(2)
		BANZD   Outter_Loop_Start2, *AR1-
		MVDM    cand2, AR3

Next5:
	MVDM    index1, AR2
	MVDM    index2, AR3
	MAR     *pGbk1+
	MAR     *pGbk2-
	ADD     *pGbk1-, *pGbk2-, A

	LD      A, -1, A

	MPYA    gcode0                  ; B = L_acc

	LD       A, -15, A

	DST     A, L_gbk12
	LD      #-12-1+1+16, A
	SUB     exp_gcode0, A

		SFTA    A, -1
		STL     A, shift
		LD      shift, ASM
		XC      1, C
			SFTA    B, 1

		LD      B, ASM, B
		LD      B, ASM, B

	LD      #Addr_gain_code, DP
	STL     B,-16, Addr_gain_code

	ADD     *pGbk1, *pGbk2, A
	LD      #Addr_gain_pit, DP
	STL     A, -16,Addr_gain_pit

	LD      #Addr_local_buf1, DP

	LDM     pGbk1, B
	SUB     #gbk1Q13Q14, B
	LD      B, -1, B
	ADD     #map1, B
	STLM    B, AR2

	LDM     pGbk2, B
	SUB     #gbk2Q14Q13, B
	LD      B, -1, B
	ADD     #map2, B

	CALLD  Gain_update
	STLM    B, AR3
	DLD     L_gbk12, A

	MPY     *AR2, #NCODE2, A
	LD      A, -1, A
	ADD     *AR3, A

	RETD
	STM     #L_TOTAL, BK

⌨️ 快捷键说明

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