📄 dec_gc_pred.asm
字号:
*****************************************************************************
** Description: function_name() in file.c **
** **
** Inputs **
** **
** gc_predState *st,
** xar7--- Word16 *code
** Outputs: **
** AH--- Word16 *exp_gcode0
** AL--- Word16 *frac_gcode0
** xar5--- Word16 *exp_en
** xar6--- Word16 *frac_en
**
** **
** acc --- Pitch **
** Word16 *PrevExc **
** Word16 *DataExc **
** **
** Return value : xar3 **
** **
** Attribute : Cycles: 100 Pm: 50 **
** Modified Registers: all **
** **
** Programmer : XIE Wei **
*****************************************************************************
.ref _dec_log2_norm
.global _dec_gc_pred
.global _buffer1
.global dec_past_qua_en
_dec_gc_pred:
MOV T,*XAR7 ;ener_code = L_mac((Word32) 0, code[0], code[0]);
MPY P,T,*XAR7++
MOVB ACC,#0
ADDL ACC,P<<PM
MOV AR0,#38 ; for (i = 1; i < L_SUBFR; i++)
LOOP:
;ener_code = L_mac(ener_code, code[i], code[i]);
MOV T,*XAR7
MPY P,T,*XAR7++
ADDL ACC,P<<PM
BANZ LOOP,AR0--
CSB ACC ;exp_code = norm_l (ener_code);
LSL ACC,T ;ener_code = L_shl (ener_code, exp_code);
MOVL XAR0,ACC
MOV AR1,T
LCR _dec_log2_norm ; Log2_norm (ener_code, exp_code, &exp, &frac);
ZAPA
MOV T,#-24660 ;L_tmp = Mpy_32_16(exp, frac, -24660);
MPYA P,T,*XAR2
MPYA P,T,*XAR3
MOVH AR0,P
ADD ACC,AR0<<1 ;L_tmp = L_mac(L_tmp, 16678, 64);
MOV T,#16678
MPY P,T,#64
ADDL ACC,P<<PM
LSL ACC,#10 ;L_tmp = L_shl(L_tmp, 10);
MOV AR0,#3
MOVL XAR6,#dec_past_qua_en
MOVL XAR5,#_buffer1
MOV *XAR5++,#5571
MOV *XAR5++,#4751
MOV *XAR5++,#2785
MOV *XAR5,#1556
MOVL XAR5,#_buffer1
LOOP2:
MOV T,*XAR5++ ; for (i = 0; i < 4; i++)
MPY P,T,*XAR6++ ; L_tmp = L_mac(L_tmp, pred[i], st->past_qua_en[i]);
ADDL ACC,P<<PM
BANZ LOOP2,AR0--
MOV T,AH ; gcode0 = extract_h(L_tmp);
MPY P,T,#0x00001543 ; L_tmp = L_mult(gcode0, 5443);
MOVB ACC,#0
ADDL ACC,P<<PM
nop
nop
nop
nop
MOV T,#8 ;L_tmp = L_shr(L_tmp, 8);
ASRL ACC,T
LSR AL,1 ;L_Extract(L_tmp, exp_gcode0, frac_gcode0);
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -