Loading lib_dec/ivas_svd_dec_fx.c +11 −11 Original line number Diff line number Diff line Loading @@ -1005,7 +1005,7 @@ static void biDiagonalReductionLeft_64( #define HEADROOM_LEFT_1 1 #define HEADROOM_LEFT_2 ( HEADROOM_LEFT_1 + 1 ) #define HEADROOM_LEFT_3 2 Word16 iCh, jCh; Word32 norm_x; Word16 norm_x_e; Loading Loading @@ -1048,15 +1048,15 @@ static void biDiagonalReductionLeft_64( ( *g ) = L_negate( *g ); } factor2 = W_extract_l( W_shr( singularVectors_Left_64[currChannel][currChannel], HEADROOM_LEFT_1 ) ); tmp_e = shr( sub( norm_x_e, 1 ), 1 ); tmp_e = sub( ( *g_e ), HEADROOM_LEFT_1 ); tmpmul = W_mult0_32_32( ( *g ), factor2 ); tmpmul = W_shr( tmpmul, tmp_e ); tmpmul = W_shl( tmpmul, tmp_e ); r_64 = W_sub( tmpmul, norm_64 ); r_e = W_norm( r_64 ); r = W_extract_h( W_shl( r_64, r_e ) ); invVal_e = sub( add( 1, ( HEADROOM_LEFT_1 + HEADROOM_LEFT_1 ) ), r_e ); invVal_e = sub( add( 1, ( HEADROOM_LEFT_1 + HEADROOM_LEFT_1 ) ), r_e ); invVal = BASOP_Util_Divide3232_Scale_newton( MAXVAL_WORD32, r, &invVal_e ); Loading @@ -1065,11 +1065,11 @@ static void biDiagonalReductionLeft_64( FOR( iCh = add( currChannel, 1 ); iCh < nChannelsC; iCh++ ) { Word16 magic_shift; Word32 factor1; Word32 factor2; Word32 f; // = norm / r // Word16 f_e; // not really needed Word16 magic_shift; norm_64 = 0; for ( jCh = currChannel; jCh < nChannelsL; jCh++ ) Loading @@ -1081,10 +1081,10 @@ static void biDiagonalReductionLeft_64( norm_x_e = W_norm( norm_64 ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); f = Mpy_32_32( norm_x, invVal ); magic_shift = 31 - HEADROOM_LEFT_3 + norm_x_e - r_e; magic_shift = add( add( norm_x_e, 23 ), sub( add( 1, ( HEADROOM_LEFT_1 + HEADROOM_LEFT_1 ) ), r_e ) ); FOR( jCh = currChannel; jCh < nChannelsL; jCh++ ) { factor1 = W_extract_l( W_shr( singularVectors_Left_64[jCh][currChannel], HEADROOM_LEFT_3 ) ); factor1 = W_extract_l( W_shr( singularVectors_Left_64[jCh][currChannel], HEADROOM_LEFT_2 ) ); singularVectors_Left_64[jCh][iCh] = W_add( singularVectors_Left_64[jCh][iCh], W_shr( W_mult0_32_32( f, factor1 ), magic_shift ) ); } } Loading Loading @@ -1113,7 +1113,6 @@ static void biDiagonalReductionRight_64( #define HEADROOM_RIGHT_1 2 #define HEADROOM_RIGHT_2 ( HEADROOM_RIGHT_1 + 1 ) #define HEADROOM_RIGHT_3 3 ( *g ) = 0; Loading @@ -1133,6 +1132,7 @@ static void biDiagonalReductionRight_64( } norm_x_e = W_norm( norm_64 ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); norm_x_e = add( sub( ( HEADROOM_RIGHT_1 + HEADROOM_RIGHT_1 ), norm_x_e ), 1 ); move16(); IF( norm_x ) Loading @@ -1149,7 +1149,7 @@ static void biDiagonalReductionRight_64( Word32 invVal; Word16 invVal_e; ( *g_e ) = add( sub( ( HEADROOM_RIGHT_1 + HEADROOM_RIGHT_1 ), norm_x_e ), 1 ); ( *g_e ) = norm_x_e; move16(); ( *g ) = Sqrt32( norm_x, g_e ); IF( GE_64( singularVectors_Left_64[currChannel][idx], 0 ) ) Loading Loading @@ -1188,11 +1188,11 @@ static void biDiagonalReductionRight_64( norm_x_e = W_norm( norm_64 ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); f = Mpy_32_32( norm_x, invVal ); magic_shift = 25 + norm_x_e - r_e; // headroom 3 FIXME: Why does this work? magic_shift = 25 + norm_x_e - r_e; // FIXME: Why does this work? FOR( jCh = idx; jCh < nChannelsC; jCh++ ) { factor2 = W_extract_l( W_shr( singularVectors_Left_64[currChannel][jCh], HEADROOM_RIGHT_3 ) ); factor2 = W_extract_l( W_shr( singularVectors_Left_64[currChannel][jCh], HEADROOM_RIGHT_2 ) ); singularVectors_Left_64[iCh][jCh] = W_add( singularVectors_Left_64[iCh][jCh], W_shr( W_mult0_32_32( f, factor2 ), magic_shift ) ); } } Loading Loading
lib_dec/ivas_svd_dec_fx.c +11 −11 Original line number Diff line number Diff line Loading @@ -1005,7 +1005,7 @@ static void biDiagonalReductionLeft_64( #define HEADROOM_LEFT_1 1 #define HEADROOM_LEFT_2 ( HEADROOM_LEFT_1 + 1 ) #define HEADROOM_LEFT_3 2 Word16 iCh, jCh; Word32 norm_x; Word16 norm_x_e; Loading Loading @@ -1048,15 +1048,15 @@ static void biDiagonalReductionLeft_64( ( *g ) = L_negate( *g ); } factor2 = W_extract_l( W_shr( singularVectors_Left_64[currChannel][currChannel], HEADROOM_LEFT_1 ) ); tmp_e = shr( sub( norm_x_e, 1 ), 1 ); tmp_e = sub( ( *g_e ), HEADROOM_LEFT_1 ); tmpmul = W_mult0_32_32( ( *g ), factor2 ); tmpmul = W_shr( tmpmul, tmp_e ); tmpmul = W_shl( tmpmul, tmp_e ); r_64 = W_sub( tmpmul, norm_64 ); r_e = W_norm( r_64 ); r = W_extract_h( W_shl( r_64, r_e ) ); invVal_e = sub( add( 1, ( HEADROOM_LEFT_1 + HEADROOM_LEFT_1 ) ), r_e ); invVal_e = sub( add( 1, ( HEADROOM_LEFT_1 + HEADROOM_LEFT_1 ) ), r_e ); invVal = BASOP_Util_Divide3232_Scale_newton( MAXVAL_WORD32, r, &invVal_e ); Loading @@ -1065,11 +1065,11 @@ static void biDiagonalReductionLeft_64( FOR( iCh = add( currChannel, 1 ); iCh < nChannelsC; iCh++ ) { Word16 magic_shift; Word32 factor1; Word32 factor2; Word32 f; // = norm / r // Word16 f_e; // not really needed Word16 magic_shift; norm_64 = 0; for ( jCh = currChannel; jCh < nChannelsL; jCh++ ) Loading @@ -1081,10 +1081,10 @@ static void biDiagonalReductionLeft_64( norm_x_e = W_norm( norm_64 ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); f = Mpy_32_32( norm_x, invVal ); magic_shift = 31 - HEADROOM_LEFT_3 + norm_x_e - r_e; magic_shift = add( add( norm_x_e, 23 ), sub( add( 1, ( HEADROOM_LEFT_1 + HEADROOM_LEFT_1 ) ), r_e ) ); FOR( jCh = currChannel; jCh < nChannelsL; jCh++ ) { factor1 = W_extract_l( W_shr( singularVectors_Left_64[jCh][currChannel], HEADROOM_LEFT_3 ) ); factor1 = W_extract_l( W_shr( singularVectors_Left_64[jCh][currChannel], HEADROOM_LEFT_2 ) ); singularVectors_Left_64[jCh][iCh] = W_add( singularVectors_Left_64[jCh][iCh], W_shr( W_mult0_32_32( f, factor1 ), magic_shift ) ); } } Loading Loading @@ -1113,7 +1113,6 @@ static void biDiagonalReductionRight_64( #define HEADROOM_RIGHT_1 2 #define HEADROOM_RIGHT_2 ( HEADROOM_RIGHT_1 + 1 ) #define HEADROOM_RIGHT_3 3 ( *g ) = 0; Loading @@ -1133,6 +1132,7 @@ static void biDiagonalReductionRight_64( } norm_x_e = W_norm( norm_64 ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); norm_x_e = add( sub( ( HEADROOM_RIGHT_1 + HEADROOM_RIGHT_1 ), norm_x_e ), 1 ); move16(); IF( norm_x ) Loading @@ -1149,7 +1149,7 @@ static void biDiagonalReductionRight_64( Word32 invVal; Word16 invVal_e; ( *g_e ) = add( sub( ( HEADROOM_RIGHT_1 + HEADROOM_RIGHT_1 ), norm_x_e ), 1 ); ( *g_e ) = norm_x_e; move16(); ( *g ) = Sqrt32( norm_x, g_e ); IF( GE_64( singularVectors_Left_64[currChannel][idx], 0 ) ) Loading Loading @@ -1188,11 +1188,11 @@ static void biDiagonalReductionRight_64( norm_x_e = W_norm( norm_64 ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); f = Mpy_32_32( norm_x, invVal ); magic_shift = 25 + norm_x_e - r_e; // headroom 3 FIXME: Why does this work? magic_shift = 25 + norm_x_e - r_e; // FIXME: Why does this work? FOR( jCh = idx; jCh < nChannelsC; jCh++ ) { factor2 = W_extract_l( W_shr( singularVectors_Left_64[currChannel][jCh], HEADROOM_RIGHT_3 ) ); factor2 = W_extract_l( W_shr( singularVectors_Left_64[currChannel][jCh], HEADROOM_RIGHT_2 ) ); singularVectors_Left_64[iCh][jCh] = W_add( singularVectors_Left_64[iCh][jCh], W_shr( W_mult0_32_32( f, factor2 ), magic_shift ) ); } } Loading