📄 qua_lsp_asm.asm
字号:
; 172 | *mode_index = 0;
;----------------------------------------------------------------------
ST #0,*AR1 ; |172|
;----------------------------------------------------------------------
; 173 | L_temp =L_sub(L_tdist[1] ,L_tdist[0]);
; 174 | if ( L_temp<0L){
;----------------------------------------------------------------------
;DLD *AR2,A ; |173|
;DST A,*SP(0) ; |173|
DLD *AR2(2),A ; |173|
;CALL #_L_sub ; |173|
DSUB *AR2,A
;SSBX SXM
;SFTA A,8 ; |173|
;SFTA A,-8 ; |173|
BC L18,AGEQ ; |173|
;----------------------------------------------------------------------
; 175 | *mode_index = 1;
; 177 | return;
;----------------------------------------------------------------------
ST #1,*AR1 ; |175|
L18:
;FRAME #2
POPM AR1
RET
.sect ".text"
.global _Get_wegt
;----------------------------------------------------------------------
; 180 | void Get_wegt(
; 181 | Word16 flsp[], /* (i) Q13 : M LSP parameters */
; 182 | Word16 wegt[] /* (o) Q11->norm : M weighting coefficients */
; 183 | )
;----------------------------------------------------------------------
_Get_wegt:
PSHM AR1
PSHM AR6
PSHM AR7
FRAME #-14
;----------------------------------------------------------------------
; 185 | Word16 i;
; 186 | Word16 tmp;
; 187 | Word32 L_acc;
; 188 | Word16 sft;
; 189 | Word16 buf[M]; /* in Q13 */
;----------------------------------------------------------------------
STLM A,AR2
LD *SP(18),A
STL A,*SP(12)
;----------------------------------------------------------------------
; 192 | buf[0] = sub( flsp[1], (PI04+8192) ); /* 8192:1.0(Q13) */
; 194 | for ( i = 1 ; i < M-1 ; i++ ) {
; 195 | tmp = sub( flsp[i+1], flsp[i-1] );
;----------------------------------------------------------------------
;RSBX OVM
SSBX FRCT
SSBX OVM
SSBX SXM
STM #7,BRC
MVMM AR2,AR3
MVMM SP,AR1
LD *AR2(1),16,A ; |192|
;SSBX OVM
MAR *+AR1(#3)
SUB #9221,16,A,A ; |192|
STH A,*SP(2) ; |192|
RPTB L20-1
L19:
;----------------------------------------------------------------------
; 196 | buf[i] = sub( tmp, 8192 );
;----------------------------------------------------------------------
;RSBX OVM
LD *AR3(2),16,A ; |196|
;SSBX OVM
;NOP
SUB *AR3,16,A,A ; |196|
SUB #8192,16,A,A ; |196|
STH A,*AR1+ ; |196|
MAR *AR3+
L20:
;----------------------------------------------------------------------
; 199 | buf[M-1] = sub( (PI92-8192), flsp[M-2] );
; 202 | for ( i = 0 ; i < M ; i++ ) {
;----------------------------------------------------------------------
;RSBX OVM
MVMM SP,AR6
STM #10,AR7
LD #15485,16,A ; |199|
MVDK *SP(12),*(AR1)
;SSBX OVM
MAR *+AR6(#1)
SUB *AR2(8),16,A,A ; |199|
STH A,*SP(11) ; |199|
L21:
;----------------------------------------------------------------------
; 203 | if ( buf[i] > 0 ){
; 204 | wegt[i] = 2048; /* 2048:1.0(Q11) */
; 206 | else {
; 207 | L_acc = L_mult( buf[i], buf[i] ); /* L_acc in Q27 */
;----------------------------------------------------------------------
LD *+AR6(1),A
BC L22,AGT ; |203|
;----------------------------------------------------------------------
; 208 | tmp = extract_h( L_shl( L_acc, 2 ) ); /* tmp in Q13 */
; 210 | L_acc = L_mult( tmp, CONST10 ); /* L_acc in Q25 */
;----------------------------------------------------------------------
;SSBX FRCT
STLM A,T
MPY *(AL),A ; |208|
;RSBX OVM
;RSBX FRCT
;ST #2,*SP(0) ; |208|
;CALL #_L_shl ; |208|
SFTA A,2
SFTL A,#-16,A ; |208|
;----------------------------------------------------------------------
; 211 | tmp = extract_h( L_shl( L_acc, 2 ) ); /* tmp in Q11 */
;----------------------------------------------------------------------
;SSBX FRCT
;SSBX OVM
MPY *(AL),#20480,A ; |211|
;RSBX FRCT
;RSBX OVM
;ST #2,*SP(0) ; |211|
;CALL #_L_shl ; |211|
SFTA A,2
SFTL A,#-16,A ; |211|
;----------------------------------------------------------------------
; 213 | wegt[i] = add( tmp, 2048 ); /* wegt in Q11 */
;----------------------------------------------------------------------
;SSBX SXM
;RSBX OVM
LD *(AL),16,A ; |213|
;SSBX OVM
;NOP
ADD #2048,16,A,A ; |213|
BD L23 ; |213|
NOP
STH A,*AR1 ; |213|
L22:
ST #2048,*AR1 ; |204|
L23:
;----------------------------------------------------------------------
; 218 | L_acc = L_mult( wegt[4], CONST12 ); /* L_acc in Q26 */
;----------------------------------------------------------------------
BANZD L21,*+AR7(-1) ; |215|
NOP
MAR *AR1+
;----------------------------------------------------------------------
; 219 | wegt[4] = extract_h( L_shl( L_acc, 1 ) ); /* wegt in Q11 */
; 221 | L_acc = L_mult( wegt[5], CONST12 ); /* L_acc in Q26 */
;----------------------------------------------------------------------
;ST #1,*SP(0)
;SSBX FRCT
MVDK *SP(12),*(AR1)
MPY *AR1(4),#19661,A
;RSBX OVM
;RSBX FRCT
NOP
;CALL #_L_shl
SFTA A,1
SFTL A,#-16,A
STL A,*AR1(4)
;----------------------------------------------------------------------
; 222 | wegt[5] = extract_h( L_shl( L_acc, 1 ) ); /* wegt in Q11 */
;----------------------------------------------------------------------
;SSBX FRCT
;SSBX OVM
;ST #1,*SP(0) ; |222|
MPY *AR1(5),#19661,A ; |222|
;RSBX FRCT
;RSBX OVM
NOP
;CALL #_L_shl
SFTA A,1
SFTL A,#-16,A ; |222|
STL A,*AR1(5) ; |222|
;----------------------------------------------------------------------
; 225 | tmp = 0;
; 226 | for ( i = 0; i < M; i++ ) {
;----------------------------------------------------------------------
LD #0,B
STM #9,BRC
RPTB L26-1
L24:
;----------------------------------------------------------------------
; 227 | if ( sub(wegt[i], tmp) > 0 ) {
;----------------------------------------------------------------------
;RSBX OVM
;SSBX SXM
MVDK *AR1+,*(AR2)
LD *(AR2),16,A ; |227|
;SSBX OVM
SUB *(BL),16,A,A ; |227|
SFTA A,-16,A ; |227|
LD *(AL),A ; |227|
BC L25,ALEQ ; |227|
;----------------------------------------------------------------------
; 228 | tmp = wegt[i];
;----------------------------------------------------------------------
LDM AR2,B
L25:
NOP
L26:
;----------------------------------------------------------------------
; 232 | sft = norm_s(tmp);
; 233 | for ( i = 0; i < M; i++ ) {
;----------------------------------------------------------------------
;RSBX OVM
;SSBX SXM
LD *(BL),16,A ; |232|
STM #10,AR7
EXP A ; |232|
MVDK *SP(12),*(AR1)
MVMD T,AR6
L27:
;----------------------------------------------------------------------
; 234 | wegt[i] = shl(wegt[i], sft); /* wegt in Q(11+sft) */
;----------------------------------------------------------------------
MVKD *(AR6),*SP(0)
;RSBX FRCT
;RSBX OVM
LD *AR1,A
CALL #_shl
STL A,*AR1+
;----------------------------------------------------------------------
; 237 | return;
;----------------------------------------------------------------------
BANZ L27,*+AR7(-1)
ANDM #-833,*(ST1)
ANDM #-4,*(PMST)
FRAME #14
POPM AR7
POPM AR6
POPM AR1
RET
.global _shl
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -