Loading lib_dec/ivas_svd_dec_fx.c +17 −14 Original line number Diff line number Diff line Loading @@ -1004,13 +1004,14 @@ static void biDiagonalReductionLeft_64( { #define HEADROOM_LEFT_1 2 #define HEADROOM_LEFT_2 10 #define HEADROOM_LEFT_3 15 #define HEADROOM_LEFT_4 15 #define HEADROOM_LEFT_2 ( 16 - norm_x_e0 / 4 ) // 12 #define HEADROOM_LEFT_3 ( 16 - norm_x_e0 / 4 ) // 14 #define HEADROOM_LEFT_4 ( 16 - norm_x_e0 / 4 ) // 15 Word16 iCh, jCh; Word32 norm_x; Word16 norm_x_e; Word16 norm_x_e0; Word64 norm_64; ( *g ) = 0; ( *g_e ) = 0; Loading @@ -1030,6 +1031,7 @@ static void biDiagonalReductionLeft_64( norm_64 = W_add( norm_64, W_mult0_32_32( tmp, tmp ) ); } norm_x_e = W_norm( norm_64 ); norm_x_e0 = W_norm( norm_64 ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); } IF( norm_x ) Loading Loading @@ -1076,15 +1078,14 @@ static void biDiagonalReductionLeft_64( norm_64 = 0; for ( jCh = currChannel; jCh < nChannelsL; jCh++ ) { factor1 = W_extract_l( W_shr( singularVectors_Left_64[jCh][currChannel], HEADROOM_LEFT_3 ) ); factor2 = W_extract_l( W_shr( singularVectors_Left_64[jCh][iCh], HEADROOM_LEFT_3 ) ); factor1 = W_extract_h( W_shl( singularVectors_Left_64[jCh][currChannel], 32 - HEADROOM_LEFT_3 ) ); factor2 = W_extract_h( W_shl( singularVectors_Left_64[jCh][iCh], 32 - HEADROOM_LEFT_3 ) ); norm_64 = W_add( norm_64, W_mult0_32_32( factor1, factor2 ) ); } 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 = norm_x_e - r_e + ( 32 + HEADROOM_LEFT_1 - 2 * HEADROOM_LEFT_3 - HEADROOM_LEFT_4 ); magic_shift = norm_x_e - r_e + ( 30 + 2 * HEADROOM_LEFT_1 - 2 * HEADROOM_LEFT_3 - HEADROOM_LEFT_4 ); magic_shift = ( norm_x_e - 2 * HEADROOM_LEFT_3 ) - ( r_e - 2 * HEADROOM_LEFT_1 ) + ( 32 - HEADROOM_LEFT_4 ) - 2; FOR( jCh = currChannel; jCh < nChannelsL; jCh++ ) { factor1 = W_extract_h( W_shl( singularVectors_Left_64[jCh][currChannel], 32 - HEADROOM_LEFT_4 ) ); Loading @@ -1111,13 +1112,14 @@ static void biDiagonalReductionRight_64( Word16 iCh, jCh; Word32 norm_x; Word16 norm_x_e; Word16 norm_x_e0; Word64 norm_64; Word16 idx; #define HEADROOM_RIGHT_1 2 #define HEADROOM_RIGHT_2 10 #define HEADROOM_RIGHT_3 15 #define HEADROOM_RIGHT_4 15 #define HEADROOM_RIGHT_2 ( 16 - norm_x_e0 / 4 ) // 12 #define HEADROOM_RIGHT_3 ( 16 - norm_x_e0 / 4 ) // 14 #define HEADROOM_RIGHT_4 ( 16 - norm_x_e0 / 4 ) // 15 ( *g ) = 0; Loading @@ -1136,6 +1138,7 @@ static void biDiagonalReductionRight_64( norm_64 = W_add( norm_64, W_mult0_32_32( tmp, tmp ) ); } norm_x_e = W_norm( norm_64 ); norm_x_e0 = W_norm( norm_64 ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); move16(); Loading Loading @@ -1184,15 +1187,15 @@ static void biDiagonalReductionRight_64( move64(); FOR( jCh = idx; jCh < nChannelsC; jCh++ ) { factor1 = W_extract_l( W_shr( singularVectors_Left_64[iCh][jCh], HEADROOM_RIGHT_3 ) ); factor2 = W_extract_l( W_shr( singularVectors_Left_64[currChannel][jCh], HEADROOM_RIGHT_3 ) ); factor1 = W_extract_h( W_shl( singularVectors_Left_64[iCh][jCh], 32 - HEADROOM_RIGHT_3 ) ); factor2 = W_extract_h( W_shl( singularVectors_Left_64[currChannel][jCh], 32 - HEADROOM_RIGHT_3 ) ); norm_64 = W_add( norm_64, W_mult0_32_32( factor1, factor2 ) ); } 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 = norm_x_e - r_e + ( 30 + 2 * HEADROOM_RIGHT_1 - 2 * HEADROOM_RIGHT_3 - HEADROOM_RIGHT_4 ); magic_shift = ( norm_x_e - 2 * HEADROOM_RIGHT_3 ) - ( r_e - 2 * HEADROOM_RIGHT_1 ) + ( 32 - HEADROOM_RIGHT_4 ) - 2; FOR( jCh = idx; jCh < nChannelsC; jCh++ ) { Loading Loading
lib_dec/ivas_svd_dec_fx.c +17 −14 Original line number Diff line number Diff line Loading @@ -1004,13 +1004,14 @@ static void biDiagonalReductionLeft_64( { #define HEADROOM_LEFT_1 2 #define HEADROOM_LEFT_2 10 #define HEADROOM_LEFT_3 15 #define HEADROOM_LEFT_4 15 #define HEADROOM_LEFT_2 ( 16 - norm_x_e0 / 4 ) // 12 #define HEADROOM_LEFT_3 ( 16 - norm_x_e0 / 4 ) // 14 #define HEADROOM_LEFT_4 ( 16 - norm_x_e0 / 4 ) // 15 Word16 iCh, jCh; Word32 norm_x; Word16 norm_x_e; Word16 norm_x_e0; Word64 norm_64; ( *g ) = 0; ( *g_e ) = 0; Loading @@ -1030,6 +1031,7 @@ static void biDiagonalReductionLeft_64( norm_64 = W_add( norm_64, W_mult0_32_32( tmp, tmp ) ); } norm_x_e = W_norm( norm_64 ); norm_x_e0 = W_norm( norm_64 ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); } IF( norm_x ) Loading Loading @@ -1076,15 +1078,14 @@ static void biDiagonalReductionLeft_64( norm_64 = 0; for ( jCh = currChannel; jCh < nChannelsL; jCh++ ) { factor1 = W_extract_l( W_shr( singularVectors_Left_64[jCh][currChannel], HEADROOM_LEFT_3 ) ); factor2 = W_extract_l( W_shr( singularVectors_Left_64[jCh][iCh], HEADROOM_LEFT_3 ) ); factor1 = W_extract_h( W_shl( singularVectors_Left_64[jCh][currChannel], 32 - HEADROOM_LEFT_3 ) ); factor2 = W_extract_h( W_shl( singularVectors_Left_64[jCh][iCh], 32 - HEADROOM_LEFT_3 ) ); norm_64 = W_add( norm_64, W_mult0_32_32( factor1, factor2 ) ); } 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 = norm_x_e - r_e + ( 32 + HEADROOM_LEFT_1 - 2 * HEADROOM_LEFT_3 - HEADROOM_LEFT_4 ); magic_shift = norm_x_e - r_e + ( 30 + 2 * HEADROOM_LEFT_1 - 2 * HEADROOM_LEFT_3 - HEADROOM_LEFT_4 ); magic_shift = ( norm_x_e - 2 * HEADROOM_LEFT_3 ) - ( r_e - 2 * HEADROOM_LEFT_1 ) + ( 32 - HEADROOM_LEFT_4 ) - 2; FOR( jCh = currChannel; jCh < nChannelsL; jCh++ ) { factor1 = W_extract_h( W_shl( singularVectors_Left_64[jCh][currChannel], 32 - HEADROOM_LEFT_4 ) ); Loading @@ -1111,13 +1112,14 @@ static void biDiagonalReductionRight_64( Word16 iCh, jCh; Word32 norm_x; Word16 norm_x_e; Word16 norm_x_e0; Word64 norm_64; Word16 idx; #define HEADROOM_RIGHT_1 2 #define HEADROOM_RIGHT_2 10 #define HEADROOM_RIGHT_3 15 #define HEADROOM_RIGHT_4 15 #define HEADROOM_RIGHT_2 ( 16 - norm_x_e0 / 4 ) // 12 #define HEADROOM_RIGHT_3 ( 16 - norm_x_e0 / 4 ) // 14 #define HEADROOM_RIGHT_4 ( 16 - norm_x_e0 / 4 ) // 15 ( *g ) = 0; Loading @@ -1136,6 +1138,7 @@ static void biDiagonalReductionRight_64( norm_64 = W_add( norm_64, W_mult0_32_32( tmp, tmp ) ); } norm_x_e = W_norm( norm_64 ); norm_x_e0 = W_norm( norm_64 ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); move16(); Loading Loading @@ -1184,15 +1187,15 @@ static void biDiagonalReductionRight_64( move64(); FOR( jCh = idx; jCh < nChannelsC; jCh++ ) { factor1 = W_extract_l( W_shr( singularVectors_Left_64[iCh][jCh], HEADROOM_RIGHT_3 ) ); factor2 = W_extract_l( W_shr( singularVectors_Left_64[currChannel][jCh], HEADROOM_RIGHT_3 ) ); factor1 = W_extract_h( W_shl( singularVectors_Left_64[iCh][jCh], 32 - HEADROOM_RIGHT_3 ) ); factor2 = W_extract_h( W_shl( singularVectors_Left_64[currChannel][jCh], 32 - HEADROOM_RIGHT_3 ) ); norm_64 = W_add( norm_64, W_mult0_32_32( factor1, factor2 ) ); } 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 = norm_x_e - r_e + ( 30 + 2 * HEADROOM_RIGHT_1 - 2 * HEADROOM_RIGHT_3 - HEADROOM_RIGHT_4 ); magic_shift = ( norm_x_e - 2 * HEADROOM_RIGHT_3 ) - ( r_e - 2 * HEADROOM_RIGHT_1 ) + ( 32 - HEADROOM_RIGHT_4 ) - 2; FOR( jCh = idx; jCh < nChannelsC; jCh++ ) { Loading