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


;========================================================================== 
;  File Name 
;  ---------- 
;  QUA_GAIN.ASM 
; 
;  Brief Description of the Code: 
;  ------------------------------ 
;  Quantize gain. 
; 
;  Ref 
;  ------ 
;  QUA_GAIN.C 
;========================================================================== 
;  Function  Qua_gain 
;---------------------------------------------------------------------- 
;  Word16 Qua_gain( 
;     Word16 code[],       /* (i) Q13 :Innovative vector.             */ 
;     Word16 g_coeff[],    /* (i)     :Correlations  -2 */ 
;                          /*            , -2, 2 */ 
;     Word16 exp_coeff[],  /* (i)     :Q-Format g_coeff[]             */ 
;     Word16 L_subfr,      /* (i)     :Subframe length.               */ 
;     Word16 *gain_pit,    /* (o) Q14 :Pitch gain.                    */ 
;     Word16 *gain_cod,    /* (o) Q1  :Code gain.                     */ 
;     Word16 tameflag      /* (i)     : set to 1 if taming is needed  */ 
;  ) 
;---------------------------------------------------------------------- 
;  Constants : Addr_cn -> code 
;              Addr_g_coeff_cs -> g_coeff 
;              Addr_exp_g_coeff_cs -> exp_coeff 
; 
;              Addr_gain_pit -> gain_pit 
;              Addr_gain_code -> gain_cod 
;              Addr_TempFlag -> &tameflag 
; 
;              L_SUBFR = L_subfr 
; 
;  Pointers :  ptr_prev_qua_eng -> past_qua_en 
; 
;  Return   :  AL = Qua_Gain 
;---------------------------------------------------------------------- 
;  Modified Registers : AR0, AR1, AR2, AR3, AR4, AR5, BRC, DP 
;----------------------------------------------------------------------- 
		.mmregs 
		.include ..\include\const.h 
		.include ..\include\ld8amem.h 
		.include ..\include\tab_ld8a.h 
		.include ..\include\qua_gain.h 
 
		.text 
		.def     Qua_gain 
		.ref     Gain_predict 
		.ref     Gbk_presel 
		.ref     Gain_update 
 
		.asg     "AR2", pG_coeff 
		.asg     "AR3", pExp_coeff 
		.asg     "AR4", pCoeff 
		.asg     "AR5", pExp_min 
 
		.asg     "AR2", pGbk1 
		.asg     "AR3", pGbk2 
 
Qua_gain: 
	CALL    Gain_predict 
 
	LD      #Addr_local_buf1, DP 
	STL     A, gcode0 
	STL     B, exp_gcode0 
 
	STM     #0, BK 
	STM     #2, AR0 
	STM     #Addr_g_coeff_cs, AR2           ; pG_coeff   -> g_coeff[0] 
	STM     #Addr_exp_g_coeff_cs, AR3       ; pExp_coeff -> exp_coeff[0] 
 
;----------------------------------------------------------------- 
;  tmp = -1./(4.*coeff[0]*coeff[2]-coeff[4]*coeff[4]); 
;----------------------------------------------------------------- 
 
	LD      *pG_coeff+0, T          ; pG_coeff -> g_coeff[2] 
	MPY     *pG_coeff+0, A          ; pG_coeff -> g_coeff[4], A = L_tmp1 
	SQUR    *pG_coeff-0, B          ; pG_coeff -> g_coeff[2], B = L_tmp2 
	DST     A, L_tmp1 
	DST     B, L_tmp2 
 
	LD      #1-2, A 
	ADD     *pExp_coeff+0, A        ; pExp_coeff -> exp_coeff[2] 
	ADD     *pExp_coeff+0, A        ; pExp_coeff -> exp_coeff[4], A = exp1 
	LD      #1, B 
	ADD     *pExp_coeff-0%, 1, B    ; pExp_coeff -> exp_coeff[2], B = exp2 
 
	SUB     B, A                    ; A = exp1 - exp2 , B = exp2 
	BC      Else1, ALEQ 
If1: 
		STL     B, exp 
 
			NEG     A 
			BC      Rar0,AGT 
            		ABS     A,B 
					SUB     #31,B 
					BC      Comm0,BLT 
							LD      L_tmp1,B 
					NOP  
			       	LD  #0,A 
            		XC     2,BLT 
			    		   LD   #-1,A 
			    		   NOP 
			B       Endm0		            
Rar0: 
            LD      A,B 
			SUB     #31,B 
			NOP 
			BC      Comm0,BLT 
			LD      L_tmp1,A 
			NOP 
NOP 
			BC      Ltm0,ALT 
			        LD  #0X7fff,16,A 
					OR  #0xFFFF,A 
					B    Endm0 
Ltm0:          
            LD      #0X8000,16,A 
			B       Endm0 
 
Comm0: 
		SFTA    A, -1 
		STL     A, shift 
		LD      shift, ASM 
		DLD     L_tmp1, A 
		XC      1, C 
				LD      A, 1 
		LD      A, ASM, A 
		LD      A, ASM, A 
 
Endm0: 
		BD      Next1 
		DLD     L_tmp2, B 
		SUB     B, A            ; A = L_tmp 
 
Else1: 
		ADD     A, B            ; if (A <= 0) B = exp1 
		STL     B, exp 
            NOP 
			BC      Tarm11,AGT 
            ABS     A,B 
			SUB     #31,B 
			NOP 
			BC      Comm11,BLT 
					LD      L_tmp2,A 
			NOP  
	        LD  #0,B 
            XC     2,ALT 
			       LD   #-1,B 
            	   NOP 
			B       Endm11		            
Tarm11: 
            LD      A,B 
			SUB     #31,B 
			NOP 
			BC      Comm11,BLT 
			LD      L_tmp2,B 
			NOP 
                     NOP 
			BC      Lt11,BLT 
			        LD  #0X7fff,16,B 
					OR  #0xFFFF,B 
					B    Endm11 
Ltm11:          
            LD      #0X8000,16,B 
			B       Endm11 
 
Comm11: 
			SFTA    A, -1 
			STL     A, shift 
			LD      shift, ASM 
			DLD     L_tmp2, B 
			XC      1, C 
					LD      B, 1 
			LD      B, ASM, B 
			LD      B, ASM, B 
Endm11: 
		DLD     L_tmp1, A 
 
		SUB     B, A            ; A = L_tmp 
Next1: 
	EXP     A 
	NOP 
	LDM     T, B 
	NORM    A 
	STL     A,-16, inv_denom 
 
	LD      #4000h, 16, A 
	RPT     #15-1 
		SUBC    inv_denom, A 
 
	NEG     A 
	STL     A, inv_denom 
 
	ADD     exp, B 
	SUB     #14+15+16, B, A 
	NEG     A 
	STL     A, exp_inv_denom 
 
;----------------------------------------------------------------- 
;  best_gain[0] = (2.*coeff[2]*coeff[1]-coeff[3]*coeff[4])*tmp; 
;----------------------------------------------------------------- 
 
	LD      *pG_coeff-, T           ; pG_coeff -> g_coeff[1] 
	MPY     *pG_coeff+0, A          ; pG_coeff -> g_coeff[3], A = L_tmp1 
	LD      *pG_coeff+, T           ; pG_coeff -> g_coeff[4] 
	MPY     *pG_coeff-, B           ; pG_coeff -> g_coeff[3], B = L_tmp2 
	DST     A, L_tmp1 
	DST     B, L_tmp2 
 
	LD      *pExp_coeff-, A         ; pExp_coeff -> exp_coeff[1] 
	ADD     *pExp_coeff+0, A        ; pExp_coeff -> exp_coeff[3], A = exp1 
	LD      #1, B 
	ADD     *pExp_coeff+, B         ; pExp_coeff -> exp_coeff[4] 
	ADD     *pExp_coeff-, B         ; pExp_coeff -> exp_coeff[3], B = exp2 
 
	SUB     B, A                    ; A = exp1 - exp2 , B = exp2 
	BC      Else2, ALEQ 
If2: 
		SUB     #1, B 
		STL     B, exp 
 
		ADD     #1, A 
		NEG     A 
            NOP 
			BC      Tar0,AGT 
            ABS     A,B 
			SUB     #31,B 
			NOP 
			BC      Com0,BLT 
			LD      L_tmp1,B 
			NOP  
	        LD  #0,A 
            XC     2,BLT 
			       LD   #-1,A 
            	   NOP 
			B       End0		            
Tar0: 
            LD      A,B 
			SUB     #31,B 
			NOP 
			BC      Com0,BLT 
			LD      L_tmp1,A 
			NOP 
                     NOP 
			BC      Lt0,ALT 
			        LD  #0X7fff,16,A 
					OR  #0xFFFF,A 
					B    End0 
Lt0:          
            LD      #0X8000,16,A 
			B       End0 
 
Com0: 
			SFTA    A, -1 
			STL     A, shift 
			LD      shift, ASM 
			DLD     L_tmp1, A 
			XC      1, C 
				LD      A, 1, A 
			LD      A, ASM, A 
			LD      A, ASM, A 
 
End0: 
		BD      Next2 
		DLD     L_tmp2, B 
		SUB     B, -1, A            ; A = L_tmp 
 
Else2: 
		ADD     A, B            ; if (A <= 0) B = exp1 
		SUB     #1, B 
		STL     B, exp 
 
		SUB     #1, A 
            NOP 
			BC      Tar11,AGT 
            ABS     A,B 
			SUB     #31,B 
			NOP 
			BC      Com11,BLT 
			LD      L_tmp2,B 
			NOP 
                     NOP  
            XC     2,BLT 
			       LD   #-1,B 
				   NOP 
            XC     1,BGEQ 
			       LD  #0,B 
				   NOP 
			B       End11		            
Tar11: 
            LD      A,B 
			SUB     #31,B 
			NOP 
			BC      Com11,BLT 
			LD      L_tmp2,B 
			NOP 
                     NOP 
			BC      Lt11,BLT 
			        LD  #0X7fff,16,B 
					OR  #0xFFFF,B 
					B    End11 
Lt11:          
            LD      #0X8000,16,B 
			B       End11 
 
Com11: 
			SFTA    A, -1 
			STL     A, shift 
			LD      shift, ASM 
			DLD     L_tmp2, B 
			XC      1, C 
				LD      B, 1, B 
			LD      B, ASM, B 
			LD      B, ASM, B 
End11: 
		DLD     L_tmp1, A 
		LD      A, -1, A 
		SUB     B, A            ; A = L_tmp 
Next2: 
	EXP     A 
	NOP 
	NORM    A                       ; A = nume 
 
	LDM     T, B 
	ADD     exp, B 
	ADD     exp_inv_denom, B 
	SUB     #16+9+16-1, B 
	NEG     B 
 
		SFTA    B, -1 
		STL     B, shift 
		LD      shift, ASM 
	    MPYA    inv_denom 
		XC      1, C 
			LD      B, 1, B 
		LD      B, ASM, B 
		LD      B, ASM, B 
 
	SAT     B 
	STL     B,-16,best_gain0 
 
	LD      #Addr_TempFlag, DP 
	CMPM    Addr_TempFlag, 1 
	LD      #GPCLIP2, 16, A 
	SUB     A, B 
	LD      #Addr_local_buf1, DP 
	MAR     *AR0+                   ; AR0 = 3 
	XC      2, TC, C 
	STL     A, -16,best_gain0 
 
