cbsearch.asm

来自「文件为美军4800bps语音压缩编码标准在TI的DSP芯片TMS320C5X上的」· 汇编 代码 · 共 113 行

ASM
113
字号
;PG_FIRST, CG_BOOK ,PG_LEN,CG_MATCH[512*2],CG_GAIN[512]
;---------E0[60],IMP_H[60]->GINDEX,V[60]
	;.BSS CGEMAX_PTR,1
	;.BSS CGEMAX,2
	;.BSS CGAIN_BUF,1
	.BSS GINDEX,1

CBSEARCH
;==================================================
;  codeword = 2*MAXNCSIZE - 2;
;  cbindex = 1;
;  gain[0] = cgain(&x[codeword], l, TRUE, LEN, &err[0]);
;==================================================
	;LAR AR3,#CG_MATCH
	;LAR AR4,#CG_GAIN
	LACC #30
	SACL PG_LEN
	;ZAP
	;SLAC CGEMAX
	;SACL CGEMAX_PTR
	;====================
	LACL #0
	SACL PG_SHIFT
	SACL TOPCGAIN
	SACL TOPBP_PG
	SACL TOPCBINDEX
	SLAC PG_EMAX
	;====================
	LACC #1
	SACL PG_FIRST
	LACC #CODEBOOK+1022
	SACL CG_BOOK
	;------
	LAR AR0,#PG_X_E0+59
	LACC #E0
	SAMM BMAR
	MAR *,AR0
	RPT #59
	 BLDD BMAR,*-
;==================================================
;  emax = *err;
;  codeword -= 2;
;  for (i = 1; i < ncsize; i++)
;  {
;    gain[i] = cgain(&x[codeword], l, FALSE, LEN, &err[i]);
;    codeword -= 2;
;    if (err[i] >= emax)
;    { emax = err[i];        cbindex = i + 1;     }
;  }
;==================================================
CS_LOOP_CGAIN
	  CALL CGAIN		;CGAIN_BUF,CGEMAX,CGEMAX_PTR
	  ;-------
	  ZAP
	  SACL PG_FIRST
	  LACC CG_BOOK
	  SUB #2
	  SACL CG_BOOK
	  ;SUB #CODEBOOK
	  ;SUB #CODEBOOK+512
	  SUB #CODEBOOK+2*(512-CS_LEN)
	BCND CS_LOOP_CGAIN,C
;=========GET CGEMAX AND CGEMAX_PTR================
;   gain[cbindex-1] = gainencode(gain[cbindex-1], &gindex);
;=======TOPCGAIN-->GINDEX,TOPCGAIN===========================================
	CALL CGENCODE
;==================================================
;  codeword = 2*(MAXNCSIZE - cbindex);
;  for (i = 0; i < l; i++)  v[i] = gain[cbindex - 1] * x[i + codeword];
;==================================================
	LACC #CODEBOOK+1022
	SUB TOPCBINDEX,1
	SAMM AR0
	LAR AR1,#V
	LACC #59
	SAMM BRCR
	MAR *,AR0
	LT TOPCGAIN
	RPTB CS_MPY_V-1
	  MPY *+,AR1
	  PAC
	  SACL *+,0,AR0
CS_MPY_V
;==================================================
	RET
;==================================================
;extern int cbgbits, cbindex, gindex, ncsize, mxsw;
;cbsearch(int l, float *v)
;{ int i, codeword;
;  float emax, gain[MAXNCSIZE], err[MAXNCSIZE], cgain(), gainencode();
;  float quangain, oldgain;

;  codeword = 2*MAXNCSIZE - 2;
;  cbindex = 1;
;  gain[0] = cgain(&x[codeword], l, TRUE, LEN, &err[0]);
;  emax = *err;
;  codeword -= 2;
;  for (i = 1; i < ncsize; i++)//CB_PTR
;  {
;    gain[i] = cgain(&x[codeword], l, FALSE, LEN, &err[i]);
;    codeword -= 2;
;    if (err[i] >= emax)
;    { emax = err[i];        cbindex = i + 1;     }
;  }

;  codeword = 2*(MAXNCSIZE - cbindex);
;  gain[cbindex-1] = cgain(&x[codeword], l, TRUE, l, &err[cbindex-1]);

;   gain[cbindex-1] = gainencode(gain[cbindex-1], &gindex);

;  for (i = 0; i < l; i++)  v[i] = gain[cbindex - 1] * x[i + codeword];
;}

⌨️ 快捷键说明

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