Loading lib_com/enh64.c +1 −0 Original line number Diff line number Diff line Loading @@ -1063,6 +1063,7 @@ Word64 W_msu_16_16( Word64 L64_var1, Word16 var2, Word16 var3 ) return L64_var_out; } /* Below BASOP is not part of STL 2023 library, might be proposed in next update */ /*________________________________________________________________________________________________ | | | Function Name : W_mac_32_32 | Loading lib_com/enh64.h +1 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ Word64 W_msu0_16_16( Word64 L64_acc, Word16 var1, Word16 var2 ); Word64 W_mult_16_16( Word16 var1, Word16 var2 ); Word64 W_mac_16_16( Word64 L64_acc, Word16 var1, Word16 var2 ); Word64 W_msu_16_16( Word64 L64_acc, Word16 var1, Word16 var2 ); /* BASOP W_mac_32_32 is not part of STL 2023 library, might be proposed in next update */ Word64 W_mac_32_32( Word64 L64_acc, Word32 var1, Word32 var2 ); Word64 W_deposit32_l( Word32 L_var1 ); Loading lib_com/fd_cng_com_fx.c +16 −0 Original line number Diff line number Diff line Loading @@ -1360,8 +1360,12 @@ void minimum_statistics_fx( scalar16 = shl( scalar16, s3 ); scalar16 = s_max( scalar16, MSALPHACORMAX ); #ifdef IVAS_ENH32_CADENCE_CHANGES hFdCngCom->msAlphaCor[cnt] = Madd_32_16( L_mult( scalar16, msAlphaCorAlpha2 ), hFdCngCom->msAlphaCor[cnt], msAlphaCorAlpha ); #else hFdCngCom->msAlphaCor[cnt] = L_add( Mpy_32_16_1( hFdCngCom->msAlphaCor[cnt], msAlphaCorAlpha ), L_mult( scalar16, msAlphaCorAlpha2 ) ); #endif move32(); } Loading Loading @@ -1447,8 +1451,12 @@ void minimum_statistics_fx( } /* Compute the PSD (smoothed periodogram) in each band */ #ifdef IVAS_ENH32_CADENCE_CHANGES msPsd[j] = round_fx( Madd_32_16( Mpy_32_16_1( msAlpha[j], msPsd[j] ), L_sub( 2147483647l /*1.0 Q31*/, msAlpha[j] ), msPeriodog[j] ) ); #else msPsd[j] = round_fx( L_add( Mpy_32_16_1( msAlpha[j], msPsd[j] ), Mpy_32_16_1( L_sub( 2147483647l /*1.0 Q31*/, msAlpha[j] ), msPeriodog[j] ) ) ); #endif move16(); } msPsdSum[cnt] = dotp_s_fx( msPsd + start, psize + start, current_len, CNG_HS ); Loading Loading @@ -1527,13 +1535,21 @@ void minimum_statistics_fx( /* Compute bias correction Bmin */ tmp0 = Mpy_32_16_1( scalar, QeqInv ); #ifdef IVAS_ENH32_CADENCE_CHANGES tmp1 = L_msu( 1073741824l /*0.5 Q31*/, msM_win, QeqInv ); #else tmp1 = L_sub( 1073741824l /*0.5 Q31*/, L_mult( msM_win, QeqInv ) ); #endif tmp16 = BASOP_Util_Divide3232_uu_1616_Scale( tmp0, tmp1, &s ); msBminWin[j] = L_add( 134217728l /*1.0 Q27*/, L_shl( L_deposit_h( tmp16 ), add( s, 7 - 4 ) ) ); move32(); tmp0 = Mpy_32_16_1( scalar2, QeqInv ); #ifdef IVAS_ENH32_CADENCE_CHANGES tmp1 = L_msu( 1073741824l /*0.5 Q31*/, msM_subwin, QeqInv ); #else tmp1 = L_sub( 1073741824l /*0.5 Q31*/, L_mult( msM_subwin, QeqInv ) ); #endif tmp16 = BASOP_Util_Divide3232_uu_1616_Scale( tmp0, tmp1, &s ); msBminSubWin[j] = L_add( 134217728l /*1.0 Q27*/, L_shl( L_deposit_h( tmp16 ), s ) ); move32(); Loading lib_com/modif_fs.c +48 −0 Original line number Diff line number Diff line Loading @@ -537,6 +537,53 @@ void Interpolate_allpass_steep_32( int16_t n, k; Word32 temp_fx[ALLPASSSECTIONS_STEEP - 1]; #ifdef IVAS_ENH32_CADENCE_CHANGES /* upper allpass filter chain */ FOR( k = 0; k < N; k++ ) { temp_fx[0] = Madd_32_16( mem_fx[0], in_fx[k], AP2_STEEP_FX[0] ); move32(); mem_fx[0] = Msub_32_16( in_fx[k], temp_fx[0], AP2_STEEP_FX[0] ); move32(); /* for better performance, unroll this loop */ FOR( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) { temp_fx[n] = Madd_32_16( mem_fx[n], temp_fx[n - 1], AP2_STEEP_FX[n] ); move32(); mem_fx[n] = Msub_32_16( temp_fx[n - 1], temp_fx[n], AP2_STEEP_FX[n] ); move32(); } out_fx[2 * k + 1] = Madd_32_16( mem_fx[ALLPASSSECTIONS_STEEP - 1], temp_fx[ALLPASSSECTIONS_STEEP - 2], AP2_STEEP_FX[ALLPASSSECTIONS_STEEP - 1] ); move32(); mem_fx[ALLPASSSECTIONS_STEEP - 1] = Msub_32_16( temp_fx[ALLPASSSECTIONS_STEEP - 2], out_fx[2 * k + 1], AP2_STEEP_FX[ALLPASSSECTIONS_STEEP - 1] ); move32(); } /* lower allpass filter chain */ FOR( k = 0; k < N; k++ ) { temp_fx[0] = Madd_32_16( mem_fx[ALLPASSSECTIONS_STEEP], in_fx[k], AP1_STEEP_FX[0] ); move32(); mem_fx[ALLPASSSECTIONS_STEEP] = Msub_32_16( in_fx[k], temp_fx[0], AP1_STEEP_FX[0] ); move32(); /* for better performance, unroll this loop */ FOR( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) { temp_fx[n] = Madd_32_16( mem_fx[ALLPASSSECTIONS_STEEP + n], temp_fx[n - 1], AP1_STEEP_FX[n] ); move32(); mem_fx[ALLPASSSECTIONS_STEEP + n] = Msub_32_16( temp_fx[n - 1], temp_fx[n], AP1_STEEP_FX[n] ); move32(); } out_fx[2 * k] = Madd_32_16( mem_fx[2 * ALLPASSSECTIONS_STEEP - 1], temp_fx[ALLPASSSECTIONS_STEEP - 2], AP1_STEEP_FX[ALLPASSSECTIONS_STEEP - 1] ); move32(); mem_fx[2 * ALLPASSSECTIONS_STEEP - 1] = Msub_32_16( temp_fx[ALLPASSSECTIONS_STEEP - 2], out_fx[2 * k], AP1_STEEP_FX[ALLPASSSECTIONS_STEEP - 1] ); move32(); } #else /* upper allpass filter chain */ FOR( k = 0; k < N; k++ ) { Loading Loading @@ -582,6 +629,7 @@ void Interpolate_allpass_steep_32( mem_fx[2 * ALLPASSSECTIONS_STEEP - 1] = L_sub( temp_fx[ALLPASSSECTIONS_STEEP - 2], Mpy_32_16_1( out_fx[2 * k], AP1_STEEP_FX[ALLPASSSECTIONS_STEEP - 1] ) ); move32(); } #endif return; } Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ #define FIX_785_REMOVE_DEAD_CODE /* VA: issue 785: remove dead code */ #define FIX_852_FIX_HANDLE_DEREF /* VA: issue 852: Fix missing handle dereferencing of hIsmMetadaData in ivas_ism_metadata_close() */ #define FIX_901_PARAMMC_DEAD_CODE /* FhG: issue 901: remove dead ParamMC code */ #define IVAS_ENH32_CADENCE_CHANGES /* #################### End BE switches ################################## */ Loading Loading
lib_com/enh64.c +1 −0 Original line number Diff line number Diff line Loading @@ -1063,6 +1063,7 @@ Word64 W_msu_16_16( Word64 L64_var1, Word16 var2, Word16 var3 ) return L64_var_out; } /* Below BASOP is not part of STL 2023 library, might be proposed in next update */ /*________________________________________________________________________________________________ | | | Function Name : W_mac_32_32 | Loading
lib_com/enh64.h +1 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ Word64 W_msu0_16_16( Word64 L64_acc, Word16 var1, Word16 var2 ); Word64 W_mult_16_16( Word16 var1, Word16 var2 ); Word64 W_mac_16_16( Word64 L64_acc, Word16 var1, Word16 var2 ); Word64 W_msu_16_16( Word64 L64_acc, Word16 var1, Word16 var2 ); /* BASOP W_mac_32_32 is not part of STL 2023 library, might be proposed in next update */ Word64 W_mac_32_32( Word64 L64_acc, Word32 var1, Word32 var2 ); Word64 W_deposit32_l( Word32 L_var1 ); Loading
lib_com/fd_cng_com_fx.c +16 −0 Original line number Diff line number Diff line Loading @@ -1360,8 +1360,12 @@ void minimum_statistics_fx( scalar16 = shl( scalar16, s3 ); scalar16 = s_max( scalar16, MSALPHACORMAX ); #ifdef IVAS_ENH32_CADENCE_CHANGES hFdCngCom->msAlphaCor[cnt] = Madd_32_16( L_mult( scalar16, msAlphaCorAlpha2 ), hFdCngCom->msAlphaCor[cnt], msAlphaCorAlpha ); #else hFdCngCom->msAlphaCor[cnt] = L_add( Mpy_32_16_1( hFdCngCom->msAlphaCor[cnt], msAlphaCorAlpha ), L_mult( scalar16, msAlphaCorAlpha2 ) ); #endif move32(); } Loading Loading @@ -1447,8 +1451,12 @@ void minimum_statistics_fx( } /* Compute the PSD (smoothed periodogram) in each band */ #ifdef IVAS_ENH32_CADENCE_CHANGES msPsd[j] = round_fx( Madd_32_16( Mpy_32_16_1( msAlpha[j], msPsd[j] ), L_sub( 2147483647l /*1.0 Q31*/, msAlpha[j] ), msPeriodog[j] ) ); #else msPsd[j] = round_fx( L_add( Mpy_32_16_1( msAlpha[j], msPsd[j] ), Mpy_32_16_1( L_sub( 2147483647l /*1.0 Q31*/, msAlpha[j] ), msPeriodog[j] ) ) ); #endif move16(); } msPsdSum[cnt] = dotp_s_fx( msPsd + start, psize + start, current_len, CNG_HS ); Loading Loading @@ -1527,13 +1535,21 @@ void minimum_statistics_fx( /* Compute bias correction Bmin */ tmp0 = Mpy_32_16_1( scalar, QeqInv ); #ifdef IVAS_ENH32_CADENCE_CHANGES tmp1 = L_msu( 1073741824l /*0.5 Q31*/, msM_win, QeqInv ); #else tmp1 = L_sub( 1073741824l /*0.5 Q31*/, L_mult( msM_win, QeqInv ) ); #endif tmp16 = BASOP_Util_Divide3232_uu_1616_Scale( tmp0, tmp1, &s ); msBminWin[j] = L_add( 134217728l /*1.0 Q27*/, L_shl( L_deposit_h( tmp16 ), add( s, 7 - 4 ) ) ); move32(); tmp0 = Mpy_32_16_1( scalar2, QeqInv ); #ifdef IVAS_ENH32_CADENCE_CHANGES tmp1 = L_msu( 1073741824l /*0.5 Q31*/, msM_subwin, QeqInv ); #else tmp1 = L_sub( 1073741824l /*0.5 Q31*/, L_mult( msM_subwin, QeqInv ) ); #endif tmp16 = BASOP_Util_Divide3232_uu_1616_Scale( tmp0, tmp1, &s ); msBminSubWin[j] = L_add( 134217728l /*1.0 Q27*/, L_shl( L_deposit_h( tmp16 ), s ) ); move32(); Loading
lib_com/modif_fs.c +48 −0 Original line number Diff line number Diff line Loading @@ -537,6 +537,53 @@ void Interpolate_allpass_steep_32( int16_t n, k; Word32 temp_fx[ALLPASSSECTIONS_STEEP - 1]; #ifdef IVAS_ENH32_CADENCE_CHANGES /* upper allpass filter chain */ FOR( k = 0; k < N; k++ ) { temp_fx[0] = Madd_32_16( mem_fx[0], in_fx[k], AP2_STEEP_FX[0] ); move32(); mem_fx[0] = Msub_32_16( in_fx[k], temp_fx[0], AP2_STEEP_FX[0] ); move32(); /* for better performance, unroll this loop */ FOR( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) { temp_fx[n] = Madd_32_16( mem_fx[n], temp_fx[n - 1], AP2_STEEP_FX[n] ); move32(); mem_fx[n] = Msub_32_16( temp_fx[n - 1], temp_fx[n], AP2_STEEP_FX[n] ); move32(); } out_fx[2 * k + 1] = Madd_32_16( mem_fx[ALLPASSSECTIONS_STEEP - 1], temp_fx[ALLPASSSECTIONS_STEEP - 2], AP2_STEEP_FX[ALLPASSSECTIONS_STEEP - 1] ); move32(); mem_fx[ALLPASSSECTIONS_STEEP - 1] = Msub_32_16( temp_fx[ALLPASSSECTIONS_STEEP - 2], out_fx[2 * k + 1], AP2_STEEP_FX[ALLPASSSECTIONS_STEEP - 1] ); move32(); } /* lower allpass filter chain */ FOR( k = 0; k < N; k++ ) { temp_fx[0] = Madd_32_16( mem_fx[ALLPASSSECTIONS_STEEP], in_fx[k], AP1_STEEP_FX[0] ); move32(); mem_fx[ALLPASSSECTIONS_STEEP] = Msub_32_16( in_fx[k], temp_fx[0], AP1_STEEP_FX[0] ); move32(); /* for better performance, unroll this loop */ FOR( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) { temp_fx[n] = Madd_32_16( mem_fx[ALLPASSSECTIONS_STEEP + n], temp_fx[n - 1], AP1_STEEP_FX[n] ); move32(); mem_fx[ALLPASSSECTIONS_STEEP + n] = Msub_32_16( temp_fx[n - 1], temp_fx[n], AP1_STEEP_FX[n] ); move32(); } out_fx[2 * k] = Madd_32_16( mem_fx[2 * ALLPASSSECTIONS_STEEP - 1], temp_fx[ALLPASSSECTIONS_STEEP - 2], AP1_STEEP_FX[ALLPASSSECTIONS_STEEP - 1] ); move32(); mem_fx[2 * ALLPASSSECTIONS_STEEP - 1] = Msub_32_16( temp_fx[ALLPASSSECTIONS_STEEP - 2], out_fx[2 * k], AP1_STEEP_FX[ALLPASSSECTIONS_STEEP - 1] ); move32(); } #else /* upper allpass filter chain */ FOR( k = 0; k < N; k++ ) { Loading Loading @@ -582,6 +629,7 @@ void Interpolate_allpass_steep_32( mem_fx[2 * ALLPASSSECTIONS_STEEP - 1] = L_sub( temp_fx[ALLPASSSECTIONS_STEEP - 2], Mpy_32_16_1( out_fx[2 * k], AP1_STEEP_FX[ALLPASSSECTIONS_STEEP - 1] ) ); move32(); } #endif return; } Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ #define FIX_785_REMOVE_DEAD_CODE /* VA: issue 785: remove dead code */ #define FIX_852_FIX_HANDLE_DEREF /* VA: issue 852: Fix missing handle dereferencing of hIsmMetadaData in ivas_ism_metadata_close() */ #define FIX_901_PARAMMC_DEAD_CODE /* FhG: issue 901: remove dead ParamMC code */ #define IVAS_ENH32_CADENCE_CHANGES /* #################### End BE switches ################################## */ Loading