;----------------------------------------------------------------- 
;  best_gain[1] = (2.*coeff[0]*coeff[3]-coeff[1]*coeff[4])*tmp ; 
;----------------------------------------------------------------- 
 
	LD      *pG_coeff-0, T          ; pG_coeff -> g_coeff[0] 
	MPY     *pG_coeff+, A           ; pG_coeff -> g_coeff[1], A = L_tmp1 
	LD      *pG_coeff+0, T          ; pG_coeff -> g_coeff[4] 
	MPY     *pG_coeff, B            ; pG_coeff -> g_coeff[4], B = L_tmp2 
	DST     A, L_tmp1 
	DST     B, L_tmp2 
 
	LD      *pExp_coeff-0, A        ; pExp_coeff -> exp_coeff[0] 
	ADD     *pExp_coeff+, A         ; pExp_coeff -> exp_coeff[1], A = exp1 
	LD      #1, B 
	ADD     *pExp_coeff+0, B        ; pExp_coeff -> exp_coeff[4] 
	ADD     *pExp_coeff, B          ; pExp_coeff -> exp_coeff[4], B = exp2 
 
	SUB     B, A                    ; A = exp1 - exp2 , B = exp2 
	BC      Else3, ALEQ 
If3: 
		SUB     #1, B 
		STL     B, exp 
 
		ADD     #1, A 
		NEG     A 
            NOP 
			BC      Tar,AGT 
            ABS     A,B 
			SUB     #31,B 
			NOP 
			BC      Com,BLT 
			LD      L_tmp1,A 
			NOP  
                     NOP 
            XC     2,ALT 
			       LD   #-1,A 
            XC     1,AGEQ 
			       LD  #0,A 
			B       End		            
Tar: 
            LD      A,B 
			SUB     #31,B 
			NOP 
			BC      Com,BLT 
			LD      L_tmp1,A 
			NOP 
                     NOP 
			BC      Lt,ALT 
			        LD  #0X7fff,16,A 
					OR  #0xFFFF,A 
					B    End 
Lt:          
            LD      #0X8000,16,A 
			B       End 
 
Com: 
			SFTA    A, -1 
			STL     A, shift 
			LD      shift, ASM 
			DLD     L_tmp1, A 
			XC      1, C 
				    LD      A, 1, A 
			LD      A, ASM, A 
			LD      A, ASM, A 
End: 
		BD      Next3 
		DLD     L_tmp2, B 
		SUB     B, -1, A            ; A = L_tmp 
 
Else3: 
		ADD     A, B            ; if (A <= 0) B = exp1 
		SUB     #1, B 
		STL     B, exp 
 
		SUB     #1, A 
            NOP 
			BC      Tar1,AGT 
            ABS     A,B 
			SUB     #31,B 
			NOP 
			BC      Com1,BLT 
			LD      L_tmp2,B 
			NOP  
                     NOP 
            XC     2,BLT 
			       LD   #-1,B 
				   NOP 
            XC     1,BGEQ 
			       LD  #0,B 
            NOP 
			B       End1		            
Tar1: 
            LD      A,B 
			SUB     #31,B 
			NOP 
			BC      Com1,BLT 
			LD      L_tmp2,B 
			NOP 
                     NOP 
			BC      Lt1,BLT 
			        LD  #0X7fff,16,B 
					OR  #0xFFFF,B 
					B    End1 
Lt1:          
            LD      #0X8000,16,B 
			B       End1 
 
Com1: 
			SFTA    A, -1 
			STL     A, shift 
			LD      shift, ASM 
			DLD     L_tmp2, B 
			XC      1, C 
     				LD      B, 1, B 
			LD      B, ASM, B 
			LD      B, ASM, B 
End1: 
	    	DLD     L_tmp1, A 
		    LD      A, -1, A 
		    SUB     B, A            ; A = L_tmp 
Next3: 
	EXP     A 
	NOP 
	NORM    A                       ; A = nume 
 
	LDM     T, B 
	ADD     exp, B 
	ADD     exp_inv_denom, B 
	SUB     #16+2+16-1, B 
	NEG     B 
 
		SFTA    B, -1 
		STL     B, shift 
		LD      shift, ASM 
	    MPYA    inv_denom 
		XC      1, C 
		LD      B, 1, B 
		LD      B, ASM, B 
		LD      B, ASM, B 
 
	SAT     B 
	STL     B,-16, best_gain1 
 
;----------------------------------------------------------------- 
;  --- Change Q-format of gcode0 ( Q[exp_gcode0] -> Q4 ) --- 
;----------------------------------------------------------------- 
 
	LD      exp_gcode0, A 
	SUB     #4, A 
	BC      Else4, ALT 
If4: 
		NEG     A 
 
			SFTA    A, -1 
			STL     A, shift 
			LD      shift, ASM 
			LD      gcode0, A 
			XC      1, C 
				LD      A, 1, A 
			LD      A, ASM, A 
			LD      A, ASM, A 
 
		BD      Next4 
		STL     A, gcode0_org 
		NOP 
 
Else4: 
		NEG     A 
		ADD     #16, A 
 
			SFTA    A, -1 
			STL     A, shift 
			LD      shift, ASM 
			LD      gcode0, A 
			XC      1, C 
				LD      A, 1, A 
			LD      A, ASM, A 
			LD      A, ASM, A 
 
		STL     A,-16, gcode0_org 
 
Next4: 
 
;---------------------------------------------- 
;       - presearch for gain codebook - 
;---------------------------------------------- 
 
	CALL    Gbk_presel 
 
;---------------------------------------------- 
;         - Find the best quantizer - 
;---------------------------------------------- 
 
	LD      #0, ASM 
 
	STM     #exp_min+4, AR5         ; pExp_min   -> exp_min[4] 
							; pExp_coeff -> exp_coeff[4] 
	LD      *pExp_coeff-, 16, A     ; pExp_coeff -> exp_coeff[3] 
	ADD     exp_gcode0, 16, A 
	SUB     #4, 16, A 
	ST      A, *pExp_min-           ; pExp_min   -> exp_min[3] 
    ||  LD      *pExp_coeff-, A         ; pExp_coeff -> exp_coeff[2] 
 
	ADD     exp_gcode0, 16, A 
	SUB     #3, 16, A 
	ST      A, *pExp_min-           ; pExp_min   -> exp_min[2] 
    ||  LD      *pExp_coeff-, A         ; pExp_coeff -> exp_coeff[1] 
 
	ADD     exp_gcode0, 16, A 
	ADD     exp_gcode0, 16, A 
	SUB     #21, 16, A 
	ST      A, *pExp_min-           ; pExp_min   -> exp_min[1] 
    ||  LD      *pExp_coeff-, A         ; pExp_coeff -> exp_coeff[0] 
 
	ADD     #14, 16, A 
	ST      A, *pExp_min-           ; pExp_min   -> exp_min[0] 
    ||  LD      *pExp_coeff, A          ; pExp_coeff -> exp_coeff[0] 
 
	ADD     #13, 16, A 
 
	STM     #4-1, BRC 
	STL     A,-16, *pExp_min            ; pExp_min   -> exp_min[0] 
	RPTBD   BLK1_END-1 
	LD      *pExp_min+, A 
	NOP 
		LD      *pExp_min+, B 
		MIN     A 
BLK1_END 
	STL     A, e_min 
 
;  --- align coeff[] --- 
 
	MAR     *pExp_min-              ; pExp_min   -> exp_min[4] 
	STM     #5-1, BRC 
	RPTBD   BLK2_END-1 
	STM     #coeff+4*2, AR4 
	    LD      e_min, A 
		SUB     *pExp_min-, A 
 
			SFTA    A, -1 
			STL     A, shift 
			LD      shift, ASM 
			LD      *pG_coeff-, 16, A 
			XC      1, C 
				LD      A, 1, A 
			LD      A, ASM, A 
			LD      A, ASM, A 
 
       STL       A,-16,*pCoeff 
       LD        *pCoeff+,15,B 
       LD        A,-1,A 
       SUB       B,A 
       STL       A,*pCoeff 
       MAR       *+pCoeff(-3) 
BLK2_END: 
 
; --- Codebook search --- 
 
	LD      #7FFFh, 16, A 
	STM     #0FFFFh, AL 
	DST     A, L_dist_min 
 
	LD      #Addr_TempFlag, DP 
	CMPM    Addr_TempFlag, 1 
 
	LD      #Addr_local_buf1, DP 
	STM     #NCAN1-1, AR1 
 
	LD      cand1, 1, A 
	ADD     #gbk1Q13Q14, A 
	STLM    A, AR2 
 
	LD      cand2, 1, A 
	ADD     #gbk2Q14Q13, A 
	STL     A, cand2 
	STLM    A, AR3 
 
	BCD     Else5, NTC 
	STM     #g2_pitch, AR5          ; AR5 -> g2_pitch 
If5: 
Outter_Loop_Start1: 
		STM     #NCAN2-1, BRC 
		RPTB    BLK3_END-1 
 
			STM     #coeff+1, AR4 
 
			ADD     *pGbk1+, *pGbk2+, A 
			STL     A,-16, g_pitch 
			SUB     #GP0999, 16, A 
			BC      Else6, AGEQ 
If6: 
				ADD     *pGbk1-, *pGbk2+, A 
				LD      A,-1,A 
				MPYA    gcode0 
				LD      B,-16,B 
				STL     B,  g_code 
				SQUR    g_pitch, A 
				STL     A, -16,g2_pitch 
				SQUR    g_code, A 
				STL     A,-16, g2_code 
				MPY     g_pitch, A 
				STL     A,-16, g_pit_cod 
 
;MPY32_16 
				LD      #0, B 
				MACSU   *pCoeff-, *AR5, B 
				LD      B, -16, B 
				LD      B,  1,B     
				MAC     *AR5+, *pCoeff+0%, B, A 
;MPY32_16 
				LD      #0, B 
				MACSU   *pCoeff-, *AR5, B 
				LD      B, -16, B 
				LD      B,  1,B     
				MAC     *AR5+, *pCoeff+0%, B 
				ADD     B, A 
;MPY32_16 
				LD      #0, B 
				MACSU   *pCoeff-, *AR5, B 
				LD      B, -16, B 
				LD      B,  1,B     
				MAC     *AR5+, *pCoeff+0%, B 
				ADD     B, A 
;MPY32_16 
				LD      #0, B 
				MACSU   *pCoeff-, *AR5, B 
				LD      B, -16, B 
				LD      B,  1,B     
				MAC     *AR5+, *pCoeff+0%, B 
				ADD     B, A 
;MPY32_16 
				LD      #0, B 
				MACSU   *pCoeff-, *AR5, B 
				LD      B, -16, B 
				LD      B,  1,B     
				MAC     *AR5-, *pCoeff+0%, B   ; AR5 -> g_code 
				ADD     B, A                   ; A = L_tmp 
 
				DLD     L_dist_min, B 
				MIN     B 
 
				BCD     Next7, C 
				MAR     *AR5-0                 ; AR5 -> g2_pitch 
				NOP 
If7: 
					MVMD     pGbk1, index1 
					MVMD     pGbk2, index2 
Next7: 
				BD      Next6 
					DST      B, L_dist_min 
					NOP 
 
Else6: 
				MAR     *pGbk1- 
				MAR     *pGbk2+ 
 
Next6: 
				NOP 
BLK3_END 
		MAR     *+pGbk1(2) 
		BANZD   Outter_Loop_Start1, *AR1- 
		MVDM    cand2, AR3 
 
	B       Next5 
 
Else5: 
 
