pole.asm
来自「文件为美军4800bps语音压缩编码标准在TI的DSP芯片TMS320C5X上的」· 汇编 代码 · 共 155 行
ASM
155 行
; .DATA
;A .INT 0c792h,03088h,0c934h,027c9h,0f22dh,01486h,0f3b3h,0971h,0ead5h,0a38h
;Z .LONG 0ffffbdddh,0ffffbdddh,0ffffd806h,0ffffe3d0h,0ffffed50h,0cdah,033dbh,04655h,044c0h,04221h,03e4bh
;XY .INT 0fa3eh,0f6h,04fch,06bch,0fe5ah,0fdbfh,0fb9dh,0ffd8h,06h,036h
; .INT 0fa63h,00h,07f8h,0feabh,0fea4h,0fff3h,0ff1bh,0fb65h,0ff22h,0182h
; .INT 0211h,0409h,023h,0fff8h,042ch,0f780h,0fabbh,02b5h,0f44dh,0fc7fh
; .INT 0adh,0267h,01b4h,0fc42h,0943h,0209h,0209h,022fh,0984h,0579h,0438h
; .INT 0fe93h,0b1bh,057h,0fcafh,0fc1ah,02c9h,083h,0fc47h,0192h,00h,0fa17h
; .INT 0fc10h,0589h,0fe09h,0fcf8h,07ceh,0379h,04b7h,030h
; .TEXT
; CALL C50_INIT
; LDP #ACCBUF
; LACC #A
; SACL POLE_A
; LACC #Z
; SACL POLE_Z
; LACC #XY
; SACL POLE_XY
; CALL POLE_CON
;HERE: B HERE
;========pole_con(a, n, z, xy, len)=========================
;.BSS POLE_A[10], POLE_Z[11], POLE_XY[60]
;ACC ACCB PREG TREG0 INDX=2 BRCR
;PUSH AR0,AR1,AR2,AR7
;CALL-MPY16_32
;---------------------------
.bss POLE_A,1
.BSS POLE_Z,1
.BSS POLE_XY,1
;---------------------------------
POLE_CON
LAMM AR0
PUSH
LAMM AR1
PUSH
LAMM AR2
PUSH
LAMM AR7
PUSH
LACC #2
SAMM INDX
;=================================
; for (t = 0; t < len; t++)
; { acc=xy[t]*0x2000l;
;=================================
LACC #59
SAMM AR7
LAR AR0,POLE_XY
MAR *,AR0
LACC POLE_Z
ADD #21
SACL POLE_Z
LACC POLE_A
ADD #9
SACL POLE_A
POLE_FOR1
LACC *,13,AR2
SACB
;=================================
; for (j = n; j > 0; j--)
; { ax0=a[j]*0x2000; p32=(long)ax0*(long)z[j];
; acc -= p32; z[j]=z[j-1]; }
;=================================
LACC #9
SAMM BRCR
LAR AR2,POLE_Z ;AR2->Z[10]h
LAR AR1,POLE_A
RPTB POLE_FOR2-1
LACC *-,16 ;ARP==2
OR *-,AR1
SACH MPY_32+1
SACL MPY_32
ABS
SUB #7FFFH
LACC *
SACL MPY_16
BCNDD POLE_FOR2_MPY32,C
;------
LT *-,AR2
MPY MPY_32
PAC
B POLE_FOR2_NOT32
;------
POLE_FOR2_MPY32
CALL MPY16_32
POLE_FOR2_NOT32
SBB ;acc -= p32;
NEG
SACB
LACC *-,16 ;z[j]=z[j-1];
OR *0+ ;INDX==2
SACL *+
SACH *0-
POLE_FOR2
;=================================
; acc>>=13; z[0]=acc; z[1]=acc;
;=================================
LACB
BSAR 13 ;AR0->Z[0]h
SACH *-
SACL *0+
SACL *+
SACH *-,0,AR0
;=================================
; if ( labs(acc) > 0x7fff )
; { if(acc<0) acc=-0x8000l;
; else acc=0x7fff; }
; xy[t]=acc;
;=================================
SACB
ABS
SUB #7FFFH
LACB
BCND POLE_IF,NC
XC 2,GT
LACC #7FFFH
XC 2,LT
LACC #1,15
POLE_IF
SACL *+,0,AR7
BANZ POLE_FOR1,AR0
;=================================
POP
SAMM AR7
POP
SAMM AR2
POP
SAMM AR1
POP
SAMM AR0
RET
;pole_con(float *a, 10, float *z, float *xy, 60)
;{
;/* for (t = 0; t < len; t++)
; { z[0] = xy[t];
; for (j = n; j > 0; j--)
; { z[0] -= a[j] * z[j];
; z[j] = z[j-1]; }
; xy[t] = z[0]; }*/
; for (t = 0; t < len; t++)
; { acc=xy[t]*0x2000l;
; for (j = n; j > 0; j--)
; { ax0=a[j]*0x2000; p32=(long)ax0*(long)z[j];
; acc -= p32; z[j]=z[j-1]; }
; acc>>=13; z[0]=acc; z[1]=acc;
; if ( labs(acc) > 0x7fff )
; { if(acc<0) acc=-0x8000l;
; else acc=0x7fff; }
; xy[t]=acc;
; } }
;=================================
; .INCLUDE "C50_INIT.ASM"
; .INCLUDE "MPY16_32.ASM"
; .end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?