diff --git a/lib_com/options.h b/lib_com/options.h index d1be6ee8e822790490b5e8b13f7865bda2b76939..c86bbfcfbc98ee40edd6cdad9c2a78838ff96709 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -93,4 +93,5 @@ #define FIX_1052_COPY_CMPLX_DISCREPANCY /* VA: modify IF-ELSE statements used in Copy*() functions to avoid dependency on x[] and y[] in RAM */ #define FIX_1049_SHR_RO_COMPLEXITY /* VA: fix for issue 1049: incorrect counting of complexity in the shr_ro() function */ #define FIX_1103_OPT_L_NORM_ARR /* FhG: Optimize L_norm_arr(), avoid IF */ +#define FIX_1105_OPT_MINIMUM_SL /* FhG: Optimize minimum_s(), minimum_l(), avoid IF */ #endif diff --git a/lib_com/tools.c b/lib_com/tools.c index b358196587026ed5921906b0fbacee2467d69ee6..f757239f38f38da77ad373ff14f22007e7b9a2e7 100644 --- a/lib_com/tools.c +++ b/lib_com/tools.c @@ -879,15 +879,28 @@ Word16 minimum_s( Word16 *min_val /* o : minimum value in the input vector */ ) { +#ifdef FIX_1105_OPT_MINIMUM_SL + Word16 i, ind; +#else Word16 i, ind, tmp; +#endif ind = 0; move16(); +#ifndef FIX_1105_OPT_MINIMUM_SL tmp = vec[0]; move16(); +#endif FOR( i = 1; i < lvec; i++ ) { +#ifdef FIX_1105_OPT_MINIMUM_SL + if ( LT_16( vec[i], vec[ind] ) ) + { + ind = i; + move16(); + } +#else IF( LT_16( vec[i], tmp ) ) { ind = i; @@ -895,11 +908,16 @@ Word16 minimum_s( tmp = vec[i]; move16(); } +#endif } if ( min_val != NULL ) { +#ifdef FIX_1105_OPT_MINIMUM_SL + *min_val = vec[ind]; +#else *min_val = tmp; +#endif move16(); } @@ -920,15 +938,28 @@ Word16 minimum_l( ) { Word16 i, ind; +#ifndef FIX_1105_OPT_MINIMUM_SL Word32 tmp; +#endif ind = 0; +#ifndef FIX_1105_OPT_MINIMUM_SL tmp = vec[0]; +#endif move16(); +#ifndef FIX_1105_OPT_MINIMUM_SL move32(); +#endif FOR( i = 1; i < lvec; i++ ) { +#ifdef FIX_1105_OPT_MINIMUM_SL + if ( LT_32( vec[i], vec[ind] ) ) + { + ind = i; + move16(); + } +#else IF( LT_32( vec[i], tmp ) ) { ind = i; @@ -936,11 +967,16 @@ Word16 minimum_l( move16(); move32(); } +#endif } if ( min_val != NULL ) { +#ifdef FIX_1105_OPT_MINIMUM_SL + *min_val = vec[ind]; +#else *min_val = tmp; +#endif move32(); }