📄 qua_gain.asm
字号:
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 + -