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 + -
显示快捷键?