📄 quantgain.dsp
字号:
ENA AR_SAT;
SR=ASHIFT MR0 BY 0(LO);
MR0=AR,AR=SR1+AY1+C;
SR=LSHIFT MR0 BY -1(LO);
SR=SR OR ASHIFT AR BY -1(HI);
AX1=AR;
AR=PASS 4;
AY0=DM(exp_gcode0);
AR=AR-AY0,AX0=MR0;
MR=SR0 * MY0(SS),SE=AR;
SR=LSHIFT MR0 (LO),MR0=AX0;
SR=SR OR ASHIFT MR1(HI),MR1=AX1;
DM(gain_code)=SR1;
/*----------------------------------------------*
* update table of past quantized energies *
*----------------------------------------------*/
I1=^Enc_pastqua_en;
CALL Gain_update;
M5=M2;
I5=^map1;
I6=^map2;
MY0=NCODE1;
MODIFY(I5,M5);
MODIFY(I6,M6);
MX0=PM(I5,M5);
MR=MX0 * MY0(SS),AY0=PM(I6,M6);
AR=MR0+AY0;
MR0=DM(gain_pitch);
MY1=DM(gain_code);
M2=-1;
RTS;
/************************************************************************
* Function Gbk_presel *
* - presearch for gain codebook - *
* $$01/10/2000 used only in encoder *
* $$01/11/2000 move dm table to pm table area *
* $$01/11/2000 modify pointer and varaibles to adapt table change *
* Calling Parameters *
* I1 : [0] Q9 unquantized pitch gain *
* : [1] Q2 unquantized code gain *
* MY1 : Q4 presearch for gain codebook *
* Return Values *
* M5 : index of best 1st stage vector *
* M6 : index of best 2nd stage vector *
* Altered Registers: MR,SR,SE,AR,I0,AY0,MY0 *
* Computation Time : 18 cycles *
*************************************************************************/
.VAR/DM/RAM/SEG=App_DMtmp tempx_lo,tempx_hi;
Gbk_presel: I5=^coef;
MX0=DM(I1,M1),MY0=PM(I5,M4);
/*--------------------------------------------------------------------------*
x = (best_gain[1]-(coef[0][0]*best_gain[0]+coef[1][1])*gcode0) * inv_coef;
*--------------------------------------------------------------------------*/
I4=^coeflo+3;
I5=^coefhi+3;
SR0=PM(I4,M4);
AR=PM(I5,M4);
SR=LSHIFT SR0 BY -15(LO);
SR=SR OR ASHIFT AR BY -15(HI);
MR=MX0 * MY0(SS),AY0=SR0;
AX0=MR0;
AX1=MR1;
DIS AR_SAT;
AR=MR0+AY0,AY1=SR1;
ENA AR_SAT;
AR=MR1+AY1+C;
MR=AR * MY1(SS),SR0=DM(I1,M0);
SR=ASHIFT SR0 BY 7(LO);
AY0=SR0;
DIS AR_SAT;
AR=AY0-MR0,AY1=SR1;
ENA AR_SAT;
MR0=AR,AR=AY1-MR1+C-1;
SE=EXP AR(HI),AY0=MR0;
SE=EXP MR0(LO),MR1=AR;
AF=MR1 OR AY0,AR=SE;
IF EQ JUMP direct_lshift;
AR=AR+2;
IF LE JUMP direct_lshift;
SR1=H#8000;
NONE=PASS MR1;
IF LT JUMP lshift_comm;
SR1=H#7FFF;
JUMP lshift_comm;
direct_lshift: SR=LSHIFT MR0 BY 2(LO);
SR=SR OR ASHIFT MR1 BY 2(HI);
lshift_comm: MY0=INV_COEF;
MR=SR1 * MY0(SS),AY0=AX0;
DM(tempx_lo)=MR0;
DM(tempx_hi)=MR1;
I4=^coeflo+1;
I5=^coefhi+1;
SR0=PM(I4,M4);
AR=PM(I5,M4);
SR=LSHIFT SR0 BY -10(LO);
SR=SR OR ASHIFT AR BY -10(HI);
DIS AR_SAT;
AR=AY0-SR0,AY1=AX1;
ENA AR_SAT;
I4=^coef+2;
AR=AY1-SR1+C-1,MY0=PM(I4,M7);
MR=AR * MY1(SS),SR0=DM(I1,M0);
MR=MR1 * MY0(SS),AY0=PM(I4,M7);
AF=PASS MR0,MY0=PM(I4,M4);
MR=SR0 * MY0(SS),AY1=MR1;
SR=LSHIFT MR0 BY -3(LO);
SR=SR OR ASHIFT MR1 BY -3(HI);
DIS AR_SAT;
AR=AF-SR0,AX1=SR1;
ENA AR_SAT;
MR0=AR,AR=AY1-AX1+C-1;
SE=EXP AR(HI),AY0=MR0;
SE=EXP MR0(LO),MR1=AR;
AF=MR1 OR AY0,AR=SE;
IF EQ JUMP dto_lshift;
AR=AR+2;
IF LE JUMP dto_lshift;
SR1=H#8000;
NONE=PASS MR1;
IF LT JUMP comm_shiftl;
SR1=H#7FFF;
JUMP comm_shiftl;
dto_lshift: SR=LSHIFT MR0 BY 2(LO);
SR=SR OR ASHIFT MR1 BY 2(HI);
comm_shiftl: MY0=INV_COEF;
MR=SR1 * MY0(SS),AR=MY1;
AY0=MR0;
AR=PASS AR,AY1=MR1;
IF LE JUMP sel2_codebook;
/*--------pre select codebook #1-------------*/
SE=-3;
I5=^thr1;
AF=PASS 0;
presel_codebook11:
MX0=PM(I5,M4);
MR=MX0 * MY1(SS);
SR=LSHIFT MR0 (LO);
SR=SR OR ASHIFT MR1(HI);
DIS AR_SAT;
AR=AY0-SR0,AX0=AY0;
ENA AR_SAT;
AY0=AR,AR=AY1-SR1+C-1;
AR=PASS AR;
IF LT JUMP presel_con11;
AR=AR OR AY0;
IF EQ JUMP presel_con11;
AF=AF+1,AY0=AX0;
AX0=NCODE1-NCAN1;
AR=AF-AX0;
IF LT JUMP presel_codebook11;
/*-------pre select codebook #2 --*/
presel_con11: AR=PASS AF,AY0=AX0;
M5=AR;
SE=-5;
I5=^thr2;
AF=PASS 0;
AY0=DM(tempx_lo);
AY1=DM(tempx_hi);
presel_codebook12:
MX0=PM(I5,M4);
MR=MX0 * MY1(SS);
SR=LSHIFT MR0 (LO);
SR=SR OR ASHIFT MR1(HI);
DIS AR_SAT;
AR=AY0-SR0,AX0=AY0;
ENA AR_SAT;
AY0=AR,AR=AY1-SR1+C-1;
AR=PASS AR;
IF LT JUMP exit_presel1;
AR=AR OR AY0;
IF EQ JUMP exit_presel1;
AF=AF+1,AY0=AX0;
AX0=NCODE2-NCAN2;
AR=AF-AX0;
IF LT JUMP presel_codebook12;
exit_presel1: AR=PASS AF;
M6=AR;
RTS;
/*--------pre select codebook #1----------------*/
sel2_codebook: SE=-3;
I5=^thr1;
AF=PASS 0;
presel_codebook21:
MX0=PM(I5,M4);
MR=MX0 * MY1(SS);
SR=LSHIFT MR0 (LO);
SR=SR OR ASHIFT MR1(HI);
DIS AR_SAT;
AR=AY0-SR0,AX0=AY0;
ENA AR_SAT;
AY0=AR,AR=AY1-SR1+C-1;
AR=PASS AR;
IF LT JUMP presel_con22;
AR=AR OR AY0;
IF EQ JUMP presel_con22;
AF=AF+1,AY0=AX0;
AX0=NCODE1-NCAN1;
AR=AF-AX0;
IF LT JUMP presel_codebook21;
/*-- pre select codebook #2 --*/
presel_con22: SE=-5;
I5=^thr2;
AR=PASS AF;
M5=AR;
AF=PASS 0;
AY0=DM(tempx_lo);
AY1=DM(tempx_hi);
presel_codebook22:
MX0=PM(I5,M4);
MR=MX0 * MY1(SS);
SR=LSHIFT MR0 (LO);
SR=SR OR ASHIFT MR1(HI);
DIS AR_SAT;
AR=AY0-SR0,AX0=AY0;
ENA AR_SAT;
AY0=AR,AR=AY1-SR1+C-1;
AR=PASS AR;
IF LT JUMP exit_presel2;
AR=AR OR AY0;
IF EQ JUMP exit_presel2;
AF=AF+1,AY0=AX0;
AX0=NCODE2-NCAN2;
AR=AF-AX0;
IF LT JUMP presel_codebook22;
exit_presel2: AR=PASS AF;
M6=AR;
RTS;
/************************************************************************
* search tne codeboog to find impression *
* $$01/10/2000 used only in encoder *
* $$01/11/2000 move dm table to pm table area *
* Calling Parameters *
* Return Values *
* M2: index1 of code book *
* M3: index2 of code book *
* Altered Registers: MR,SR,SE,AR,I0,AY0,MY0 *
* Computation Time : 18 cycles *
*************************************************************************/
.VAR/DM/RAM/SEG=App_DMtmp multcoef[5];
search_codbook:
// M7=0; // -sunny, use i0 instead of i7, m0 instead of m7
AR = 0; // +sunny
dm(alias_m7) = AR; // +sunny
I0=I7;
I4=^gbk11;
I5=^gbk12;
// CNTR=NCAN1;
MODIFY(I4,M5);
MODIFY(I5,M5);
CNTR=NCAN1;
DO search_book1 UNTIL CE;
I6=^gbk21;
// CNTR=NCAN2;
MODIFY(I6,M6);
// I7=^gbk22; // -sunny, use i6 instead of i7, m6 instead of m7
AR = ^gbk22; // +sunny
dm(alias_i7) = AR;// +sunny
// MODIFY(I7,M6); // -sunny
dm(tmp_i6) = i6;// +sunny
i6 = dm(alias_i7);// +sunny
MODIFY(I6,M6); // +sunny
dm(alias_i7) = i6;// +sunny
i6 = dm(tmp_i6);// +sunny
// AX0=PM(I4,M7); // -sunny
dm(tmp_m6) = m6;// +sunny
m6 = dm(alias_m7);// +sunny
AX0=PM(I4,M6); // +sunny
m6 = dm(tmp_m6);// +sunny
CNTR=NCAN2;
DO search_book2 UNTIL CE;
// AY0=PM(I6,M7); // -sunny
dm(tmp_m6) = m6;// +sunny
m6 = dm(alias_m7);// +sunny
AY0=PM(I6,M6); // +sunny
m6 = dm(tmp_m6);// +sunny
AR=AX0+AY0,MY0=AX1;
SR0=DM(tameflag);
AF=PASS SR0,MX0=AR;
IF EQ JUMP direct_search;
AY0=GP0999;
NONE=AR-AY0;
IF GE JUMP search_book2;
direct_search: I1=^multcoef;
// AR=PM(I5,M7); // -sunny
dm(tmp_m6) = m6;// +sunny
m6 = dm(alias_m7);// +sunny
AR=PM(I5,M6); // +sunny
m6 = dm(tmp_m6);// +sunny
SR=ASHIFT AR BY 0(LO);
// AF=PASS SR0,MR0=PM(I7,M4); // -sunny
dm(tmp_i6) = i6;// +sunny
i6 = dm(alias_i7);// +sunny
AF=PASS SR0,MR0=PM(I6,M4); // +sunny
dm(alias_i7) = i6;// +sunny
i6 = dm(tmp_i6);// +sunny
DIS AR_SAT;
AR=MR0+AF,AY0=SR1;
ENA AR_SAT;
SR=ASHIFT MR0 BY 0(LO);
SR0=AR,AR=SR1+AY0+C;
SR=LSHIFT SR0 BY -1(LO);
SR=SR OR ASHIFT AR BY -1(HI);
MR=MX0 * MX0(SS);
MR=SR0 * MY0(SS),DM(I1,M1)=MR1;
AR=PASS MR1,DM(I1,M1)=MX0;
MR=AR * AR(SS);
MY0=MX0;
DM(I1,M1)=MR1;
MR=AR * MY0(SS),DM(I1,M1)=AR;
DM(I1,M1)=MR1;
I2=^coeff;
I3=^coeff_lsf;
I1=^multcoef;
MY0=DM(I1,M1);
AR=PASS 1,MX0=DM(I3,M1);
MF=MX0 * MY0(SS),MY1=DM(I1,M1);
MR=AR * MF(SS),MX0=DM(I2,M1);
MR=MR+MX0*MY0(SS),MX0=DM(I3,M1);
MF=MX0 * MY1(SS),MY0=DM(I1,M1);
MR=MR+AR*MF(SS),MX0=DM(I2,M1);
MR=MR+MX0*MY1(SS),MX0=DM(I3,M1);
MF=MX0 * MY0(SS),MY1=DM(I1,M1);
MR=MR+AR*MF(SS),MX0=DM(I2,M1);
MR=MR+MX0*MY0(SS),MX0=DM(I3,M1);
MF=MX0 * MY1(SS),MY0=DM(I1,M1);
MR=MR+AR*MF(SS),MX0=DM(I2,M1);
MR=MR+MX0*MY1(SS),MX0=DM(I3,M1);
MF=MX0 * MY0(SS);
MR=MR+AR*MF(SS),MX0=DM(I2,M1);
MR=MR+MX0*MY0(SS),AY0=MX1;
IF MV SAT MR;
AR=MR0-AY0;
AR=MR1-AY1+C-1;
NONE=PASS AR;
IF GE JUMP search_book2;
AR=I4;
AY0=^gbk11;
AR=AR-AY0,AY1=MR1;
M2=AR;
AR=I6;
AY0=^gbk21;
AR=AR-AY0,MX1=MR0;
M3=AR;
search_book2: MODIFY(I6,M4);
MODIFY(I5,M4);
search_book1: MODIFY(I4,M4);
// I7=I0; // -sunny
// M7=-1; // -sunny
dm(alias_i7) = i0; // +sunny
AR = -1; // +sunny
dm(alias_m7) = AR; // +sunny
RTS;
/***********************************************************************/
.ENDMOD;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -