📄 qua_gain_asm.asm
字号:
;***************************************************************
;* TMS320C54x C/C++ Codegen PC Version 3.831 *
;* Date/Time created: Wed May 11 09:36:47 2005 *
;***************************************************************
.mmregs
FP .set AR7
.c_mode
.file "QUA_GAIN.C"
.sect ".cinit"
.align 1
.field IR_1,16
.field _past_qua_en$1+0,16
.field -14336,16 ; _past_qua_en$1[0] @ 0
.field -14336,16 ; _past_qua_en$1[1] @ 16
.field -14336,16 ; _past_qua_en$1[2] @ 32
.field -14336,16 ; _past_qua_en$1[3] @ 48
IR_1: .set 4
.sect ".text"
.bss _past_qua_en$1,4,0,0
.sym _past_qua_en,_past_qua_en$1, 51, 3, 64,, 4
; c:\ti\c5400\cgtools\bin\opt500.exe -i20 -q -s -O3 D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\TI3928_2 D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\TI3928_5 -w F:/ATA/Code/g729a_v1.4/G729A/Debug
.sect ".text"
.sym _Gbk_presel,_Gbk_presel, 32, 3, 0
.func 345
;----------------------------------------------------------------------
; 345 | static void Gbk_presel(
; 346 | Word16 best_gain[], /* (i) [0] Q9 : unquantized pitch gain */
; 348 | Word16 *cand1, /* (o) : index of best 1st stage vector */
; 349 | Word16 *cand2, /* (o) : index of best 2nd stage vector */
; 350 | Word16 gcode0 /* (i) Q4 : presearch for gain codebook */
; 351 | )
;----------------------------------------------------------------------
;***************************************************************
;* FUNCTION DEF: _Gbk_presel *
;***************************************************************
;***************************************************************
;* *
;* Using -g (debug) with optimization (-o3) may disable key op *
;* *
;***************************************************************
_Gbk_presel:
PSHM AR1
PSHM AR6
PSHM AR7
FRAME #-12
NOP
MVDK *SP(18),*(AR1) ; ar1 = gcode0
MVDK *SP(17),*(AR6) ; ar6 = *cand2
MVDK *SP(16),*(AR7) ; ar7 = *cand1
STL A,*SP(2) ; sp(2) = best_gain[]
;----------------------------------------------------------------------
; 361 | L_cfbg = L_mult( coef[0][0], best_gain[0] ); /* L_cfbg:Q20 -> !!
; | y */
;----------------------------------------------------------------------
SSBX SXM
SSBX FRCT
LD #_coef,A
STLM A,AR2 ; ar2 = coef
SSBX OVM
MVDK *SP(2),*(AR3) ; ar3 = best_gain[]
STL A,*SP(3)
MPY *AR2,*AR3,A
DST A,*SP(4) ; sp(4) = L_cfbg
;----------------------------------------------------------------------
; 362 | L_acc = L_shr( L_coef[1][1], 15 ); /* L_acc:Q20 */
;----------------------------------------------------------------------
;RSBX OVM
;RSBX FRCT
LD #_L_coef,A
STL A,*SP(6)
STLM A,AR2
;ST #15,*SP(0)
DLD *AR2(6),A
;CALL #_L_shr
SFTA A,-15
;----------------------------------------------------------------------
; 363 | L_acc = L_add( L_cfbg , L_acc );
; 364 | acc_h = extract_h( L_acc ); /* acc_h:Q4 */
; 365 | L_preg = L_mult( acc_h, gcode0 ); /* L_preg:Q9 */
;----------------------------------------------------------------------
;SSBX SXM
;NOP
DLD *SP(4),B
;RSBX SXM
;SSBX OVM
;NOP
ADD A,B
DST B,*SP(8) ; SP(8) = L_acc
;----------------------------------------------------------------------
; 366 | L_acc = L_shl( L_deposit_l( best_gain[1] ), 7 ); /* L_acc:Q9 */
;----------------------------------------------------------------------
;ST #7,*SP(0)
;RSBX OVM
MVDK *SP(2),*(AR2)
;SSBX SXM
;RSBX FRCT
LD *AR2(1),A
;CALL #_L_shl
SFTA A,7
;----------------------------------------------------------------------
; 367 | L_acc = L_sub( L_acc, L_preg );
;----------------------------------------------------------------------
;RSBX SXM
;NOP
DLD *SP(8),B
;SSBX FRCT
;SSBX OVM
SFTL B,#-16,B
MVMD AR1,T
MPY *(BL),B ; L_preg = L_mult( acc_h, gcode0 )
;RSBX FRCT
;RSBX OVM
;DST B,*SP(0)
;CALL #_L_sub
SUB B,A ; a = L_acc = L_sub( L_acc, L_preg )
;----------------------------------------------------------------------
; 368 | acc_h = extract_h( L_shl( L_acc,2 ) ); /* L_acc_h:Q[-5] */
;----------------------------------------------------------------------
;RSBX FRCT
;RSBX OVM
;ST #2,*SP(0)
;CALL #_L_shl
SFTA A,2
SFTL A,#-16,A
;----------------------------------------------------------------------
; 369 | L_tmp_x = L_mult( acc_h, INV_COEF ); /* L_tmp_x:Q15 */
;----------------------------------------------------------------------
;SSBX FRCT
;SSBX OVM
MPY *(AL),#-17103,A
DST A,*SP(10) ; sp(10) = L_tmp_X
;----------------------------------------------------------------------
; 375 | L_acc = L_shr( L_coef[0][1], 10 ); /* L_acc:Q20 */
;----------------------------------------------------------------------
;RSBX OVM
;RSBX FRCT
;ST #10,*SP(0)
MVDK *SP(6),*(AR2)
DLD *AR2(2),A
;CALL #_L_shr
SFTA A,-10 ; a = L_acc
LD A,B
;----------------------------------------------------------------------
; 376 | L_acc = L_sub( L_cfbg, L_acc ); /* !!x -> L_cfbg:Q2
; | 0 */
; 377 | acc_h = extract_h( L_acc ); /* acc_h:Q4 */
; 378 | acc_h = mult( acc_h, gcode0 ); /* acc_h:Q[-7] */
;----------------------------------------------------------------------
;DST B,*SP(0)
;RSBX OVM
;RSBX FRCT
DLD *SP(4),A
;CALL #_L_sub
SUB B,A
NOP
LD A,B
;----------------------------------------------------------------------
; 379 | L_tmp = L_mult( acc_h, coef[1][0] ); /* L_tmp:Q10 */
; 381 | L_preg = L_mult( coef[0][0], best_gain[1] ); /* L_preg:Q13 */
;----------------------------------------------------------------------
;RSBX OVM
;SSBX SXM
LD *(AR1),16,A
DST A,*SP(8)
LD B,A
SFTL A,#-16,B
DLD *SP(8),A
;SSBX OVM
;SSBX FRCT
STLM B,T
NOP
MPYA A
MVDK *SP(3),*(AR2)
LD *AR2(2),T
SFTA A,-16,A
MPY *(AL),A
DST A,*SP(8)
;----------------------------------------------------------------------
; 382 | L_acc = L_sub( L_tmp, L_shr(L_preg,3) ); /* L_acc:Q10 */
;----------------------------------------------------------------------
;ST #3,*SP(0)
MVDK *SP(2),*(AR2)
LD *AR2(1),T
MPY *(_coef),A
;RSBX OVM
;RSBX FRCT
;NOP
;CALL #_L_shr
SFTA A,-3
;RSBX OVM
;RSBX FRCT
;DST A,*SP(0) ; |382|
LD A,B
DLD *SP(8),A ; |382|
;CALL #_L_sub ; |382|
SUB B,A
NOP
;----------------------------------------------------------------------
; 384 | acc_h = extract_h( L_shl( L_acc,2 ) ); /* acc_h:Q[-4] */
;----------------------------------------------------------------------
;RSBX OVM
;RSBX FRCT
;ST #2,*SP(0)
;CALL #_L_shl
SFTA A,2
SFTL A,#-16,A
;----------------------------------------------------------------------
; 385 | L_tmp_y = L_mult( acc_h, INV_COEF ); /* L_tmp_y:Q16 */
; 387 | sft_y = (14+4+1)-16; /* (Q[thr1]+Q[gcode0]+1)-Q[L_tmp_y] */
; 388 | sft_x = (15+4+1)-15; /* (Q[thr2]+Q[gcode0]+1)-Q[L_tmp_x] */
;----------------------------------------------------------------------
;SSBX FRCT
;SSBX OVM
MPY *(AL),#-17103,A
DST A,*SP(8)
;SSBX SXM
LD *(AR1),A
BC L4,AGT
;----------------------------------------------------------------------
; 412 | *cand1 = 0 ;
; 413 | do{
;----------------------------------------------------------------------
LD #_thr1,A
ST #0,*AR7
STM #0,AR2
STL A,*SP(2)
L1:
;----------------------------------------------------------------------
; 414 | L_temp = L_sub(L_tmp_y ,L_shr(L_mult(thr1[*cand1],gcode0),sft_y));
; 415 | if( L_temp <0L){
;----------------------------------------------------------------------
;ST #3,*SP(0)
;RSBX OVM
LDM AR2,A
LD *SP(2),B
;SSBX FRCT
ADD A,B
;SSBX OVM
STLM B,AR2
MVMD AR1,T
MPY *AR2,A
;RSBX FRCT
;RSBX OVM
;NOP
;CALL #_L_shr
SFTA A,-3 ; ****
;RSBX OVM
;RSBX FRCT
;DST A,*SP(0)
LD A,B ; ****
DLD *SP(8),A
;CALL #_L_sub
SUB B,A
;RSBX OVM
;SSBX SXM
;SFTA A,8
;SFTA A,-8
BC L2,AGEQ
;----------------------------------------------------------------------
; 416 | (*cand1) =add(*cand1,1);
;----------------------------------------------------------------------
LD *AR7,16,A
;SSBX OVM
;NOP
ADD #1,16,A,A
SFTA A,-16,A
STL A,*AR7
;----------------------------------------------------------------------
; 418 | else break ;
; 419 | } while(sub((*cand1),(NCODE1-NCAN1))) ;
;----------------------------------------------------------------------
STLM A,AR2
NOP
NOP
BANZ L1,*AR2(-4)
L2:
;----------------------------------------------------------------------
; 421 | *cand2 = 0 ;
; 422 | do{
;----------------------------------------------------------------------
STM #0,AR2
STM #_thr2,AR7
ST #0,*AR6
L3:
;----------------------------------------------------------------------
; 423 | L_temp =L_sub(L_tmp_x ,L_shr(L_mult(thr2[*cand2],gcode0),sft_x));
; 424 | if( L_temp <0L){
;----------------------------------------------------------------------
;RSBX OVM
LDM AR2,A
LDM AR7,B
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -