Loading lib_rend/ivas_dirac_dec_binaural_functions.c +48 −79 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ #include "wmc_auto.h" # if ( BINAURAL_CHANNELS == 2 ) #define FIX1072_SPEEDUP_formulate2x2MixingMatrix_fx_func1 #define FIX1072_SPEEDUP_formulate2x2MixingMatrix_fx_func1 // 5Mhz - accept Regression #endif Loading Loading @@ -234,16 +234,16 @@ static inline Word32 matrixMul_func1( Word32 cond1, Word32 cond2, Word32 prod ) static void formulate2x2MixingMatrix_fx_func1( Word32 Are_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_A*/ Word32 Aim_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_A*/ Word16 *q_A, Word16 *q_A, Flag scaleA, Word32 Bre_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_B*/ Word32 Bim_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_B*/ Word16 *q_B, Word16 *q_B, Flag scaleB, //Word32 tmpRe_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_tmp*/ //Word32 tmpIm_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_tmp*/ //Word16 *q_tmp, Word32 Cre_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Word32 Cim_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Word16 *q_C, Word16 *q_C,Flag scaleC, Word32 outRe_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_out*/ Word32 outIm_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_out*/ Word16 *q_out ) Loading @@ -257,23 +257,35 @@ static void formulate2x2MixingMatrix_fx_func1( Word32 tmp1, tmp2, tmp3; Word32 tmpRe_fx_chA_0, tmpRe_fx_chA_1, tmpIm_fx_chA_0, tmpIm_fx_chA_1; min_q_shift1 = sub( s_min( L_norm_arr( Are_fx[0], size ), L_norm_arr( Aim_fx[0], size ) ), 1 ); min_q_shift2 = sub( s_min( L_norm_arr( Bre_fx[0], size ), L_norm_arr( Bim_fx[0], size ) ), 1 ); min_q_shift3 = sub( s_min( L_norm_arr( Cre_fx[0], size ), L_norm_arr( Cim_fx[0], size ) ), 1 ); /* Create testVariables*/ Word32 Tim_fx_chA_0_GE_0, Tim_fx_chA_0_LT_0, Tim_fx_chA_1_GE_0, Tim_fx_chA_1_LT_0, Tre_fx_chA_0_GE_0, Tre_fx_chA_0_LT_0, Tre_fx_chA_1_GE_0, Tre_fx_chA_1_LT_0; IF( scaleA != 0 ) { min_q_shift1 = sub( s_min( L_norm_arr( Are_fx[0], size ), L_norm_arr( Aim_fx[0], size ) ), 1 ); scale_sig32( Are_fx[0], size, min_q_shift1 ); scale_sig32( Aim_fx[0], size, min_q_shift1 ); *q_A = add( *q_A, min_q_shift1 ); move16(); } IF( scaleB != 0 ) { min_q_shift2 = sub( s_min( L_norm_arr( Bre_fx[0], size ), L_norm_arr( Bim_fx[0], size ) ), 1 ); scale_sig32( Bre_fx[0], size, min_q_shift2 ); scale_sig32( Bim_fx[0], size, min_q_shift2 ); *q_B = add( *q_B, min_q_shift2 ); move16(); } IF( scaleC != 0 ) { min_q_shift3 = sub( s_min( L_norm_arr( Cre_fx[0], size ), L_norm_arr( Cim_fx[0], size ) ), 1 ); scale_sig32( Cre_fx[0], size, min_q_shift3 ); scale_sig32( Cim_fx[0], size, min_q_shift3 ); *q_A = add( *q_A, min_q_shift1 ); *q_B = add( *q_B, min_q_shift2 ); *q_C = add( *q_C, min_q_shift3 ); move16(); move16(); move16(); } FOR( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) { Loading Loading @@ -376,17 +388,21 @@ static void formulate2x2MixingMatrix_fx_func1( move32(); tmpIm_fx_chA_1 = L_add( tmp3, L_add( tmp1, tmp2 ) ); // ========================================= matrixTransp2Mul_fx part - TODO: unroll! // ========================================= matrixTransp2Mul_fx part /* Create testVariables*/ Word32 Tim_fx_chA_0_GE_0 = GE_32( tmpIm_fx_chA_0, 0 ); Word32 Tim_fx_chA_0_LT_0 = LT_32( tmpIm_fx_chA_0, 0 ); Word32 Tim_fx_chA_1_GE_0 = GE_32( tmpIm_fx_chA_1, 0 ); Word32 Tim_fx_chA_1_LT_0 = LT_32( tmpIm_fx_chA_1, 0 ); Tim_fx_chA_0_GE_0 = GE_32( tmpIm_fx_chA_0, 0 ); Tim_fx_chA_0_LT_0 = LT_32( tmpIm_fx_chA_0, 0 ); Tim_fx_chA_1_GE_0 = GE_32( tmpIm_fx_chA_1, 0 ); Tim_fx_chA_1_LT_0 = LT_32( tmpIm_fx_chA_1, 0 ); Word32 Tre_fx_chA_0_GE_0 = GE_32( tmpRe_fx_chA_0, 0 ); Word32 Tre_fx_chA_0_LT_0 = LT_32( tmpRe_fx_chA_0, 0 ); Word32 Tre_fx_chA_1_GE_0 = GE_32( tmpRe_fx_chA_1, 0 ); Word32 Tre_fx_chA_1_LT_0 = LT_32( tmpRe_fx_chA_1, 0 ); Tre_fx_chA_0_GE_0 = GE_32( tmpRe_fx_chA_0, 0 ); Tre_fx_chA_0_LT_0 = LT_32( tmpRe_fx_chA_0, 0 ); Tre_fx_chA_1_GE_0 = GE_32( tmpRe_fx_chA_1, 0 ); Tre_fx_chA_1_LT_0 = LT_32( tmpRe_fx_chA_1, 0 ); } FOR( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) { chB = 0; /* Create testVariables*/ Loading Loading @@ -434,53 +450,6 @@ static void formulate2x2MixingMatrix_fx_func1( move32(); outIm_fx[chA][chB] = L_add( tmp3, L_add( tmp1, tmp2 ) ); move32(); chB = 1; /* Create testVariables*/ Cre_fx_chB_0_GE_0 = GE_32( Cre_fx[chB][0], 0 ); Cre_fx_chB_0_LT_0 = LT_32( Cre_fx[chB][0], 0 ); Cim_fx_chB_0_LT_0 = LT_32( Cim_fx[chB][0], 0 ); Cim_fx_chB_0_GE_0 = GE_32( Cim_fx[chB][0], 0 ); LNeg_Cim_fx_chB_0 = L_negate( Cim_fx[chB][0] ); Cre_fx_chB_1_GE_0 = GE_32( Cre_fx[chB][1], 0 ); Cre_fx_chB_1_LT_0 = LT_32( Cre_fx[chB][1], 0 ); Cim_fx_chB_1_LT_0 = LT_32( Cim_fx[chB][1], 0 ); Cim_fx_chB_1_GE_0 = GE_32( Cim_fx[chB][1], 0 ); LNeg_Cim_fx_chB_1 = L_negate( Cim_fx[chB][1] ); tmp1 = matrixMul_func1( Tre_fx_chA_0_LT_0 || Cre_fx_chB_0_LT_0, Tre_fx_chA_0_GE_0 || Cre_fx_chB_0_GE_0, Mpy_32_32( tmpRe_fx_chA_0, Cre_fx[chB][0] ) ); move32(); move32(); tmp2 = matrixMul_func1( Tre_fx_chA_1_LT_0 || Cre_fx_chB_1_LT_0, Tre_fx_chA_1_GE_0 || Cre_fx_chB_1_GE_0, Mpy_32_32( tmpRe_fx_chA_1, Cre_fx[chB][1] ) ); move32(); move32(); tmp3 = L_add( tmp1, tmp2 ); tmp1 = matrixMul_func1( Tim_fx_chA_0_LT_0 || Cim_fx_chB_0_GE_0, Tim_fx_chA_0_GE_0 || Cim_fx_chB_0_LT_0, Mpy_32_32( tmpIm_fx_chA_0, LNeg_Cim_fx_chB_0 ) ); move32(); move32(); tmp2 = matrixMul_func1( Tim_fx_chA_1_LT_0 || Cim_fx_chB_1_GE_0, Tim_fx_chA_1_GE_0 || Cim_fx_chB_1_LT_0, Mpy_32_32( tmpIm_fx_chA_1, LNeg_Cim_fx_chB_1 ) ); move32(); move32(); outRe_fx[chA][chB] = L_sub( tmp3, L_add( tmp1, tmp2 ) ); move32(); tmp1 = matrixMul_func1( Tim_fx_chA_0_LT_0 || Cre_fx_chB_0_LT_0, Tim_fx_chA_0_GE_0 || Cre_fx_chB_0_GE_0, Mpy_32_32( tmpIm_fx_chA_0, Cre_fx[chB][0] ) ); move32(); move32(); tmp2 = matrixMul_func1( Tim_fx_chA_1_LT_0 || Cre_fx_chB_1_LT_0, Tim_fx_chA_1_GE_0 || Cre_fx_chB_1_GE_0, Mpy_32_32( tmpIm_fx_chA_1, Cre_fx[chB][1] ) ); move32(); move32(); tmp3 = L_add( tmp1, tmp2 ); move32(); move32(); tmp1 = matrixMul_func1( Tre_fx_chA_0_LT_0 || Cim_fx_chB_0_GE_0, Tre_fx_chA_0_GE_0 || Cim_fx_chB_0_LT_0, Mpy_32_32( tmpRe_fx_chA_0, LNeg_Cim_fx_chB_0 ) ); move32(); move32(); tmp2 = matrixMul_func1( Tre_fx_chA_1_LT_0 || Cim_fx_chB_1_GE_0, Tre_fx_chA_1_GE_0 || Cim_fx_chB_1_LT_0, Mpy_32_32( tmpRe_fx_chA_1, LNeg_Cim_fx_chB_1 ) ); move32(); move32(); outIm_fx[chA][chB] = L_add( tmp3, L_add( tmp1, tmp2 ) ); move32(); } } Loading Loading @@ -5760,7 +5729,7 @@ static void formulate2x2MixingMatrix_fx( pop_wmops(); //push_wmops( "IDDB_2x2Matrix_Part3.2" ); push_wmops( "IDDB_2x2Matrix_Part3.3" ); #if defined( FIX1072_SPEEDUP_formulate2x2MixingMatrix_fx_func1 ) formulate2x2MixingMatrix_fx_func1( KyRe_fx, KyIm_fx, &q_ky, Pre_fx, Pim_fx, &q_P, /*tmpRe_fx, tmpIm_fx, &q_temp,*/ Uxre_fx, Uxim_fx, &q_Ux, Mre_fx, Mim_fx, q_M ); formulate2x2MixingMatrix_fx_func1( KyRe_fx, KyIm_fx, &q_ky, 0 /*scale*/, Pre_fx, Pim_fx, &q_P, 0 /*scale*/, Uxre_fx, Uxim_fx, &q_Ux, 0 /*scale*/, Mre_fx, Mim_fx, q_M ); #else matrixMul_fx( KyRe_fx, KyIm_fx, &q_ky, Pre_fx, Pim_fx, &q_P, tmpRe_fx, tmpIm_fx, &q_temp ); Loading Loading
lib_rend/ivas_dirac_dec_binaural_functions.c +48 −79 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ #include "wmc_auto.h" # if ( BINAURAL_CHANNELS == 2 ) #define FIX1072_SPEEDUP_formulate2x2MixingMatrix_fx_func1 #define FIX1072_SPEEDUP_formulate2x2MixingMatrix_fx_func1 // 5Mhz - accept Regression #endif Loading Loading @@ -234,16 +234,16 @@ static inline Word32 matrixMul_func1( Word32 cond1, Word32 cond2, Word32 prod ) static void formulate2x2MixingMatrix_fx_func1( Word32 Are_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_A*/ Word32 Aim_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_A*/ Word16 *q_A, Word16 *q_A, Flag scaleA, Word32 Bre_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_B*/ Word32 Bim_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_B*/ Word16 *q_B, Word16 *q_B, Flag scaleB, //Word32 tmpRe_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_tmp*/ //Word32 tmpIm_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_tmp*/ //Word16 *q_tmp, Word32 Cre_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Word32 Cim_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Word16 *q_C, Word16 *q_C,Flag scaleC, Word32 outRe_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_out*/ Word32 outIm_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_out*/ Word16 *q_out ) Loading @@ -257,23 +257,35 @@ static void formulate2x2MixingMatrix_fx_func1( Word32 tmp1, tmp2, tmp3; Word32 tmpRe_fx_chA_0, tmpRe_fx_chA_1, tmpIm_fx_chA_0, tmpIm_fx_chA_1; min_q_shift1 = sub( s_min( L_norm_arr( Are_fx[0], size ), L_norm_arr( Aim_fx[0], size ) ), 1 ); min_q_shift2 = sub( s_min( L_norm_arr( Bre_fx[0], size ), L_norm_arr( Bim_fx[0], size ) ), 1 ); min_q_shift3 = sub( s_min( L_norm_arr( Cre_fx[0], size ), L_norm_arr( Cim_fx[0], size ) ), 1 ); /* Create testVariables*/ Word32 Tim_fx_chA_0_GE_0, Tim_fx_chA_0_LT_0, Tim_fx_chA_1_GE_0, Tim_fx_chA_1_LT_0, Tre_fx_chA_0_GE_0, Tre_fx_chA_0_LT_0, Tre_fx_chA_1_GE_0, Tre_fx_chA_1_LT_0; IF( scaleA != 0 ) { min_q_shift1 = sub( s_min( L_norm_arr( Are_fx[0], size ), L_norm_arr( Aim_fx[0], size ) ), 1 ); scale_sig32( Are_fx[0], size, min_q_shift1 ); scale_sig32( Aim_fx[0], size, min_q_shift1 ); *q_A = add( *q_A, min_q_shift1 ); move16(); } IF( scaleB != 0 ) { min_q_shift2 = sub( s_min( L_norm_arr( Bre_fx[0], size ), L_norm_arr( Bim_fx[0], size ) ), 1 ); scale_sig32( Bre_fx[0], size, min_q_shift2 ); scale_sig32( Bim_fx[0], size, min_q_shift2 ); *q_B = add( *q_B, min_q_shift2 ); move16(); } IF( scaleC != 0 ) { min_q_shift3 = sub( s_min( L_norm_arr( Cre_fx[0], size ), L_norm_arr( Cim_fx[0], size ) ), 1 ); scale_sig32( Cre_fx[0], size, min_q_shift3 ); scale_sig32( Cim_fx[0], size, min_q_shift3 ); *q_A = add( *q_A, min_q_shift1 ); *q_B = add( *q_B, min_q_shift2 ); *q_C = add( *q_C, min_q_shift3 ); move16(); move16(); move16(); } FOR( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) { Loading Loading @@ -376,17 +388,21 @@ static void formulate2x2MixingMatrix_fx_func1( move32(); tmpIm_fx_chA_1 = L_add( tmp3, L_add( tmp1, tmp2 ) ); // ========================================= matrixTransp2Mul_fx part - TODO: unroll! // ========================================= matrixTransp2Mul_fx part /* Create testVariables*/ Word32 Tim_fx_chA_0_GE_0 = GE_32( tmpIm_fx_chA_0, 0 ); Word32 Tim_fx_chA_0_LT_0 = LT_32( tmpIm_fx_chA_0, 0 ); Word32 Tim_fx_chA_1_GE_0 = GE_32( tmpIm_fx_chA_1, 0 ); Word32 Tim_fx_chA_1_LT_0 = LT_32( tmpIm_fx_chA_1, 0 ); Tim_fx_chA_0_GE_0 = GE_32( tmpIm_fx_chA_0, 0 ); Tim_fx_chA_0_LT_0 = LT_32( tmpIm_fx_chA_0, 0 ); Tim_fx_chA_1_GE_0 = GE_32( tmpIm_fx_chA_1, 0 ); Tim_fx_chA_1_LT_0 = LT_32( tmpIm_fx_chA_1, 0 ); Word32 Tre_fx_chA_0_GE_0 = GE_32( tmpRe_fx_chA_0, 0 ); Word32 Tre_fx_chA_0_LT_0 = LT_32( tmpRe_fx_chA_0, 0 ); Word32 Tre_fx_chA_1_GE_0 = GE_32( tmpRe_fx_chA_1, 0 ); Word32 Tre_fx_chA_1_LT_0 = LT_32( tmpRe_fx_chA_1, 0 ); Tre_fx_chA_0_GE_0 = GE_32( tmpRe_fx_chA_0, 0 ); Tre_fx_chA_0_LT_0 = LT_32( tmpRe_fx_chA_0, 0 ); Tre_fx_chA_1_GE_0 = GE_32( tmpRe_fx_chA_1, 0 ); Tre_fx_chA_1_LT_0 = LT_32( tmpRe_fx_chA_1, 0 ); } FOR( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) { chB = 0; /* Create testVariables*/ Loading Loading @@ -434,53 +450,6 @@ static void formulate2x2MixingMatrix_fx_func1( move32(); outIm_fx[chA][chB] = L_add( tmp3, L_add( tmp1, tmp2 ) ); move32(); chB = 1; /* Create testVariables*/ Cre_fx_chB_0_GE_0 = GE_32( Cre_fx[chB][0], 0 ); Cre_fx_chB_0_LT_0 = LT_32( Cre_fx[chB][0], 0 ); Cim_fx_chB_0_LT_0 = LT_32( Cim_fx[chB][0], 0 ); Cim_fx_chB_0_GE_0 = GE_32( Cim_fx[chB][0], 0 ); LNeg_Cim_fx_chB_0 = L_negate( Cim_fx[chB][0] ); Cre_fx_chB_1_GE_0 = GE_32( Cre_fx[chB][1], 0 ); Cre_fx_chB_1_LT_0 = LT_32( Cre_fx[chB][1], 0 ); Cim_fx_chB_1_LT_0 = LT_32( Cim_fx[chB][1], 0 ); Cim_fx_chB_1_GE_0 = GE_32( Cim_fx[chB][1], 0 ); LNeg_Cim_fx_chB_1 = L_negate( Cim_fx[chB][1] ); tmp1 = matrixMul_func1( Tre_fx_chA_0_LT_0 || Cre_fx_chB_0_LT_0, Tre_fx_chA_0_GE_0 || Cre_fx_chB_0_GE_0, Mpy_32_32( tmpRe_fx_chA_0, Cre_fx[chB][0] ) ); move32(); move32(); tmp2 = matrixMul_func1( Tre_fx_chA_1_LT_0 || Cre_fx_chB_1_LT_0, Tre_fx_chA_1_GE_0 || Cre_fx_chB_1_GE_0, Mpy_32_32( tmpRe_fx_chA_1, Cre_fx[chB][1] ) ); move32(); move32(); tmp3 = L_add( tmp1, tmp2 ); tmp1 = matrixMul_func1( Tim_fx_chA_0_LT_0 || Cim_fx_chB_0_GE_0, Tim_fx_chA_0_GE_0 || Cim_fx_chB_0_LT_0, Mpy_32_32( tmpIm_fx_chA_0, LNeg_Cim_fx_chB_0 ) ); move32(); move32(); tmp2 = matrixMul_func1( Tim_fx_chA_1_LT_0 || Cim_fx_chB_1_GE_0, Tim_fx_chA_1_GE_0 || Cim_fx_chB_1_LT_0, Mpy_32_32( tmpIm_fx_chA_1, LNeg_Cim_fx_chB_1 ) ); move32(); move32(); outRe_fx[chA][chB] = L_sub( tmp3, L_add( tmp1, tmp2 ) ); move32(); tmp1 = matrixMul_func1( Tim_fx_chA_0_LT_0 || Cre_fx_chB_0_LT_0, Tim_fx_chA_0_GE_0 || Cre_fx_chB_0_GE_0, Mpy_32_32( tmpIm_fx_chA_0, Cre_fx[chB][0] ) ); move32(); move32(); tmp2 = matrixMul_func1( Tim_fx_chA_1_LT_0 || Cre_fx_chB_1_LT_0, Tim_fx_chA_1_GE_0 || Cre_fx_chB_1_GE_0, Mpy_32_32( tmpIm_fx_chA_1, Cre_fx[chB][1] ) ); move32(); move32(); tmp3 = L_add( tmp1, tmp2 ); move32(); move32(); tmp1 = matrixMul_func1( Tre_fx_chA_0_LT_0 || Cim_fx_chB_0_GE_0, Tre_fx_chA_0_GE_0 || Cim_fx_chB_0_LT_0, Mpy_32_32( tmpRe_fx_chA_0, LNeg_Cim_fx_chB_0 ) ); move32(); move32(); tmp2 = matrixMul_func1( Tre_fx_chA_1_LT_0 || Cim_fx_chB_1_GE_0, Tre_fx_chA_1_GE_0 || Cim_fx_chB_1_LT_0, Mpy_32_32( tmpRe_fx_chA_1, LNeg_Cim_fx_chB_1 ) ); move32(); move32(); outIm_fx[chA][chB] = L_add( tmp3, L_add( tmp1, tmp2 ) ); move32(); } } Loading Loading @@ -5760,7 +5729,7 @@ static void formulate2x2MixingMatrix_fx( pop_wmops(); //push_wmops( "IDDB_2x2Matrix_Part3.2" ); push_wmops( "IDDB_2x2Matrix_Part3.3" ); #if defined( FIX1072_SPEEDUP_formulate2x2MixingMatrix_fx_func1 ) formulate2x2MixingMatrix_fx_func1( KyRe_fx, KyIm_fx, &q_ky, Pre_fx, Pim_fx, &q_P, /*tmpRe_fx, tmpIm_fx, &q_temp,*/ Uxre_fx, Uxim_fx, &q_Ux, Mre_fx, Mim_fx, q_M ); formulate2x2MixingMatrix_fx_func1( KyRe_fx, KyIm_fx, &q_ky, 0 /*scale*/, Pre_fx, Pim_fx, &q_P, 0 /*scale*/, Uxre_fx, Uxim_fx, &q_Ux, 0 /*scale*/, Mre_fx, Mim_fx, q_M ); #else matrixMul_fx( KyRe_fx, KyIm_fx, &q_ky, Pre_fx, Pim_fx, &q_P, tmpRe_fx, tmpIm_fx, &q_temp ); Loading