Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 lib_com/tools.c +36 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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(); } Loading @@ -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; Loading @@ -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(); } Loading Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -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
lib_com/tools.c +36 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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(); } Loading @@ -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; Loading @@ -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(); } Loading