lspp.asm
来自「文件为美军4800bps语音压缩编码标准在TI的DSP芯片TMS320C5X上的」· 汇编 代码 · 共 350 行
ASM
350 行
;=================================
;PCLSP
LDP #ACCBUF
LACC #0
SACL LSPFLAG
LACC #2
SAMM INDX
LACC #LSP+P10_1
SAMM ARCR
LACC #15
SAMM TREG1
LAR AR0,#LSP
LAR AR1,#LSPPQ
LAR AR2,#LSPCOS
LAR AR3,#LPC
LAR AR6,#LPC+P10_1
;=============================
;for (i = 0; i < mh; i++)
; { p[i] = a[i+1] + a[m-i];
; if(fabs(p[i])>0x7fffu||fabs(q[i]>0x7fff))
; { for (j = 0; j < m; j++) freq[j] = lastfreq[j];
; return; } }
;==================================
LACC #HP10_1
SAMM BRCR
MAR *,AR3
LACL #0
SACL CORFLAG
RPTB PCLSP_1-1
LACC *+,0,AR6
ADD *-,0,AR1
;PUSH
SACL ACC_PUSH
ABS
SUB #7FFFH
NOP
XC 2,GT
LACL #1
SACL CORFLAG
;POP
LACC ACC_PUSH
SACL *+,0,AR3
;==================================
; fl = 0.;
; for (p32=0x2000,pxl = 1.0, j = 0; j < mh; j++) p32+=p[j];
; if(fabs(p32)>0x7fff) p32>>=2;
; pxl=p32;
;==================================
PCLSP_1 ;compute p at f=0.
LACC CORFLAG
BCND PCLSP_END1,GT
;=========
LACL #0
SACL FL
LAR AR1,#LSPPQ
MAR *,AR1
LACC #2000H
RPT #HP10_1
ADD *+
CALL INTACC
SACH PXL
;=============================================
; //search for zeros of p
; nf = 0; fr=0;
; for (i = 1; i <= N; pxl = tpxr, fl = tfr, i++)
;------------------------------------------
PCLSP_3 ;*search for zeros of p
LAR AR7,#N128-1
LACC #1
SACL IBUF
;================================================
;{ fr=i*128; //fr = i * (0.5 / N)*0x8000u;
; tfr = fr;
;------------------------------------------------
;//PCLSP_GETP1
PCLSP_GETP_FOR
LACC IBUF
SACL FR,7
SACL TFR,7
;================================
; p32=(int)lspcos[(i-1)*6]>>2; //1.15->3.13
; for (j = 0; j < mh; j++)
; { ax0=lspcos[(i-1)*6 + j+1]; //1.15
; p32+=((long)(ax0*p[j]))>>15; }
; if(fabs(p32)>0x7fff) p32>>=2;
; pxr=p32;
; tpxr = pxr;
;=======================================
LACC #HP10_1
SAMM BRCR
LAR AR1,#LSPPQ
MAR *,AR2 ;LSPCOS[6*128]
LACC *+,0,AR1 ;AR1:LSPPQ[]
SFR
SFR
SACB
LT *+,AR2
RPTB PCLSP_4-1
MPY *+,AR1
LTP *+,AR2 ;TREG0 : LSPPQ
SATL ;ACC>>15
ADDB
SACB
PCLSP_4
LACB
CALL INTACC
SACH PXR
SACH TPXR
;====================================
; test (pxl * pxr)
;=======================================
LT PXL
MPY PXR
PAC
BCND PCLSP_GETP2,LT
BCND PCLSP_PXR_0,EQ
;if pxl*pxr>0
;====================================
; if (pxl * pxr > 0.0) continue;
; i.e. pxl = tpxr, fl = tfr, i++
;=======================================
LACC IBUF
ADD #1
SACL IBUF
LACC TPXR
SACL PXL
LACC TFR
SACL FL
MAR *,AR7
BANZ PCLSP_GETP_FOR,*-,AR2
B PCLSP_GETQ0
PCLSP_PXR_0 ;if pxr==0
;===============================
;if(pxr==0) { freq[nf]=fr/0x8000u;
; nf += 2;
; if(nf>m-2)break;
; if(i==N) break;
; i++;
; tfr=i*128; //fl=tfr
; tpxr=-pxl; //pxl=tpxr
; continue; }
;====================================
MAR *,AR0
LACC FR
SACL *0+,0,AR2 ;INDX=2
CMPR 2 ;test if ar0>arcr=#LSP+9
BCND PCLSP_GETQ0,TC
ADRK #6
MAR *,AR7
BANZ PCLSP_PXR0_1,*- ;test if ar7==0 i.e. i=128
B PCLSP_GETQ0
PCLSP_PXR0_1
LACC IBUF
ADD #1
;SACL IBUF
SACL FL,7
ADD #1
SACL IBUF
;--------
LACC PXL
NEG
SACL PXL
;------
;MAR *,AR7
BANZ PCLSP_GETP_FOR,*-,AR2
PCLSP_GETP2
;===============================
; //if(pxl*pxr<0) find zero of p
; if(fabs(pxl)<fabs(pxr) ){minpxm[0]=pxl; minpxm[1]=fl;}
; else {minpxm[0]=pxr; minpxm[1]=fr;}
;===============================5.6 wht hello
LACC PXL
ABS
SACB
LACC PXR
ABS
CRLT
SACL MINPQ
BCND PCLSP_GETP2_1,C ;jump if fabs(pxr)<fabs(pxl)
LACC FL
B PCLSP_GETP2_2
PCLSP_GETP2_1
LACC FR
PCLSP_GETP2_2
SACL MINPQ+1
;%%%%%%%%%%%%%%%
; mb=0;
; do{ mb++;
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LAR AR6,#NBP-1
PCLSP_GETP2_DO
;=================================
; fm=fr+fl;
;=================================
LACC FR
ADD FL
SACL FM ;FM=2*FM
;=================================
; p32=wcos(mp*fm)>>2;
;=================================
LACC #P10P
SAMM TREG0
SUB #2
SAMM AR5
MPY FM
PAC
;SATL
CALL WCOS
SFR ;1.15->>3.13
SFR
SACB
;=================================
; for (j = 0; j < mh; j++)
; { jc = mp - (j+1) * 2;
; ax0=wcos(jc*fm/0x8000u);
; p32 += ((long)(ax0* p[j]))>>15; }
;=================================
LAR AR4,#HP10_1
;SAMM BRCR
LAR AR1,#LSPPQ
MAR *,AR1
;----------
PCLSP_GETP_DO_FOR
;RPTB PCLSP_GETP2_3-1
LAMM AR5
SAMM TREG0
SUB #2
SAMM AR5
MPY FM
PAC
;SATL
;-------
EXAR
SACL ACCBBUF
SACH ACCBBUF+1
EXAR
CALL WCOS
EXAR
LACC ACCBBUF+1,16
OR ACCBBUF
EXAR
;---------
MAR *,AR1
SAMM TREG0
MPY *+,AR4
PAC
SATL
ADDB
SACB
BANZ PCLSP_GETP_DO_FOR,*-
PCLSP_GETP2_3
;----------
; fm/=2;
;-----------
LACC FM ;FM/=2
SFR
SACL FM
;=======================
; if(fabs(p32)>0x7fff) p32>>=2;
; pxm=p32;
;=========================
LACB
CALL INTACC
SACH PXM
;======================
; if(fabs(pxm)<fabs(minpxm[0])) {minpxm[0]=pxm; minpxm[1]=fm;}
;=======================
LACC PXM
ABS
SACB
LACC MINPQ
ABS
CRLT
BCND PCLSP_GETP2_4,C ;jump if fabs(pxm)>=fabs(minpq)
SACL MINPQ
LACC FM
SACL MINPQ+1
;===========================
; (pxm*pxl > 0.0) ? (pxl = pxm, fl = fm) : (pxr = pxm, fr = fm);
;==========================-
PCLSP_GETP2_4
LACC FM,16
OR PXM
SACB
SAMM TREG0
MPY PXL
PAC
BCND PCLSP_GETP2_5,GT
LACB
SACL PXR
SACH FR
B PCLSP_GETP2_6
PCLSP_GETP2_5
LACB
SACL PXL
SACH FL
PCLSP_GETP2_6
;-----------------------------------------------
; } while ((fabs(minpxm[0]) > LSPEPS) && (mb < NBP));
;===============================================
LACC MINPQ
SUB #LSPEPS
BCND PCLSP_GETP3,LEQ
MAR *,AR6
BANZ PCLSP_GETP2_DO,*-
;===========================================
; do{ mb++;
; fm=fr+fl;
; p32=wcos(mp*fm/0x8000u)>>2;
; for (j = 0; j < mh; j++)
; { jc = mp - (j+1) * 2;
; ax0=wcos(jc*fm/0x8000u);
; p32 += ((long)(ax0* p[j]))>>15; }
; fm/=2;
; if(fabs(p32)>0x7fff) p32>>=2;
; pxm=p32;
; if(fabs(pxm)<fabs(minpxm[0])) {minpxm[0]=pxm; minpxm[1]=fm;}
; (pxm*pxl > 0.0) ? (pxl = pxm, fl = fm) : (pxr = pxm, fr = fm);
; } while ((fabs(minpxm[0]) > LSPEPS) && (mb < NBP));
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;==================================
; freq[nf]=minpxm[1]/0x8000u;
; nf += 2;
; if (nf > m-2) break;
; else continue;}
;==================================
PCLSP_GETP3
MAR *,AR0
LACC MINPQ+1
SACL *0+,0,AR7 ;INDX=2
CMPR 2 ;test if ar0>arcr=#LSP+9
BCND PCLSP_GETQ0,TC
LACC IBUF
ADD #1
SACL IBUF
LACC TPXR
SACL PXL
LACC TFR
SACL FL
;MAR *,AR7
BANZ PCLSP_GETP_FOR,*-,AR2
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;PCLSP_GETQ0
;PCLSP_END1
; LACC #1
; SACL LSPFLAG
; RET
;=================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?