Loading lib_dec/ivas_svd_dec_fx.c +16 −13 Original line number Diff line number Diff line Loading @@ -1004,15 +1004,18 @@ static void biDiagonalReductionLeft_64( { /* TODO: For some reason, this is optimal. But why? why not ( 32 - 2 * MAGIC_HEADROOM_1 - norm_x_e0 + 1 ) , for example? */ #define MAGIC_HEADROOM_1 2 #define MAGIC_HEADROOM_2 ( sub( 16, shr( norm_x_e0, 2 ) ) ) #define MAGIC_HEADROOM_3 ( sub( 16, shr( norm_x_e0, 2 ) ) ) #define MAGIC_HEADROOM_4 ( sub( 16, shr( norm_x_e0, 2 ) ) ) //#define MAGIC_HEADROOM_2 ( sub( 16, shr( norm_x_e0, 2 ) ) ) //#define MAGIC_HEADROOM_3 ( sub( 16, shr( norm_x_e0, 2 ) ) ) //#define MAGIC_HEADROOM_4 ( sub( 16, shr( norm_x_e0, 2 ) ) ) #define MAGIC_HEADROOM_2 magic_headroom #define MAGIC_HEADROOM_3 magic_headroom #define MAGIC_HEADROOM_4 magic_headroom Word16 iCh, jCh; Word32 norm_x; Word16 norm_x_e; Word16 norm_x_e0; Word64 norm_64; Word16 magic_headroom; ( *g ) = 0; ( *g_e ) = 0; move32(); Loading @@ -1031,7 +1034,7 @@ static void biDiagonalReductionLeft_64( norm_64 = W_add( norm_64, W_mult0_32_32( tmp, tmp ) ); // q(norm)=2*q(sing)-2*H1 // exp(norm)=2*exp(sing)+2*H1 } norm_x_e = W_norm( norm_64 ); norm_x_e0 = W_norm( norm_64 ); magic_headroom = sub( 16, shr( norm_x_e, 2 ) ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); // q(norm_x)=32-exp(norm_x) exp(norm_x)=exp(norm)-32 } IF( norm_x ) Loading Loading @@ -1115,9 +1118,9 @@ static void biDiagonalReductionRight_64( Word16 iCh, jCh; Word32 norm_x; Word16 norm_x_e; Word16 norm_x_e0; Word64 norm_64; Word16 idx; Word16 magic_headroom; ( *g ) = 0; Loading @@ -1136,7 +1139,7 @@ static void biDiagonalReductionRight_64( norm_64 = W_add( norm_64, W_mult0_32_32( tmp, tmp ) ); // q(norm)=2*q(sing)-2*H1 // exp(norm)=2*exp(sing)+2*H1 } norm_x_e = W_norm( norm_64 ); norm_x_e0 = W_norm( norm_64 ); magic_headroom = sub( 16, shr( norm_x_e, 2 ) ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); // q(norm_x)=32-exp(norm_x) exp(norm_x)=exp(norm)-32 move16(); Loading Loading
lib_dec/ivas_svd_dec_fx.c +16 −13 Original line number Diff line number Diff line Loading @@ -1004,15 +1004,18 @@ static void biDiagonalReductionLeft_64( { /* TODO: For some reason, this is optimal. But why? why not ( 32 - 2 * MAGIC_HEADROOM_1 - norm_x_e0 + 1 ) , for example? */ #define MAGIC_HEADROOM_1 2 #define MAGIC_HEADROOM_2 ( sub( 16, shr( norm_x_e0, 2 ) ) ) #define MAGIC_HEADROOM_3 ( sub( 16, shr( norm_x_e0, 2 ) ) ) #define MAGIC_HEADROOM_4 ( sub( 16, shr( norm_x_e0, 2 ) ) ) //#define MAGIC_HEADROOM_2 ( sub( 16, shr( norm_x_e0, 2 ) ) ) //#define MAGIC_HEADROOM_3 ( sub( 16, shr( norm_x_e0, 2 ) ) ) //#define MAGIC_HEADROOM_4 ( sub( 16, shr( norm_x_e0, 2 ) ) ) #define MAGIC_HEADROOM_2 magic_headroom #define MAGIC_HEADROOM_3 magic_headroom #define MAGIC_HEADROOM_4 magic_headroom Word16 iCh, jCh; Word32 norm_x; Word16 norm_x_e; Word16 norm_x_e0; Word64 norm_64; Word16 magic_headroom; ( *g ) = 0; ( *g_e ) = 0; move32(); Loading @@ -1031,7 +1034,7 @@ static void biDiagonalReductionLeft_64( norm_64 = W_add( norm_64, W_mult0_32_32( tmp, tmp ) ); // q(norm)=2*q(sing)-2*H1 // exp(norm)=2*exp(sing)+2*H1 } norm_x_e = W_norm( norm_64 ); norm_x_e0 = W_norm( norm_64 ); magic_headroom = sub( 16, shr( norm_x_e, 2 ) ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); // q(norm_x)=32-exp(norm_x) exp(norm_x)=exp(norm)-32 } IF( norm_x ) Loading Loading @@ -1115,9 +1118,9 @@ static void biDiagonalReductionRight_64( Word16 iCh, jCh; Word32 norm_x; Word16 norm_x_e; Word16 norm_x_e0; Word64 norm_64; Word16 idx; Word16 magic_headroom; ( *g ) = 0; Loading @@ -1136,7 +1139,7 @@ static void biDiagonalReductionRight_64( norm_64 = W_add( norm_64, W_mult0_32_32( tmp, tmp ) ); // q(norm)=2*q(sing)-2*H1 // exp(norm)=2*exp(sing)+2*H1 } norm_x_e = W_norm( norm_64 ); norm_x_e0 = W_norm( norm_64 ); magic_headroom = sub( 16, shr( norm_x_e, 2 ) ); norm_x = W_extract_h( W_shl( norm_64, norm_x_e ) ); // q(norm_x)=32-exp(norm_x) exp(norm_x)=exp(norm)-32 move16(); Loading