Commit ff62d745 authored by Arthur Tritthart's avatar Arthur Tritthart
Browse files

Fix pipeline issues due to inverse square root.

Fix other exponent settings.
parent c703268d
Loading
Loading
Loading
Loading
Loading
+11 −15
Original line number Diff line number Diff line
@@ -83,7 +83,6 @@ Word16 slot_fx[4] = { 32767, 16384, 10922, 8192 };
#define EPSILON_EXP                ( -39 )
#define ONE_DIV_EPSILON_MANT       1953125000 /* 1e+12 = 0,9094947*(2^40) */
#define ONE_DIV_EPSILON_EXP        ( 40 )

#endif
#define ADAPT_HTPROTO_ROT_LIM_1 0.8f

@@ -5138,14 +5137,16 @@ static void eig2x2_fx(
            q_tmp2 = sub( 31, q_tmp2 );

            tmp3 = BASOP_Util_Add_Mant32Exp( tmp2, sub( 31, q_tmp2 ), epsilon_mant, epsilon_exp, &exp_tmp3 );
#ifndef FIX_1009_REPLACE_DIV_SQRT_BY_ISQRT_LC
#if !defined(FIX_1009_REPLACE_DIV_SQRT_BY_ISQRT_LC) || 1
            tmp2 = BASOP_Util_Divide3232_Scale_cadence( ONE_IN_Q30, tmp3, &exp );
            exp = sub( exp, sub( Q30, sub( 31, exp_tmp3 ) ) );
            normVal_fx = Sqrt32( tmp2, &exp ); // q_tmp2
            q_tmp2 = sub( 31, exp );
#else
            normVal_fx = ISqrt32( tmp3, &exp_tmp3 );
            q_tmp2 = sub( 31, exp_tmp3 );
            /* Note: This code part does not work yet, see pipeline issue for BASOP #1009  */
            /* although the same code works at other places: mantissa and q_format is fine */
            normVal_fx = ISqrt32( tmp3, &exp );
            q_tmp2 = sub( 31, exp );
#endif
            IF( LT_16( q_tmp1, q_c ) )
            {
@@ -5710,14 +5711,11 @@ static void chol2x2_fx(
            temp = BASOP_Util_Divide3232_Scale_cadence( temp, 4611686, &exp );
            q_tmp = add( sub( 31, exp ), sub( q_tmp, 62 ) );
#else
            Word32 my_temp;
            Word16 my_q_tmp;
            my_temp = temp;
            my_q_tmp = q_tmp;
            temp = BASOP_Util_Divide3232_Scale_cadence( temp, 4611686, &exp );
            q_tmp = add( sub( 31, exp ), sub( q_tmp, 62 ) );
            my_temp = Mpy_32_32( my_temp, ONE_DIV_EPSILON_MANT );
            my_q_tmp = add( my_q_tmp, ONE_DIV_EPSILON_EXP );
            Word16 norm = norm_l(temp);
            temp = L_shl(temp, norm);
            q_tmp = add(q_tmp, norm);
            temp = Mpy_32_32( temp, ONE_DIV_EPSILON_MANT );
            q_tmp = sub( q_tmp, ONE_DIV_EPSILON_EXP );
#endif
        }
        ELSE
@@ -6120,11 +6118,9 @@ static void formulate2x2MixingMatrix_fx(
    // 4611686 = Q62
    IF( maxEne_fx == 0 )
    {
        // maxEneDiv_fx = BASOP_Util_Divide3232_Scale_cadence( ONE_IN_Q30, 4611686, &exp ); // 4611686 = 1e-12f in Q62
        // q_maxEneDiv = add( sub( 31, exp ), sub( Q30, 62 ) );
        maxEneDiv_fx = ONE_DIV_EPSILON_MANT;
        move32();
        q_maxEneDiv = ONE_DIV_EPSILON_EXP;
        q_maxEneDiv = 31 - ONE_DIV_EPSILON_EXP;
        move16();
    }
    ELSE