📄 lpcfunc_asm.asm
字号:
LD *AR1,A
;CALL #_crshft ; |130|
;NOP
SFTA A,-8;;WLY
;----------------------------------------------------------------------
; 136 | lsp[i] = add(table[ind], extract_l(L_shr(L_tmp, 9)));
;----------------------------------------------------------------------
;;RSBX OVM
LD *SP(3),B
;;SSBX SXM
ADD *(AL),B,A
STLM A,AR7
ST #9,*SP(0) ; |136|
LD *AR7(1),16,A ; |136|
;;SSBX OVM
SSBX FRCT
SUB *AR7,16,A,A ; |136|
SFTA A,-16,B ; |136|
LD #255,A
AND *AR1+,A ; |136|
STLM A,T
MPY *(BL),A ; |136|
;RSBX FRCT
;RSBX OVM
;;NOP
;;CALL #_L_shr ; |136|
SFTA A,-9;;WLY
; call occurs [#_L_shr] ; |136|
;RSBX OVM
;;SSBX SXM
;;NOP
LD *AR7,16,B ; |136|
;;SSBX OVM
MVDK *SP(2),*(AR2)
ADD *(AL),16,B,A ; |136|
STH A,*AR2+ ; |136|
MVKD *(AR2),*SP(2)
;----------------------------------------------------------------------
; 138 | return;
;----------------------------------------------------------------------
BANZ L18,*+AR6(-1) ; |137|
L19:
ANDM #-833,*(ST1)
ANDM #-4,*(PMST)
FRAME #4
POPM AR7
POPM AR6
POPM AR1
RET
.sect ".text"
.global _Lsf_lsp2
;----------------------------------------------------------------------
; 184 | void Lsf_lsp2(
; 185 | Word16 lsf[], /* (i) Q13 : lsf[m] (range: 0.0<=val<PI) */
; 186 | Word16 lsp[], /* (o) Q15 : lsp[m] (range: -1<=val<1) */
; 187 | Word16 m /* (i) : LPC order */
; 188 | )
;----------------------------------------------------------------------
_Lsf_lsp2:
PSHM AR1
PSHM AR6
PSHM AR7
FRAME #-6
NOP
;----------------------------------------------------------------------
; 190 | Word16 i, ind;
; 191 | Word16 offset; /* in Q8 */
; 192 | Word16 freq; /* normalized frequency in Q15 */
; 193 | Word32 L_tmp;
;----------------------------------------------------------------------
MVDK *SP(11),*(AR7)
MVDK *SP(10),*(AR6)
;----------------------------------------------------------------------
; 195 | for(i=0; i<m; i++)
;----------------------------------------------------------------------
SSBX SXM
LD *(AR7),B ; |195|
BC L17,BLEQ ; |195|
LD #_slope_cos,B
STL B,*SP(2)
STL A,*SP(4)
LD #_table2,B
STL B,*SP(3)
SSBX OVM;;WLY
SSBX FRCT;;WLY
L15:
;----------------------------------------------------------------------
; 198 | freq = mult(lsf[i], 20861); /* 20861: 1.0/(2.0*PI) in Q17 */
;----------------------------------------------------------------------
;;RSBX OVM
NOP
LD #20861,16,A ; |198|
;;SSBX FRCT
;;SSBX OVM
MVDK *SP(4),*(AR1)
MPYA *AR1+ ; |198|
SFTA B,-16,A ; |198|
STL A,*SP(5)
MVKD *(AR1),*SP(4)
;----------------------------------------------------------------------
; 199 | ind = shr(freq, 8); /* ind = b8-b15 of freq */
;----------------------------------------------------------------------
;;RSBX FRCT
;;RSBX OVM
;;ST #8,*SP(0) ; |199|
;;CALL #_crshft ; |199|
SFTA A,-8,A;;WLY
; call occurs [#_crshft] ; |199|
STLM A,AR1
;----------------------------------------------------------------------
; 200 | offset = freq & (Word16)0x00ff; /* offset = b0-b7 of freq */
;----------------------------------------------------------------------
LD *SP(5),A
AND #255,A,A ; |200|
STLM A,T
;----------------------------------------------------------------------
; 202 | if ( sub(ind, 63)>0 ){
;----------------------------------------------------------------------
;;SSBX SXM
;;RSBX OVM
LD *(AR1),A ; |202|
SUB #64,A,A ; |202|
BC L16,ALT ; |202|
;----------------------------------------------------------------------
; 203 | ind = 63; /* 0 <= ind <= 63 */
; 208 | L_tmp = L_mult(slope_cos[ind], offset); /* L_tmp in Q28 */
;----------------------------------------------------------------------
STM #63,AR1
L16:
;----------------------------------------------------------------------
; 209 | lsp[i] = add(table2[ind], extract_l(L_shr(L_tmp, 13)));
;----------------------------------------------------------------------
;;ST #13,*SP(0) ; |209|
LDM AR1,A
LD *SP(2),B
;;SSBX FRCT
ADD B,A ; |209|
STLM A,AR2
;;SSBX OVM
NOP;;
NOP;;MUST BE 2 NOP HERE
MPY *AR2,A ; |209|
;;RSBX FRCT
;;RSBX OVM
;;NOP
;;NOP
;;CALL #_L_shr ; |209|
SFTA A,-13;WLY
; call occurs [#_L_shr] ; |209|
STLM A,AR2
LDM AR1,B
;;RSBX OVM
;;NOP
LD *SP(3),A
ADD A,B ; |209|
STLM B,AR1
;;SSBX SXM
NOP
NOP;;MUST BE 2 NOP HERE
LD *AR1,16,B ; |209|
;;SSBX OVM
ADD *(AR2),16,B,A ; |209|
STH A,*AR6+ ; |209|
;----------------------------------------------------------------------
; 212 | return;
;----------------------------------------------------------------------
BANZ L15,*+AR7(-1) ; |211|
L17:
ANDM #-833,*(ST1)
ANDM #-4,*(PMST)
FRAME #6
POPM AR7
POPM AR6
POPM AR1
RET
.sect ".text"
.global _Weight_Az
;----------------------------------------------------------------------
; 261 | void Weight_Az(
; 262 | Word16 a[], /* (i) Q12 : a[m+1] LPC coefficients */
; 263 | Word16 gamma, /* (i) Q15 : Spectral expansion factor. */
; 264 | Word16 m, /* (i) : LPC order. */
; 265 | Word16 ap[] /* (o) Q12 : Spectral expanded LPC coefficients */
; 266 | )
;----------------------------------------------------------------------
_Weight_Az:
PSHM AR1
FRAME #-2
;----------------------------------------------------------------------
; 268 | Word16 i, fac;
;----------------------------------------------------------------------
STLM A,AR3
NOP
MVDK *SP(4),*(BK)
LD *SP(5),B
MVDK *SP(6),*(AR2)
;----------------------------------------------------------------------
; 270 | ap[0] = a[0];
;----------------------------------------------------------------------
MVDD *AR3,*AR2 ; |270|
;----------------------------------------------------------------------
; 271 | fac = gamma;
;----------------------------------------------------------------------
MVMD BK,AR5
;----------------------------------------------------------------------
; 272 | for(i=1; i<m; i++)
;----------------------------------------------------------------------
SSBX SXM
RSBX OVM
LD B,A
LD *(AL),A ; |272|
SUB #2,A,A ; |272|
BC L2,ALT ; |272|
LDM AR3,A
ADD #1,A,A
STLM A,AR4
LDM AR2,A
ADD #1,A,A
STLM A,AR1
LD B,A
SUB #2,A,A
STLM A,BRC
NOP
RPTB L2-1
SSBX OVM;;WLY
SSBX FRCT;;WLY
NOP;;WLY
L1:
;----------------------------------------------------------------------
; 274 | ap[i] = round( L_mult(a[i], fac) );
;----------------------------------------------------------------------
;;SSBX FRCT
;;SSBX OVM
MVMD AR5,T
MPY *AR4+,A ; |274|
;;RSBX OVM
;;NOP
;;SFTA A,8 ; |274|
;;SSBX OVM
;;SFTA A,-8 ; |274|
ADD #1,#15,A,A ; |274|
STH A,*AR1+ ; |274|
;----------------------------------------------------------------------
; 275 | fac = round( L_mult(fac, gamma) );
;----------------------------------------------------------------------
MVMD BK,T
LDM AR5,A
MPY *(AL),A ; |275|
;;RSBX OVM
;;NOP
;;SFTA A,8 ; |275|
;;SSBX OVM
;;SFTA A,-8 ; |275|
ADD #1,#15,A,A ; |275|
SFTA A,-16,A ; |275|
STLM A,AR5
NOP
L2:
;----------------------------------------------------------------------
; 277 | ap[m] = round( L_mult(a[m], fac) );
;----------------------------------------------------------------------
LDM AR3,A
;;RSBX OVM
;;SSBX FRCT
ADD B,A ; |277|
STLM A,AR1
;;SSBX OVM
MVMD AR5,T
MPY *AR1,A ; |277|
;;RSBX OVM
;;NOP
;;SFTA A,8 ; |277|
;;SSBX OVM
;;SFTA A,-8 ; |277|
ADD #1,#15,A,A ; |277|
;;RSBX OVM
DST A,*SP(0) ; |277|
LDM AR2,A
ADD B,A ; |277|
STLM A,AR2
NOP
DLD *SP(0),A ; |277|
STH A,*AR2 ; |277|
;----------------------------------------------------------------------
; 279 | return;
;----------------------------------------------------------------------
ANDM #-833,*(ST1)
ANDM #-4,*(PMST)
FRAME #2
POPM AR1
RET
.sect ".text"
;----------------------------------------------------------------------
; 70 | static void Get_lsp_pol(Word16 *lsp, Word32 *f)
;----------------------------------------------------------------------
_Get_lsp_pol:
PSHM AR1
FRAME #-10
NOP
STL A,*SP(2)
SSBX SXM
SSBX FRCT
SSBX OVM
NOP
LD #4096,A
MVDK *SP(12),*(AR1)
MPY *(AL),#2048,A ; |77|
DST A,*AR1 ; |77|
;;RSBX OVM
NOP
ADDM #2,*SP(12) ; |78|
LD #512,B
MVDK *SP(2),*(AR1)
LD #0,A
LD *AR1,T
;ORM #2,*(PMST)
;;SSBX OVM
ORM #2,*(PMST)
MVDK *SP(12),*(AR1)
MAS *(BL), A ; |79|
DST A,*AR1 ; |79|
;;SSBX OVM
NOP
ADDM #2,*SP(12) ; |81|
ADDM #2,*SP(2) ; |82|
;SSBX SXM
LD #5,A
ST #2,*SP(3) ; |84|
SUB *SP(3),A ; |84|
BC L108,ALT ; |84|
; branch occurs ; |84|
L105:
MVDK *SP(12),*(AR1)
DLD *AR1(-4),A ; |86|
DST A,*AR1 ; |86|
ST #1,*SP(4) ; |88|
LD *SP(3),A ; |88|
SUB *SP(4),A ; |88|
BC L107,ALEQ ; |88|
; branch occurs ; |88|
L106:
LDM SP,A
ADD #5,A
STL A,*SP(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -