📄 lpcfunc_asm.asm
字号:
.mmregs
FP .set AR7
.sect ".text"
.global _Lsp_lsf2
;----------------------------------------------------------------------
; 217 | void Lsp_lsf2(
; 218 | Word16 lsp[], /* (i) Q15 : lsp[m] (range: -1<=val<1) */
; 219 | Word16 lsf[], /* (o) Q13 : lsf[m] (range: 0.0<=val<PI) */
; 220 | Word16 m /* (i) : LPC order */
; 221 | )
;----------------------------------------------------------------------
_Lsp_lsf2:
PSHM AR1
PSHM AR6
PSHM AR7
FRAME #-8
;----------------------------------------------------------------------
; 223 | Word16 i, ind;
; 224 | Word16 offset; /* in Q15 */
; 225 | Word16 freq; /* normalized frequency in Q16 */
; 226 | Word32 L_tmp;
; 228 | ind = 63; /* begin at end of table2 -1 */
;----------------------------------------------------------------------
SSBX SXM
LD *SP(13),B ;B = m
MVDK *SP(12),*(AR3) ;AR3 = & lsp
;----------------------------------------------------------------------
; 230 | for(i= m-(Word16)1; i >= 0; i--)
; 233 | while( sub(table2[ind], lsp[i]) < 0 )
; 235 | ind = sub(ind,1);
; 236 | if ( ind <= 0 )
; 237 | break;
;----------------------------------------------------------------------
BC L6,BLEQ ; |230| 循环次数
;;RSBX OVM
NOP
SUB #1,B,B
STM #_table2,AR2 ;AR2 = #_table2
ADD B,A ;A = lsf + B
ADD #1,A,A ;A +1
STLM A,AR7 ;AR7 = A +1
LDM AR2,A ;
ADD #63,A,A ;A = A+63
STLM A,AR1 ;AR1 = A
ADD *(AR3),B,A ;A = lsp + i
STL A,*SP(2) ;*SP(2) = lsp + i
ADD #1,B,A ;A = i +1
STLM A,AR6 ;ar6 = i+1
LD #_slope_acos,A ; A = #_slope_acos
STL A,*SP(3) ;*SP(3) = #_slope_acos
MVKD *(AR2),*SP(4) ;SP(4) = AR2
LD #63,A ;A = #63
STL A,*SP(5) ;*SP(5) = #63
SSBX OVM ; ****
SSBX FRCT ; ****
NOP
L3:
LD *+AR7(-1),B ;B = lsf[]
L4:
;----------------------------------------------------------------------
; 240 | offset = sub(lsp[i], table2[ind]);
;----------------------------------------------------------------------
;;RSBX OVM;;
;;NOP
LD *AR1,16,A ; |238| 取TABLE表值
;SSBX OVM ; ****
SUB *(BL),16,A,A ; |238|
SFTA A,-16,A ; |238|
;;LD *(AL),A ; |238|
BC L5,AGEQ ; |238|
;;RSBX OVM
LD *SP(5),A
LD *(AL),16,A ; |235|
;;SSBX OVM
;;NOP
SUB #1,16,A,A ; |235|
;;RSBX OVM
SFTA A,-16,A ; |235|
STL A,*SP(5)
MVDK *SP(5),*(AR1)
LD *SP(4),A
ADD *(AR1),A
STLM A,AR1
LD *SP(5),A
BC L4,AGT ; |237|
L5:
;----------------------------------------------------------------------
; 244 | L_tmp = L_mult( slope_acos[ind], offset ); /* L_tmp in Q28 */
;----------------------------------------------------------------------
;;RSBX OVM;;
LD *(BL),16,A ; |244|
;SSBX FRCT
;;SSBX OVM
LD *SP(3),B
SUB *AR1,16,A,A ; |244|
;;RSBX OVM;;
STH A,*(T)
LD *SP(5),A
ADD B,A ; |244|
STLM A,AR2
;SSBX OVM
NOP
NOP
MPY *AR2,A ; |244|
;----------------------------------------------------------------------
; 245 | freq = add(shl(ind, 9), extract_l(L_shr(L_tmp, 12)));
;----------------------------------------------------------------------
;RSBX FRCT
;;RSBX OVM
;ST #12,*SP(0) ; |245|
;CALL #_L_shr ; |245|
SFTA A,-12
; call occurs [#_L_shr] ; |245|
STL A,*SP(6)
;RSBX FRCT
;RSBX OVM
;SSBX OVM
NOP
;ST #9,*SP(0) ; |245|
LD *SP(5),A
;CALL #_clshft ; |245|
SFTA A,9
;SFTA A,9
; call occurs [#_clshft] ; |245|
;;RSBX OVM
;;SSBX SXM
LD *(AL),16,B ; |245|
;SSBX OVM
LD *SP(6),A
ADD *(AL),16,B,A ; |245|
SFTA A,-16,B ; |245|
;----------------------------------------------------------------------
; 246 | lsf[i] = mult(freq, 25736); /* 25736: 2.0*PI in Q12 */
;----------------------------------------------------------------------
;;RSBX OVM
NOP
LD #25736,16,A ; |246|
;SSBX FRCT
STLM B,T
;;SSBX OVM
MVDK *SP(2),*(AR2)
MPYA A ; |246|
STH A,*AR2- ; |246|
MVKD *(AR2),*SP(2)
;----------------------------------------------------------------------
; 249 | return;
;----------------------------------------------------------------------
BANZ L3,*+AR6(-1) ; |248|
; branch occurs ; |248|
L6:
ANDM #-833,*(ST1)
ANDM #-4,*(PMST)
FRAME #8
POPM AR7
POPM AR6
POPM AR1
RET
.sect ".text"
.global _Lsp_lsf
;----------------------------------------------------------------------
; 142 | void Lsp_lsf(
; 143 | Word16 lsp[], /* (i) Q15 : lsp[m] (range: -1<=val<1)
; | */
; 144 | Word16 lsf[], /* (o) Q15 : lsf[m] normalized (range: 0.0<=val<=0.5)
; | */
; 145 | Word16 m /* (i) : LPC order
; | */
; 146 | )
;----------------------------------------------------------------------
_Lsp_lsf:
PSHM AR1
PSHM AR6
PSHM AR7
FRAME #-8
;----------------------------------------------------------------------
; 148 | Word16 i, ind, tmp;
; 149 | Word32 L_tmp;
; 151 | ind = 63; /* begin at end of table -1 */
;----------------------------------------------------------------------
SSBX SXM
SSBX OVM ;;add by wly
NOP
LD *SP(13),B
MVDK *SP(12),*(AR2)
;----------------------------------------------------------------------
; 153 | for(i= m-(Word16)1; i >= 0; i--)
;----------------------------------------------------------------------
BC L10,BLEQ ; |153|
;;RSBX OVM
STM #_table,AR1
SUB #1,B,B
MVKD *(AR1),*SP(2)
ADD B,A
STM #_slope,AR1
ADD #1,A,A
STL A,*SP(4)
MVKD *(AR1),*SP(3)
LD *SP(2),A
ADD #63,A,A
STLM A,AR1
ADD *(AR2),B,A
STLM A,AR7
ADD #1,B,A
STLM A,AR6
LD #63,A
STL A,*SP(5)
L7:
;----------------------------------------------------------------------
; 156 | while( sub(table[ind], lsp[i]) < 0 )
;----------------------------------------------------------------------
MVDK *SP(4),*(AR2)
;;RSBX OVM
MVDK *+AR2(-1),*(AR3)
MVKD *(AR2),*SP(4)
LD *AR1,B
LD *(BL),16,A ; |156|
;;SSBX OVM
SUB *(AR3),16,A,A ; |156|
SFTA A,-16,A ; |156|
LD *(AL),A ; |156|
BC L9,AGEQ ; |156|
; branch occurs ; |156|
L8:
;----------------------------------------------------------------------
; 158 | ind = sub(ind,1);
; 163 | L_tmp = L_mult( sub(lsp[i], table[ind]) , slope[ind] );
;----------------------------------------------------------------------
;;RSBX OVM
LD *SP(5),A
LD *(AL),16,A ; |158|
;;SSBX OVM
NOP
SUB #1,16,A,A ; |158|
;;RSBX OVM
SFTA A,-16,A ; |158|
STL A,*SP(5)
LD *SP(5),B
LD *SP(2),A
ADD *(BL),A
STLM A,AR1
NOP
NOP
LD *AR1,B
LD *(BL),16,A ; |158|
;;SSBX OVM
SUB *(AR3),16,A,A ; |158|
SFTA A,-16,A ; |158|
LD *(AL),A ; |158|
BC L8,ALT ; |158|
; branch occurs ; |158|
L9:
;----------------------------------------------------------------------
; 164 | tmp = round(L_shl(L_tmp, 3)); /*(lsp[i]-table[ind])*slope[ind])>>12
; | */
;----------------------------------------------------------------------
;;RSBX OVM
LD *(AR3),16,A ; |164|
;; ST #3,*SP(0) ; |164|
;;SSBX OVM
SUB *(BL),16,A,A ; |164|
LD *SP(5),B
;;RSBX OVM
SFTA A,-16,A ; |164|
STLM A,AR3
LD *SP(3),A
ADD A,B ; |164|
STLM B,AR2
NOP;; THIS CAN'T BE DELETED, WLY
SSBX FRCT
LD *AR2,T
;;SSBX OVM
MPY *(AR3),A ; |164|
RSBX FRCT
;;RSBX OVM
NOP
;;CALL #_L_shl ; |164|
SFTA A,3,A;;WLY
; call occurs [#_L_shl] ; |164|
;;RSBX OVM
NOP
;;SFTA A,8 ; |164|
;;SSBX SXM
;;SSBX OVM
;;SFTA A,-8 ; |164|
ADD #1,#15,A,A ; |164|
SFTA A,-16,A ; |164|
STL A,*SP(6)
;----------------------------------------------------------------------
; 165 | lsf[i] = add(tmp, shl(ind, 8));
;----------------------------------------------------------------------
;;RSBX FRCT
;;ST #8,*SP(0) ; |165|
;;RSBX OVM
LD *SP(5),A
;;CALL #_clshft ; |165|
SFTA A,8,A;; WLY
; call occurs [#_clshft] ; |165|
;;RSBX OVM
;;SSBX SXM
LD *SP(6),B
LD *(BL),16,B ; |165|
;;SSBX OVM
ADD *(AL),16,B,A ; |165|
STH A,*AR7- ; |165|
;----------------------------------------------------------------------
; 167 | return;
;----------------------------------------------------------------------
BANZ L7,*+AR6(-1) ; |166|
; branch occurs ; |166|
L10:
ANDM #-833,*(ST1)
ANDM #-4,*(PMST)
FRAME #8
POPM AR7
POPM AR6
POPM AR1
RET
.sect ".text"
.global _Lsf_lsp
;----------------------------------------------------------------------
; 119 | void Lsf_lsp(
; 120 | Word16 lsf[], /* (i) Q15 : lsf[m] normalized (range: 0.0<=val<=0.5)
; | */
; 121 | Word16 lsp[], /* (o) Q15 : lsp[m] (range: -1<=val<1)
; | */
; 122 | Word16 m /* (i) : LPC order
; | */
; 123 | )
;----------------------------------------------------------------------
_Lsf_lsp:
PSHM AR1
PSHM AR6
PSHM AR7
FRAME #-4
NOP
;----------------------------------------------------------------------
; 125 | Word16 i, ind, offset;
; 126 | Word32 L_tmp;
;----------------------------------------------------------------------
MVDK *SP(9),*(AR6)
MVDK *SP(8),*(AR2)
;----------------------------------------------------------------------
; 128 | for(i=0; i<m; i++)
;----------------------------------------------------------------------
SSBX SXM
LD *(AR6),B ; |128|
BC L19,BLEQ ; |128|
STLM A,AR1
LD #_table,A
MVKD *(AR2),*SP(2)
STL A,*SP(3)
SSBX OVM;;WLY
SSBX SXM;;
NOP
L18:
;----------------------------------------------------------------------
; 130 | ind = shr(lsf[i], 8); /* ind = b8-b15 of lsf[i] */
; 131 | offset = lsf[i] & (Word16)0x00ff; /* offset = b0-b7 of lsf[i] */
; 135 | L_tmp = L_mult(sub(table[ind+1], table[ind]), offset);
;----------------------------------------------------------------------
;ST #8,*SP(0) ; |130|
;;RSBX FRCT
;;RSBX OVM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -