www.pudn.com > g729Decoder.rar > GBK_PRES.asm


		.mmregs 
        .include ..\include\const.h 
        .include ..\include\ld8amem.h 
        .include ..\include\tab_ld8a.h 
        .include ..\include\qua_gain.h 
 
        .text 
        .def     Gbk_presel 
 
        .asg     "gcode0_org", gcode0 
 
sft_y   .set    16-(14+4+1)     ; (Q[thr1]+Q[gcode0]+1)-Q[L_tmp_y] 
sft_x   .set    15-(15+4+1)     ; (Q[thr2]+Q[gcode0]+1)-Q[L_tmp_x] 
 
L_coef_To_coef  .set    4 
 
Gbk_presel: 
        STM     #coef, AR5 
 
;--------------------------------------------------------------------------- 
; x = (best_gain[1]-(coef[0][0]*best_gain[0]+coef[1][1])*gcode0) * inv_coef; 
;--------------------------------------------------------------------------- 
 
        LD      *AR5, T 
        DLD     *AR5(L_coef_To_coef+(1*2+1)*2), A 
        LD      A, -15, A 
        MAC     best_gain0, A 
        MPYA    gcode0                  ; B = L_preg 
        LD      best_gain1, 7+2, A 
        SUB     B, 2, A 
        STM     #INV_COEF, T 
        MPYA    A 
        DST     A, L_tmp_x 
 
;--------------------------------------------------------------------------- 
; y = (coef[1][0]*(-coef[0][1]+best_gain[0]*coef[0][0])*gcode0 
;                                     -coef[0][0]*best_gain[1]) * inv_coef; 
;--------------------------------------------------------------------------- 
 
        LD      *AR5, T 
        DLD     *AR5(L_coef_To_coef+(0*2+1)*2), A 
        LD      A, -10, A 
        NEG     A 
        MAC     best_gain0, A 
        MPYA    gcode0 
        LD      B, A 
        LD      *AR5(1*2-0), T 
        MPYA    A 
        LD      *AR5, T 
        MPY     best_gain1, B 
        LD      B, -3, B 
        SUB     B, A 
        LD      A, 2, A 
        STM     #INV_COEF, T 
        MPYA    A 
        DST     A, L_tmp_y 
 
        LD      gcode0, A 
        BCD     Not_Greater_Than_Zero, ALEQ 
        STM     #Thr1Q14, AR5 
 
Greater_Than_Zero: 
Do1_Cand1:                                      ; pre select codebook #1 
                LD      *AR5, T 
                MPY     gcode0, B 
                DLD     L_tmp_y, A 
                SUB     B, sft_y, A 
                BC      Break1, ALEQ 
                MAR     *AR5+ 
                LDM     AR5, B 
                SUB     #NCODE1-NCAN1+Thr1Q14, B 
                BC      Do1_Cand1, BLT 
 
Break1: 
        LDM     AR5, A 
        SUB     #Thr1Q14, A 
        STL     A, cand1 
 
        STM     #Thr2, AR5 
 
Do1_Cand2:                                      ; pre select codebook #2 
                LD      *AR5, T 
                MPY     gcode0, B 
                DLD     L_tmp_x, A 
                SUB     B, sft_x, A 
                BC      Return1, ALEQ 
                MAR     *AR5+ 
                LDM     AR5, B 
                SUB     #NCODE2-NCAN2+Thr2, B 
                BC      Do1_Cand2, BLT 
 
Return1: 
        LDM     AR5, A 
        SUB     #Thr2, A 
        RETD 
        STL     A, cand2 
        NOP 
 
Not_Greater_Than_Zero: 
Do2_Cand1: 
                LD      *AR5, T 
                MPY     gcode0, B 
                DLD     L_tmp_y, A 
                SUB     B, sft_y, A 
                BC      Break2, AGEQ 
                MAR     *AR5+ 
                LDM     AR5, B 
                SUB     #NCODE1-NCAN1+Thr1Q14, B 
                BC      Do2_Cand1, BNEQ 
 
Break2: 
        LDM     AR5, A 
        SUB     #Thr1Q14, A 
        STL     A, cand1 
 
        STM     #Thr2, AR5 
 
Do2_Cand2: 
                LD      *AR5, T 
                MPY     gcode0, B 
                DLD     L_tmp_x, A 
                SUB     B, sft_x, A 
                BC      Return2, AGEQ 
                MAR     *AR5+ 
                LDM     AR5, B 
                SUB     #NCODE2-NCAN2+Thr2, B 
                BC      Do2_Cand2, BNEQ 
 
Return2: 
        LDM     AR5, A 
        SUB     #Thr2, A 
        RETD 
        STL     A, cand2 
        NOP