Outter_Loop_Start2: 
		STM     #NCAN2-1, BRC 
		RPTB    BLK4_END-1 
 
			STM     #coeff+1, AR4 
 
			ADD     *pGbk1+, *pGbk2+, A 
			STL     A, -16,g_pitch 
 
			ADD     *pGbk1-, *pGbk2+, A 
			LD      A,-1,A 
			MPYA    gcode0 
			LD      B,-16,B 
			STL     B,  g_code 
			SQUR    g_pitch, A 
			STL     A,-16, g2_pitch 
			SQUR    g_code, A 
			STL     A,-16, g2_code 
			MPY     g_pitch, A 
			STL     A,-16, g_pit_cod 
 
;MPY32_16 
			LD      #0, B 
			MACSU   *pCoeff-, *AR5, B 
			LD      B, -16, B 
			LD      B,  1,B 
			MAC     *AR5+, *pCoeff+0%, B, A ; AR5 -> g_pitch 
;MPY32_16 
			LD      #0, B 
			MACSU   *pCoeff-, *AR5, B 
			LD      B, -16, B 
			LD      B,  1,B     
			MAC     *AR5+, *pCoeff+0%, B    ; AR5 -> g2_code 
			ADD     B, A 
;MPY32_16 
			LD      #0, B 
			MACSU   *pCoeff-, *AR5, B 
			LD      B, -16, B 
			LD      B,  1,B 
 
			MAC     *AR5+, *pCoeff+0%, B    ; AR5 -> g_code 
			ADD     B, A 
;MPY32_16 
			LD      #0, B 
			MACSU   *pCoeff-, *AR5, B 
			LD      B, -16, B 
			LD      B,  1,B 
 
			MAC     *AR5+, *pCoeff+0%, B    ; AR5 -> g_pit_cod 
			ADD     B, A 
;MPY32_16 
			LD      #0, B 
			MACSU   *pCoeff-, *AR5, B 
			LD      B, -16, B 
			LD      B,  1,B     
			MAC     *AR5-, *pCoeff+0%, B    ; AR5 -> g_code 
			ADD     B, A                    ; A = L_tmp 
 
			DLD     L_dist_min, B 
			MIN     B 
 
			BCD     Next8, C 
			MAR     *AR5-0                  ; AR5 -> g2_pitch 
			NOP 
If8: 
			MVMD    pGbk1, index1 
			MVMD    pGbk2, index2 
Next8: 
			DST     B, L_dist_min 
BLK4_END 
		MAR     *+pGbk1(2) 
		BANZD   Outter_Loop_Start2, *AR1- 
		MVDM    cand2, AR3 
 
Next5: 
	MVDM    index1, AR2 
	MVDM    index2, AR3 
	MAR     *pGbk1+ 
	MAR     *pGbk2- 
	ADD     *pGbk1-, *pGbk2-, A 
 
	LD      A, -1, A 
 
	MPYA    gcode0                  ; B = L_acc 
 
	LD       A, -15, A 
 
	DST     A, L_gbk12 
	LD      #-12-1+1+16, A 
	SUB     exp_gcode0, A 
 
		SFTA    A, -1 
		STL     A, shift 
		LD      shift, ASM 
		XC      1, C 
			SFTA    B, 1 
 
		LD      B, ASM, B 
		LD      B, ASM, B 
 
	LD      #Addr_gain_code, DP 
	STL     B,-16, Addr_gain_code 
 
	ADD     *pGbk1, *pGbk2, A 
	LD      #Addr_gain_pit, DP 
	STL     A, -16,Addr_gain_pit 
 
	LD      #Addr_local_buf1, DP 
 
	LDM     pGbk1, B 
	SUB     #gbk1Q13Q14, B 
	LD      B, -1, B 
	ADD     #map1, B 
	STLM    B, AR2 
 
	LDM     pGbk2, B 
	SUB     #gbk2Q14Q13, B 
	LD      B, -1, B 
	ADD     #map2, B 
 
	CALLD  Gain_update 
	STLM    B, AR3 
	DLD     L_gbk12, A 
 
	MPY     *AR2, #NCODE2, A 
	LD      A, -1, A 
	ADD     *AR3, A 
 
	RETD 
	STM     #L_TOTAL, BK