Commit eba63b0d authored by ber's avatar ber
Browse files

add additional scaling flags to formulate2x2MixingMatrix_fx_func1 and set all to 0

parent 6963099f
Loading
Loading
Loading
Loading
Loading
+48 −79
Original line number Diff line number Diff line
@@ -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


@@ -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 )
@@ -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++ )
        {
@@ -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*/
@@ -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();
            }
        }

@@ -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 );