From 9975eec712315c691ba9a8d4edfdfe461af839f7 Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Fri, 7 Mar 2025 15:04:57 +0100 Subject: [PATCH 01/15] first draft of the improvement. --- lib_enc/ivas_sns_enc_fx.c | 102 +++++++++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 2 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index e6038186e..75c111483 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -171,6 +171,103 @@ static Word16 sns_1st_cod_fx( return index; } +static Word16 sns_1st_cod_fx_q15( + const Word32 *sns_fx, /* i : vector to quantize */ + const Word16 L_frame, + const Word16 core, + Word32 *snsq_fx /* o : quantized sns Q16 */ +) +{ + Word16 index; + const Word16 split_len = M / 2; + move16(); + const Word16 *means; + const Word16 means_fix = 2; // Q15 + push_wmops("sns_1st_cod_fx_q15"); + move16(); + /* remove means */ + means = NULL; + SWITCH( L_frame ) + { + case L_FRAME16k: + means = &sns_1st_means_16k[core - 1][0]; + break; + case L_FRAME25_6k: + means = &sns_1st_means_25k6[core - 1][0]; + break; + case L_FRAME32k: + means = &sns_1st_means_32k[core - 1][0]; + break; + default: + assert( !"illegal frame length in sns_1st_cod" ); + } + FOR( Word16 i = 0; i < M; ++i ) + { + Word32 tmp = L_mult( means[i], means_fix ); // Q16 + snsq_fx[i] = L_add(sns_fx[i], L_negate( tmp ) ); + move32(); + } + + index = 0; + move16(); + FOR( Word16 split = 0; split < 2; ++split ) + { + const Word16 *cdbk_ptr; + Word16 j0, j1; + Word16 dist_split; + Word64 dist_min_fx; + const Word16 cdbk_fix = 8; // 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ) in Q15 + move16(); + const Word16 *const cdbk = &sns_1st_cdbk[split][core - 1][0]; + + j0 = imult1616( split, split_len ); + j1 = add( j0, split_len ); + + cdbk_ptr = cdbk; + dist_min_fx = 0x7fffffffffffffffull; + dist_split = 0; + FOR( Word16 i = 0; i < 32; ++i ) + { + Word64 dist_fx = 0; + move64(); + FOR( Word16 j = j0; j < j1; ++j ) + { + Word32 dist; + Word32 tmp_1 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 + move16(); + dist = ( L_add(snsq_fx[j], L_negate( tmp_1 ) ) ); + dist_fx = W_mac_32_32( dist_fx, dist, dist ); + } + + if ( LT_64( dist_fx, dist_min_fx ) ) + { + dist_min_fx= dist_fx; + dist_split =i ; + } + } + + /* set quantized vector */ + cdbk_ptr = &cdbk[imult1616( dist_split, split_len )]; + FOR( Word16 j = j0; j < j1; ++j ) + { + Word32 tmp_3 = L_mult( means[j], means_fix ); // Q16 + Word32 tmp_4 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 + snsq_fx[j] = L_add( tmp_4, tmp_3 ); // Q16 + move32(); + } + + /* for second split shift by five bits to store both indices as one 10 bit value */ + IF( EQ_16( split, 1 ) ) + { + dist_split = shl( dist_split, 5 ); + } + + index = add( index, dist_split ); + } + pop_wmops(); + return index; +} + /*------------------------------------------------------------------- * sns_2st_cod() * @@ -276,7 +373,7 @@ void sns_avq_cod_fx( Word16 indxt[256], nbits, nbt, nit; Word32 snsmid_q0_fx[M]; - index[0] = sns_1st_cod_fx( sns_fx, exp_sns, L_frame, core, sns_q_fx ); + index[0] = sns_1st_cod_fx_q15( sns_fx, L_frame, core, sns_q_fx ); move16(); nit = 1 + 2; move16(); @@ -303,7 +400,8 @@ void sns_avq_cod_fx( { index++; - index[0] = sns_1st_cod_fx( snsmid_fx, exp_snsmid, L_frame, core, snsmid_q_fx ); + index[0] = sns_1st_cod_fx_q15( snsmid_fx, L_frame, core, snsmid_q_fx ); +// index[0] = sns_1st_cod_fx( snsmid_fx, exp_snsmid, L_frame, core, snsmid_q_fx ); move16(); nit = 1 + 2; move16(); -- GitLab From 09a6bfaf999b961e0d50083e7d8a1c556359b889 Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Fri, 7 Mar 2025 15:34:59 +0100 Subject: [PATCH 02/15] addressed some code review comments in sns_1st_cod_fx_q15(). --- lib_enc/ivas_sns_enc_fx.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index 75c111483..2bb03a952 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -226,6 +226,8 @@ static Word16 sns_1st_cod_fx_q15( cdbk_ptr = cdbk; dist_min_fx = 0x7fffffffffffffffull; dist_split = 0; + move64(); + move16(); FOR( Word16 i = 0; i < 32; ++i ) { Word64 dist_fx = 0; @@ -234,12 +236,11 @@ static Word16 sns_1st_cod_fx_q15( { Word32 dist; Word32 tmp_1 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 - move16(); dist = ( L_add(snsq_fx[j], L_negate( tmp_1 ) ) ); dist_fx = W_mac_32_32( dist_fx, dist, dist ); } - if ( LT_64( dist_fx, dist_min_fx ) ) + IF ( LT_64( dist_fx, dist_min_fx ) ) { dist_min_fx= dist_fx; dist_split =i ; @@ -257,7 +258,7 @@ static Word16 sns_1st_cod_fx_q15( } /* for second split shift by five bits to store both indices as one 10 bit value */ - IF( EQ_16( split, 1 ) ) + if( EQ_16( split, 1 ) ) { dist_split = shl( dist_split, 5 ); } -- GitLab From d8dcbe89e4e4c1ccc8443c600ad384770391e699 Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Fri, 7 Mar 2025 18:42:08 +0100 Subject: [PATCH 03/15] formatting --- lib_enc/ivas_sns_enc_fx.c | 54 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index 2bb03a952..9395fc6d4 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -183,7 +183,7 @@ static Word16 sns_1st_cod_fx_q15( move16(); const Word16 *means; const Word16 means_fix = 2; // Q15 - push_wmops("sns_1st_cod_fx_q15"); + push_wmops( "sns_1st_cod_fx_q15" ); move16(); /* remove means */ means = NULL; @@ -204,7 +204,7 @@ static Word16 sns_1st_cod_fx_q15( FOR( Word16 i = 0; i < M; ++i ) { Word32 tmp = L_mult( means[i], means_fix ); // Q16 - snsq_fx[i] = L_add(sns_fx[i], L_negate( tmp ) ); + snsq_fx[i] = L_add( sns_fx[i], L_negate( tmp ) ); move32(); } @@ -214,8 +214,8 @@ static Word16 sns_1st_cod_fx_q15( { const Word16 *cdbk_ptr; Word16 j0, j1; - Word16 dist_split; - Word64 dist_min_fx; + Word16 dist_split; + Word64 dist_min_fx; const Word16 cdbk_fix = 8; // 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ) in Q15 move16(); const Word16 *const cdbk = &sns_1st_cdbk[split][core - 1][0]; @@ -226,26 +226,26 @@ static Word16 sns_1st_cod_fx_q15( cdbk_ptr = cdbk; dist_min_fx = 0x7fffffffffffffffull; dist_split = 0; - move64(); - move16(); - FOR( Word16 i = 0; i < 32; ++i ) - { - Word64 dist_fx = 0; - move64(); - FOR( Word16 j = j0; j < j1; ++j ) - { - Word32 dist; - Word32 tmp_1 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 - dist = ( L_add(snsq_fx[j], L_negate( tmp_1 ) ) ); - dist_fx = W_mac_32_32( dist_fx, dist, dist ); - } - - IF ( LT_64( dist_fx, dist_min_fx ) ) - { - dist_min_fx= dist_fx; - dist_split =i ; - } - } + move64(); + move16(); + FOR( Word16 i = 0; i < 32; ++i ) + { + Word64 dist_fx = 0; + move64(); + FOR( Word16 j = j0; j < j1; ++j ) + { + Word32 dist; + Word32 tmp_1 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 + dist = ( L_add( snsq_fx[j], L_negate( tmp_1 ) ) ); + dist_fx = W_mac_32_32( dist_fx, dist, dist ); + } + + IF( LT_64( dist_fx, dist_min_fx ) ) + { + dist_min_fx = dist_fx; + dist_split = i; + } + } /* set quantized vector */ cdbk_ptr = &cdbk[imult1616( dist_split, split_len )]; @@ -258,14 +258,14 @@ static Word16 sns_1st_cod_fx_q15( } /* for second split shift by five bits to store both indices as one 10 bit value */ - if( EQ_16( split, 1 ) ) + if ( EQ_16( split, 1 ) ) { dist_split = shl( dist_split, 5 ); } index = add( index, dist_split ); } - pop_wmops(); + pop_wmops(); return index; } @@ -402,7 +402,7 @@ void sns_avq_cod_fx( index++; index[0] = sns_1st_cod_fx_q15( snsmid_fx, L_frame, core, snsmid_q_fx ); -// index[0] = sns_1st_cod_fx( snsmid_fx, exp_snsmid, L_frame, core, snsmid_q_fx ); + // index[0] = sns_1st_cod_fx( snsmid_fx, exp_snsmid, L_frame, core, snsmid_q_fx ); move16(); nit = 1 + 2; move16(); -- GitLab From 18bf870b5406fd0ab15d1557dc93bc10e8df1ccb Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Mon, 10 Mar 2025 13:59:00 +0100 Subject: [PATCH 04/15] sns_1st_cod_fx_q15() implemented with a 32 bit multiplication. --- lib_enc/ivas_sns_enc_fx.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index 9395fc6d4..c52efe14f 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -215,7 +215,7 @@ static Word16 sns_1st_cod_fx_q15( const Word16 *cdbk_ptr; Word16 j0, j1; Word16 dist_split; - Word64 dist_min_fx; + Word32 dist_min_fx; const Word16 cdbk_fix = 8; // 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ) in Q15 move16(); const Word16 *const cdbk = &sns_1st_cdbk[split][core - 1][0]; @@ -224,23 +224,26 @@ static Word16 sns_1st_cod_fx_q15( j1 = add( j0, split_len ); cdbk_ptr = cdbk; - dist_min_fx = 0x7fffffffffffffffull; + dist_min_fx = MAXVAL_WORD32; dist_split = 0; - move64(); + move32(); move16(); FOR( Word16 i = 0; i < 32; ++i ) { - Word64 dist_fx = 0; - move64(); + Word32 dist_fx = 0; + move32(); FOR( Word16 j = j0; j < j1; ++j ) { Word32 dist; Word32 tmp_1 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 dist = ( L_add( snsq_fx[j], L_negate( tmp_1 ) ) ); - dist_fx = W_mac_32_32( dist_fx, dist, dist ); + dist = L_shr( dist, 4 ); // TODO: Magic shift. + dist = L_mult( extract_l( dist ), extract_l( dist ) ); + dist = L_shr( dist, 4 ); // TODO: Magic shift + dist_fx = L_add( dist_fx, dist ); } - IF( LT_64( dist_fx, dist_min_fx ) ) + IF( LT_32( dist_fx, dist_min_fx ) ) { dist_min_fx = dist_fx; dist_split = i; -- GitLab From 5eea1e167939ee65d40b0d1d9628b5fffcba3809 Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Mon, 10 Mar 2025 14:30:29 +0100 Subject: [PATCH 05/15] appl --- lib_enc/ivas_sns_enc_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index c52efe14f..98c8f56c4 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -237,9 +237,9 @@ static Word16 sns_1st_cod_fx_q15( Word32 dist; Word32 tmp_1 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 dist = ( L_add( snsq_fx[j], L_negate( tmp_1 ) ) ); - dist = L_shr( dist, 4 ); // TODO: Magic shift. + dist = L_shr( dist, 4 ); // TODO: Magic shift. dist = L_mult( extract_l( dist ), extract_l( dist ) ); - dist = L_shr( dist, 4 ); // TODO: Magic shift + dist = L_shr( dist, 4 ); // TODO: Magic shift dist_fx = L_add( dist_fx, dist ); } -- GitLab From 17cc7bd3bf313372b8009f59c1ee3cead1cc96b6 Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Tue, 11 Mar 2025 13:18:07 +0100 Subject: [PATCH 06/15] minor wmops improvement in sns_1st_cod_fx_q15. --- lib_enc/ivas_sns_enc_fx.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index b615e5abe..3ae1ea424 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -204,7 +204,7 @@ static Word16 sns_1st_cod_fx_q15( FOR( Word16 i = 0; i < M; ++i ) { Word32 tmp = L_mult( means[i], means_fix ); // Q16 - snsq_fx[i] = L_add( sns_fx[i], L_negate( tmp ) ); + snsq_fx[i] = L_sub( sns_fx[i], tmp ); // Q16 move32(); } @@ -234,9 +234,10 @@ static Word16 sns_1st_cod_fx_q15( move32(); FOR( Word16 j = j0; j < j1; ++j ) { + Word32 tmp; Word32 dist; - Word32 tmp_1 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 - dist = ( L_add( snsq_fx[j], L_negate( tmp_1 ) ) ); + tmp = L_mult( *cdbk_ptr++, cdbk_fix ); // Q16 + dist = L_sub( snsq_fx[j], tmp ); dist = L_shr( dist, 4 ); // TODO: Magic shift. dist = L_mult( extract_l( dist ), extract_l( dist ) ); dist = L_shr( dist, 4 ); // TODO: Magic shift @@ -254,8 +255,8 @@ static Word16 sns_1st_cod_fx_q15( cdbk_ptr = &cdbk[imult1616( dist_split, split_len )]; FOR( Word16 j = j0; j < j1; ++j ) { - Word32 tmp_3 = L_mult( means[j], means_fix ); // Q16 - Word32 tmp_4 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 + Word32 tmp_3 = L_mult( means[j], means_fix ); // Q16 + Word32 tmp_4 = L_mult( *cdbk_ptr++ , cdbk_fix ); // Q16 snsq_fx[j] = L_add( tmp_4, tmp_3 ); // Q16 move32(); } -- GitLab From 6d695dc9fe2671871299db840c95b1b32a326336 Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Wed, 12 Mar 2025 11:15:44 +0100 Subject: [PATCH 07/15] preparation for the cleanup. --- lib_enc/ivas_sns_enc_fx.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index 3ae1ea424..808de8cfd 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -204,7 +204,7 @@ static Word16 sns_1st_cod_fx_q15( FOR( Word16 i = 0; i < M; ++i ) { Word32 tmp = L_mult( means[i], means_fix ); // Q16 - snsq_fx[i] = L_sub( sns_fx[i], tmp ); // Q16 + snsq_fx[i] = L_sub( sns_fx[i], tmp ); // Q16 move32(); } @@ -236,11 +236,15 @@ static Word16 sns_1st_cod_fx_q15( { Word32 tmp; Word32 dist; + Word16 tmp2; + tmp = L_mult( *cdbk_ptr++, cdbk_fix ); // Q16 dist = L_sub( snsq_fx[j], tmp ); - dist = L_shr( dist, 4 ); // TODO: Magic shift. - dist = L_mult( extract_l( dist ), extract_l( dist ) ); - dist = L_shr( dist, 4 ); // TODO: Magic shift + dist = L_shr( dist, 4 ); // make sure that the next multiplication does not overflow + + tmp2 = extract_l( dist ); + dist = L_mult( tmp2, tmp2 ); + dist = L_shr( dist, 4 ); // make sure that the sum does not overflow dist_fx = L_add( dist_fx, dist ); } @@ -256,7 +260,7 @@ static Word16 sns_1st_cod_fx_q15( FOR( Word16 j = j0; j < j1; ++j ) { Word32 tmp_3 = L_mult( means[j], means_fix ); // Q16 - Word32 tmp_4 = L_mult( *cdbk_ptr++ , cdbk_fix ); // Q16 + Word32 tmp_4 = L_mult( *cdbk_ptr++, cdbk_fix ); // Q16 snsq_fx[j] = L_add( tmp_4, tmp_3 ); // Q16 move32(); } -- GitLab From d2f9e30ea388691d3fa7cd5a5965df84900ef8a0 Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Wed, 12 Mar 2025 11:53:54 +0100 Subject: [PATCH 08/15] merge candiate. --- lib_enc/ivas_sns_enc_fx.c | 376 +++++++++++++++++++------------------- 1 file changed, 184 insertions(+), 192 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index 808de8cfd..15768d392 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -60,221 +60,214 @@ static Word16 sns_1st_cod_fx( Word32 *snsq_fx /* o : quantized sns Q16 */ ) { - Word16 index, i; - const Word16 split_len = M / 2; - move16(); - const Word16 *means; - const Word16 means_fix = 2; // Q15 - move16(); - /* remove means */ - means = NULL; - SWITCH( L_frame ) + IF( exp_sns == Q15) { - case L_FRAME16k: - means = &sns_1st_means_16k[core - 1][0]; - break; - case L_FRAME25_6k: - means = &sns_1st_means_25k6[core - 1][0]; - break; - case L_FRAME32k: - means = &sns_1st_means_32k[core - 1][0]; - break; - default: - assert( !"illegal frame length in sns_1st_cod" ); - } - Word16 exp_snsq_buffer[M] = { 0 }, exp_snsq = 0; - move16(); - move16(); - FOR( i = 0; i < M; ++i ) - { - Word32 tmp = L_mult( means[i], means_fix ); // Q16 - exp_snsq_buffer[i] = 0; + Word16 index; + const Word16 split_len = M / 2; move16(); - snsq_fx[i] = BASOP_Util_Add_Mant32Exp( sns_fx[i], exp_sns, L_negate( tmp ), 15, &exp_snsq_buffer[i] ); - move32(); - } - FOR( i = 0; i < M; i++ ) - { - exp_snsq = s_max( exp_snsq_buffer[i], exp_snsq ); - } - FOR( i = 0; i < M; i++ ) - { - snsq_fx[i] = L_shr( snsq_fx[i], exp_snsq - exp_snsq_buffer[i] ); - move32(); - } - - index = 0; - move16(); - FOR( Word16 split = 0; split < 2; ++split ) - { - const Word16 *cdbk_ptr; - Word16 j0, j1, index_split; - Word32 dist_min_fx; - const Word16 cdbk_fix = 8; // 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ) in Q15 + const Word16 *means; + const Word16 means_fix = 2; // Q15 move16(); - const Word16 *const cdbk = &sns_1st_cdbk[split][core - 1][0]; - - j0 = imult1616( split, split_len ); - j1 = add( j0, split_len ); - - cdbk_ptr = cdbk; - dist_min_fx = MAXVAL_WORD32; - Word16 exp_dist_min = 31; - index_split = 0; - FOR( i = 0; i < 32; ++i ) + /* remove means */ + means = NULL; + SWITCH( L_frame ) + { + case L_FRAME16k: + means = &sns_1st_means_16k[core - 1][0]; + break; + case L_FRAME25_6k: + means = &sns_1st_means_25k6[core - 1][0]; + break; + case L_FRAME32k: + means = &sns_1st_means_32k[core - 1][0]; + break; + default: + assert( !"illegal frame length in sns_1st_cod" ); + } + FOR( Word16 i = 0; i < M; ++i ) { - Word32 dist_fx = 0; + Word32 tmp = L_mult( means[i], means_fix ); // Q16 + snsq_fx[i] = L_sub( sns_fx[i], tmp ); // Q16 move32(); - Word16 exp_dist = 0; + } + + index = 0; + move16(); + FOR( Word16 split = 0; split < 2; ++split ) + { + const Word16 *cdbk_ptr; + Word16 j0, j1; + Word16 dist_split; + Word32 dist_min_fx; + const Word16 cdbk_fix = 8; // 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ) in Q15 move16(); - FOR( Word16 j = j0; j < j1; ++j ) + const Word16 *const cdbk = &sns_1st_cdbk[split][core - 1][0]; + + j0 = imult1616( split, split_len ); + j1 = add( j0, split_len ); + + cdbk_ptr = cdbk; + dist_min_fx = MAXVAL_WORD32; + dist_split = 0; + move32(); + move16(); + FOR( Word16 i = 0; i < 32; ++i ) { - Word32 tmp_fx; - Word16 exp_tmp = 0; - move16(); - Word32 tmp_1 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 - tmp_fx = BASOP_Util_Add_Mant32Exp( snsq_fx[j], exp_snsq, L_negate( tmp_1 ), 15, &exp_tmp ); - Word32 tmp_2 = Mpy_32_32( tmp_fx, tmp_fx ); // exp_tmp*2 - dist_fx = BASOP_Util_Add_Mant32Exp( dist_fx, exp_dist, tmp_2, exp_tmp * 2, &exp_dist ); // exp_tmp*2 + Word32 dist_fx = 0; + move32(); + FOR( Word16 j = j0; j < j1; ++j ) + { + Word32 tmp; + Word32 dist; + Word16 tmp2; + + tmp = L_mult( *cdbk_ptr++, cdbk_fix ); // Q16 + dist = L_sub( snsq_fx[j], tmp ); + dist = L_shr( dist, 4 ); // make sure that the next multiplication does not overflow + + tmp2 = extract_l( dist ); + dist = L_mult( tmp2, tmp2 ); + dist = L_shr( dist, 4 ); // make sure that the sum does not overflow + dist_fx = L_add( dist_fx, dist ); + } + + IF( LT_32( dist_fx, dist_min_fx ) ) + { + dist_min_fx = dist_fx; + dist_split = i; + } } - - IF( EQ_16( BASOP_Util_Cmp_Mant32Exp( dist_fx, exp_dist, dist_min_fx, exp_dist_min ), -1 ) ) + + /* set quantized vector */ + cdbk_ptr = &cdbk[imult1616( dist_split, split_len )]; + FOR( Word16 j = j0; j < j1; ++j ) { - dist_min_fx = dist_fx; + Word32 tmp_3 = L_mult( means[j], means_fix ); // Q16 + Word32 tmp_4 = L_mult( *cdbk_ptr++, cdbk_fix ); // Q16 + snsq_fx[j] = L_add( tmp_4, tmp_3 ); // Q16 move32(); - exp_dist_min = exp_dist; - move16(); - index_split = i; - move16(); } + + /* for second split shift by five bits to store both indices as one 10 bit value */ + if ( EQ_16( split, 1 ) ) + { + dist_split = shl( dist_split, 5 ); + } + + index = add( index, dist_split ); } - - /* set quantized vector */ - cdbk_ptr = &cdbk[imult1616( index_split, split_len )]; - FOR( Word16 j = j0; j < j1; ++j ) + return index; + } ELSE { + Word16 index, i; + const Word16 split_len = M / 2; + move16(); + const Word16 *means; + const Word16 means_fix = 2; // Q15 + move16(); + /* remove means */ + means = NULL; + SWITCH( L_frame ) { - Word32 tmp_3 = L_mult( means[j], means_fix ); // Q16 - Word32 tmp_4 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 - snsq_fx[j] = L_add( tmp_4, tmp_3 ); // Q16 + case L_FRAME16k: + means = &sns_1st_means_16k[core - 1][0]; + break; + case L_FRAME25_6k: + means = &sns_1st_means_25k6[core - 1][0]; + break; + case L_FRAME32k: + means = &sns_1st_means_32k[core - 1][0]; + break; + default: + assert( !"illegal frame length in sns_1st_cod" ); + } + Word16 exp_snsq_buffer[M] = { 0 }, exp_snsq = 0; + move16(); + move16(); + FOR( i = 0; i < M; ++i ) + { + Word32 tmp = L_mult( means[i], means_fix ); // Q16 + exp_snsq_buffer[i] = 0; + move16(); + snsq_fx[i] = BASOP_Util_Add_Mant32Exp( sns_fx[i], exp_sns, L_negate( tmp ), 15, &exp_snsq_buffer[i] ); move32(); } - - /* for second split shift by five bits to store both indices as one 10 bit value */ - IF( EQ_16( split, 1 ) ) + FOR( i = 0; i < M; i++ ) { - index_split = shl( index_split, 5 ); + exp_snsq = s_max( exp_snsq_buffer[i], exp_snsq ); } - - index = add( index, index_split ); - } - - return index; -} - -static Word16 sns_1st_cod_fx_q15( - const Word32 *sns_fx, /* i : vector to quantize */ - const Word16 L_frame, - const Word16 core, - Word32 *snsq_fx /* o : quantized sns Q16 */ -) -{ - Word16 index; - const Word16 split_len = M / 2; - move16(); - const Word16 *means; - const Word16 means_fix = 2; // Q15 - push_wmops( "sns_1st_cod_fx_q15" ); - move16(); - /* remove means */ - means = NULL; - SWITCH( L_frame ) - { - case L_FRAME16k: - means = &sns_1st_means_16k[core - 1][0]; - break; - case L_FRAME25_6k: - means = &sns_1st_means_25k6[core - 1][0]; - break; - case L_FRAME32k: - means = &sns_1st_means_32k[core - 1][0]; - break; - default: - assert( !"illegal frame length in sns_1st_cod" ); - } - FOR( Word16 i = 0; i < M; ++i ) - { - Word32 tmp = L_mult( means[i], means_fix ); // Q16 - snsq_fx[i] = L_sub( sns_fx[i], tmp ); // Q16 - move32(); - } - - index = 0; - move16(); - FOR( Word16 split = 0; split < 2; ++split ) - { - const Word16 *cdbk_ptr; - Word16 j0, j1; - Word16 dist_split; - Word32 dist_min_fx; - const Word16 cdbk_fix = 8; // 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ) in Q15 - move16(); - const Word16 *const cdbk = &sns_1st_cdbk[split][core - 1][0]; - - j0 = imult1616( split, split_len ); - j1 = add( j0, split_len ); - - cdbk_ptr = cdbk; - dist_min_fx = MAXVAL_WORD32; - dist_split = 0; - move32(); - move16(); - FOR( Word16 i = 0; i < 32; ++i ) + FOR( i = 0; i < M; i++ ) { - Word32 dist_fx = 0; + snsq_fx[i] = L_shr( snsq_fx[i], exp_snsq - exp_snsq_buffer[i] ); move32(); + } + + index = 0; + move16(); + FOR( Word16 split = 0; split < 2; ++split ) + { + const Word16 *cdbk_ptr; + Word16 j0, j1, index_split; + Word32 dist_min_fx; + const Word16 cdbk_fix = 8; // 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ) in Q15 + move16(); + const Word16 *const cdbk = &sns_1st_cdbk[split][core - 1][0]; + + j0 = imult1616( split, split_len ); + j1 = add( j0, split_len ); + + cdbk_ptr = cdbk; + dist_min_fx = MAXVAL_WORD32; + Word16 exp_dist_min = 31; + index_split = 0; + FOR( i = 0; i < 32; ++i ) + { + Word32 dist_fx = 0; + move32(); + Word16 exp_dist = 0; + move16(); + FOR( Word16 j = j0; j < j1; ++j ) + { + Word32 tmp_fx; + Word16 exp_tmp = 0; + move16(); + Word32 tmp_1 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 + tmp_fx = BASOP_Util_Add_Mant32Exp( snsq_fx[j], exp_snsq, L_negate( tmp_1 ), 15, &exp_tmp ); + Word32 tmp_2 = Mpy_32_32( tmp_fx, tmp_fx ); // exp_tmp*2 + dist_fx = BASOP_Util_Add_Mant32Exp( dist_fx, exp_dist, tmp_2, exp_tmp * 2, &exp_dist ); // exp_tmp*2 + } + + IF( EQ_16( BASOP_Util_Cmp_Mant32Exp( dist_fx, exp_dist, dist_min_fx, exp_dist_min ), -1 ) ) + { + dist_min_fx = dist_fx; + move32(); + exp_dist_min = exp_dist; + move16(); + index_split = i; + move16(); + } + } + + /* set quantized vector */ + cdbk_ptr = &cdbk[imult1616( index_split, split_len )]; FOR( Word16 j = j0; j < j1; ++j ) { - Word32 tmp; - Word32 dist; - Word16 tmp2; - - tmp = L_mult( *cdbk_ptr++, cdbk_fix ); // Q16 - dist = L_sub( snsq_fx[j], tmp ); - dist = L_shr( dist, 4 ); // make sure that the next multiplication does not overflow - - tmp2 = extract_l( dist ); - dist = L_mult( tmp2, tmp2 ); - dist = L_shr( dist, 4 ); // make sure that the sum does not overflow - dist_fx = L_add( dist_fx, dist ); + Word32 tmp_3 = L_mult( means[j], means_fix ); // Q16 + Word32 tmp_4 = L_mult( ( *cdbk_ptr++ ), cdbk_fix ); // Q16 + snsq_fx[j] = L_add( tmp_4, tmp_3 ); // Q16 + move32(); } - - IF( LT_32( dist_fx, dist_min_fx ) ) + + /* for second split shift by five bits to store both indices as one 10 bit value */ + IF( EQ_16( split, 1 ) ) { - dist_min_fx = dist_fx; - dist_split = i; + index_split = shl( index_split, 5 ); } + + index = add( index, index_split ); } - - /* set quantized vector */ - cdbk_ptr = &cdbk[imult1616( dist_split, split_len )]; - FOR( Word16 j = j0; j < j1; ++j ) - { - Word32 tmp_3 = L_mult( means[j], means_fix ); // Q16 - Word32 tmp_4 = L_mult( *cdbk_ptr++, cdbk_fix ); // Q16 - snsq_fx[j] = L_add( tmp_4, tmp_3 ); // Q16 - move32(); - } - - /* for second split shift by five bits to store both indices as one 10 bit value */ - if ( EQ_16( split, 1 ) ) - { - dist_split = shl( dist_split, 5 ); - } - - index = add( index, dist_split ); + + return index; } - pop_wmops(); - return index; } /*------------------------------------------------------------------- @@ -382,7 +375,7 @@ void sns_avq_cod_fx( Word16 indxt[256], nbits, nbt, nit; Word32 snsmid_q0_fx[M]; - index[0] = sns_1st_cod_fx_q15( sns_fx, L_frame, core, sns_q_fx ); + index[0] = sns_1st_cod_fx( sns_fx, exp_sns, L_frame, core, sns_q_fx ); move16(); nit = 1 + 2; move16(); @@ -409,8 +402,7 @@ void sns_avq_cod_fx( { index++; - index[0] = sns_1st_cod_fx_q15( snsmid_fx, L_frame, core, snsmid_q_fx ); - // index[0] = sns_1st_cod_fx( snsmid_fx, exp_snsmid, L_frame, core, snsmid_q_fx ); + index[0] = sns_1st_cod_fx( snsmid_fx, exp_snsmid, L_frame, core, snsmid_q_fx ); move16(); nit = 1 + 2; move16(); -- GitLab From 662acc0a60da5e09d9250445e76ef9fe3be8a655 Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Wed, 12 Mar 2025 12:01:43 +0100 Subject: [PATCH 09/15] applied the clang patch. --- lib_enc/ivas_sns_enc_fx.c | 48 ++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index 0fccc8ec8..a7435fb0d 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -59,7 +59,7 @@ static Word16 sns_1st_cod_fx( Word32 *snsq_fx /* o : quantized sns Q16 */ ) { - IF( exp_sns == Q15) + IF( exp_sns == Q15 ) { Word16 index; const Word16 split_len = M / 2; @@ -86,10 +86,10 @@ static Word16 sns_1st_cod_fx( FOR( Word16 i = 0; i < M; ++i ) { Word32 tmp = L_mult( means[i], means_fix ); // Q16 - snsq_fx[i] = L_sub( sns_fx[i], tmp ); // Q16 + snsq_fx[i] = L_sub( sns_fx[i], tmp ); // Q16 move32(); } - + index = 0; move16(); FOR( Word16 split = 0; split < 2; ++split ) @@ -101,10 +101,10 @@ static Word16 sns_1st_cod_fx( const Word16 cdbk_fix = 8; // 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ) in Q15 move16(); const Word16 *const cdbk = &sns_1st_cdbk[split][core - 1][0]; - + j0 = imult1616( split, split_len ); j1 = add( j0, split_len ); - + cdbk_ptr = cdbk; dist_min_fx = MAXVAL_WORD32; dist_split = 0; @@ -119,44 +119,46 @@ static Word16 sns_1st_cod_fx( Word32 tmp; Word32 dist; Word16 tmp2; - + tmp = L_mult( *cdbk_ptr++, cdbk_fix ); // Q16 - dist = L_sub( snsq_fx[j], tmp ); + dist = L_sub( snsq_fx[j], tmp ); dist = L_shr( dist, 4 ); // make sure that the next multiplication does not overflow - + tmp2 = extract_l( dist ); dist = L_mult( tmp2, tmp2 ); dist = L_shr( dist, 4 ); // make sure that the sum does not overflow dist_fx = L_add( dist_fx, dist ); } - + IF( LT_32( dist_fx, dist_min_fx ) ) { dist_min_fx = dist_fx; dist_split = i; } } - + /* set quantized vector */ cdbk_ptr = &cdbk[imult1616( dist_split, split_len )]; FOR( Word16 j = j0; j < j1; ++j ) { - Word32 tmp_3 = L_mult( means[j], means_fix ); // Q16 + Word32 tmp_3 = L_mult( means[j], means_fix ); // Q16 Word32 tmp_4 = L_mult( *cdbk_ptr++, cdbk_fix ); // Q16 - snsq_fx[j] = L_add( tmp_4, tmp_3 ); // Q16 + snsq_fx[j] = L_add( tmp_4, tmp_3 ); // Q16 move32(); } - + /* for second split shift by five bits to store both indices as one 10 bit value */ if ( EQ_16( split, 1 ) ) { dist_split = shl( dist_split, 5 ); } - + index = add( index, dist_split ); } return index; - } ELSE { + } + ELSE + { Word16 index, i; const Word16 split_len = M / 2; move16(); @@ -199,7 +201,7 @@ static Word16 sns_1st_cod_fx( snsq_fx[i] = L_shr( snsq_fx[i], exp_snsq - exp_snsq_buffer[i] ); move32(); } - + index = 0; move16(); FOR( Word16 split = 0; split < 2; ++split ) @@ -210,10 +212,10 @@ static Word16 sns_1st_cod_fx( const Word16 cdbk_fix = 8; // 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ) in Q15 move16(); const Word16 *const cdbk = &sns_1st_cdbk[split][core - 1][0]; - + j0 = imult1616( split, split_len ); j1 = add( j0, split_len ); - + cdbk_ptr = cdbk; dist_min_fx = MAXVAL_WORD32; Word16 exp_dist_min = 31; @@ -234,7 +236,7 @@ static Word16 sns_1st_cod_fx( Word32 tmp_2 = Mpy_32_32( tmp_fx, tmp_fx ); // exp_tmp*2 dist_fx = BASOP_Util_Add_Mant32Exp( dist_fx, exp_dist, tmp_2, exp_tmp * 2, &exp_dist ); // exp_tmp*2 } - + IF( EQ_16( BASOP_Util_Cmp_Mant32Exp( dist_fx, exp_dist, dist_min_fx, exp_dist_min ), -1 ) ) { dist_min_fx = dist_fx; @@ -245,7 +247,7 @@ static Word16 sns_1st_cod_fx( move16(); } } - + /* set quantized vector */ cdbk_ptr = &cdbk[imult1616( index_split, split_len )]; FOR( Word16 j = j0; j < j1; ++j ) @@ -255,16 +257,16 @@ static Word16 sns_1st_cod_fx( snsq_fx[j] = L_add( tmp_4, tmp_3 ); // Q16 move32(); } - + /* for second split shift by five bits to store both indices as one 10 bit value */ IF( EQ_16( split, 1 ) ) { index_split = shl( index_split, 5 ); } - + index = add( index, index_split ); } - + return index; } } -- GitLab From d8e83fdebe3801b56625147534c4faa07444a521 Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Mon, 17 Mar 2025 09:16:55 +0100 Subject: [PATCH 10/15] added some comments for an easier review. --- lib_enc/ivas_sns_enc_fx.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index 7b1aa46de..4b171bdf0 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -59,7 +59,7 @@ static Word16 sns_1st_cod_fx( Word32 *snsq_fx /* o : quantized sns Q16 */ ) { - IF( exp_sns == Q15 ) + IF( exp_sns == 15 ) { Word16 index; const Word16 split_len = M / 2; @@ -72,20 +72,20 @@ static Word16 sns_1st_cod_fx( SWITCH( L_frame ) { case L_FRAME16k: - means = &sns_1st_means_16k[core - 1][0]; + means = &sns_1st_means_16k[core - 1][0]; // Q14 break; case L_FRAME25_6k: - means = &sns_1st_means_25k6[core - 1][0]; + means = &sns_1st_means_25k6[core - 1][0]; // Q14 break; case L_FRAME32k: - means = &sns_1st_means_32k[core - 1][0]; + means = &sns_1st_means_32k[core - 1][0]; // Q14 break; default: assert( !"illegal frame length in sns_1st_cod" ); } FOR( Word16 i = 0; i < M; ++i ) { - Word32 tmp = L_mult( means[i], means_fix ); // Q16 + Word32 tmp = L_mult( means[i], means_fix ); // Q14->Q16 snsq_fx[i] = L_sub( sns_fx[i], tmp ); // Q16 move32(); } @@ -100,7 +100,7 @@ static Word16 sns_1st_cod_fx( Word32 dist_min_fx; const Word16 cdbk_fix = 8; // 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ) in Q15 move16(); - const Word16 *const cdbk = &sns_1st_cdbk[split][core - 1][0]; + const Word16 *const cdbk = &sns_1st_cdbk[split][core - 1][0]; // Q12 j0 = imult1616( split, split_len ); j1 = add( j0, split_len ); @@ -114,14 +114,14 @@ static Word16 sns_1st_cod_fx( { Word32 dist_fx = 0; move32(); - FOR( Word16 j = j0; j < j1; ++j ) + FOR( Word16 j = j0; j < j1; ++j ) // j1-j0=split_len. split_len=M/2. M=16 { Word32 tmp; Word32 dist; Word16 tmp2; - tmp = L_mult( *cdbk_ptr++, cdbk_fix ); // Q16 - dist = L_sub( snsq_fx[j], tmp ); + tmp = L_mult( *cdbk_ptr++, cdbk_fix ); // Q12-Q16 + dist = L_sub( snsq_fx[j], tmp ); // Q16 dist = L_shr( dist, 4 ); // make sure that the next multiplication does not overflow tmp2 = extract_l( dist ); @@ -781,7 +781,7 @@ Word16 quantize_sns_fx( IF( zero_side_flag[k] ) { set32_fx( snsQ_fx, 0, M ); - CONTINUE; + continue; } nStages = SNS_MSVQ_NSTAGES_SIDE; -- GitLab From 86fa164c1590e85947839ecac8f1f458af4255b6 Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Mon, 17 Mar 2025 09:19:06 +0100 Subject: [PATCH 11/15] applied the formatting patch. --- lib_enc/ivas_sns_enc_fx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index 4b171bdf0..e981c338f 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -121,8 +121,8 @@ static Word16 sns_1st_cod_fx( Word16 tmp2; tmp = L_mult( *cdbk_ptr++, cdbk_fix ); // Q12-Q16 - dist = L_sub( snsq_fx[j], tmp ); // Q16 - dist = L_shr( dist, 4 ); // make sure that the next multiplication does not overflow + dist = L_sub( snsq_fx[j], tmp ); // Q16 + dist = L_shr( dist, 4 ); // make sure that the next multiplication does not overflow tmp2 = extract_l( dist ); dist = L_mult( tmp2, tmp2 ); -- GitLab From 09de1b628265221b838c5565322dde8fed0e6a70 Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Mon, 17 Mar 2025 10:59:04 +0100 Subject: [PATCH 12/15] updated the style to the standard of the rest of the code. the magic shifts have been explained. total 150.00 603.963 644.322 631.525 --- lib_enc/ivas_sns_enc_fx.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index e981c338f..9396c4ede 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -59,7 +59,7 @@ static Word16 sns_1st_cod_fx( Word32 *snsq_fx /* o : quantized sns Q16 */ ) { - IF( exp_sns == 15 ) + IF( exp_sns == Q15 ) { Word16 index; const Word16 split_len = M / 2; @@ -118,15 +118,12 @@ static Word16 sns_1st_cod_fx( { Word32 tmp; Word32 dist; - Word16 tmp2; - tmp = L_mult( *cdbk_ptr++, cdbk_fix ); // Q12-Q16 + tmp = L_mult( *cdbk_ptr++, cdbk_fix ); // Q12->Q16 dist = L_sub( snsq_fx[j], tmp ); // Q16 - dist = L_shr( dist, 4 ); // make sure that the next multiplication does not overflow - - tmp2 = extract_l( dist ); - dist = L_mult( tmp2, tmp2 ); - dist = L_shr( dist, 4 ); // make sure that the sum does not overflow + dist = L_shl( dist, 11 ); // cdbk_ptr is a 16 bit LUT with 3.12 values, used as 3.16. assumption: snsq_fx has the same representation. thus, the subtraction results are in 4.16, which leaves 11 bit headroom. + dist = Mpy_32_32( dist, dist ); + dist = L_shr( dist, 3 ); // make sure that the sum of 8 values does not overflow dist_fx = L_add( dist_fx, dist ); } -- GitLab From 2fcbd3b31d85c9d7851d7af55adf98fd8361097f Mon Sep 17 00:00:00 2001 From: Thomas Dettbarn Date: Mon, 17 Mar 2025 11:11:27 +0100 Subject: [PATCH 13/15] applied the clang formatting patch. --- lib_enc/ivas_sns_enc_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index 9396c4ede..d9dea23b0 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -121,7 +121,7 @@ static Word16 sns_1st_cod_fx( tmp = L_mult( *cdbk_ptr++, cdbk_fix ); // Q12->Q16 dist = L_sub( snsq_fx[j], tmp ); // Q16 - dist = L_shl( dist, 11 ); // cdbk_ptr is a 16 bit LUT with 3.12 values, used as 3.16. assumption: snsq_fx has the same representation. thus, the subtraction results are in 4.16, which leaves 11 bit headroom. + dist = L_shl( dist, 11 ); // cdbk_ptr is a 16 bit LUT with 3.12 values, used as 3.16. assumption: snsq_fx has the same representation. thus, the subtraction results are in 4.16, which leaves 11 bit headroom. dist = Mpy_32_32( dist, dist ); dist = L_shr( dist, 3 ); // make sure that the sum of 8 values does not overflow dist_fx = L_add( dist_fx, dist ); -- GitLab From 241044c58c76d4a8aeaed13211b6cbfe95594ddb Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Wed, 19 Mar 2025 11:15:50 +0100 Subject: [PATCH 14/15] add missing move16(), move32(); don't change variable name to stay closer to float and the other variant --- lib_enc/ivas_sns_enc_fx.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index 7b1aa46de..2271b6ac6 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -96,7 +96,7 @@ static Word16 sns_1st_cod_fx( { const Word16 *cdbk_ptr; Word16 j0, j1; - Word16 dist_split; + Word16 index_split; Word32 dist_min_fx; const Word16 cdbk_fix = 8; // 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ) in Q15 move16(); @@ -107,7 +107,7 @@ static Word16 sns_1st_cod_fx( cdbk_ptr = cdbk; dist_min_fx = MAXVAL_WORD32; - dist_split = 0; + index_split = 0; move32(); move16(); FOR( Word16 i = 0; i < 32; ++i ) @@ -133,12 +133,14 @@ static Word16 sns_1st_cod_fx( IF( LT_32( dist_fx, dist_min_fx ) ) { dist_min_fx = dist_fx; - dist_split = i; + move32(); + index_split = i; + move16(); } } /* set quantized vector */ - cdbk_ptr = &cdbk[imult1616( dist_split, split_len )]; + cdbk_ptr = &cdbk[imult1616( index_split, split_len )]; FOR( Word16 j = j0; j < j1; ++j ) { Word32 tmp_3 = L_mult( means[j], means_fix ); // Q16 @@ -150,10 +152,10 @@ static Word16 sns_1st_cod_fx( /* for second split shift by five bits to store both indices as one 10 bit value */ if ( EQ_16( split, 1 ) ) { - dist_split = shl( dist_split, 5 ); + index_split = shl( index_split, 5 ); } - index = add( index, dist_split ); + index = add( index, index_split ); } return index; } -- GitLab From 67ba34472b700e514fd795ef6f95487b4f87182a Mon Sep 17 00:00:00 2001 From: Markus Multrus Date: Wed, 19 Mar 2025 11:18:10 +0100 Subject: [PATCH 15/15] continue using CONTINUE instead of continue --- lib_enc/ivas_sns_enc_fx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_enc/ivas_sns_enc_fx.c b/lib_enc/ivas_sns_enc_fx.c index 88c2a5b7c..22cd98cad 100644 --- a/lib_enc/ivas_sns_enc_fx.c +++ b/lib_enc/ivas_sns_enc_fx.c @@ -780,7 +780,7 @@ Word16 quantize_sns_fx( IF( zero_side_flag[k] ) { set32_fx( snsQ_fx, 0, M ); - continue; + CONTINUE; } nStages = SNS_MSVQ_NSTAGES_SIDE; -- GitLab