Commit f0e3ade7 authored by multrus's avatar multrus Committed by Sandesh Venkatesh
Browse files

Optimize minimum_s(), minimum_l(), avoid IF

parent 75e324a3
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
+34 −0
Original line number Diff line number Diff line
@@ -879,15 +879,27 @@ 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 = add( i, 0 );
        }
#else
        IF( LT_16( vec[i], tmp ) )
        {
            ind = i;
@@ -895,11 +907,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 +937,27 @@ 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 = add( i, 0 );
        }
#else
        IF( LT_32( vec[i], tmp ) )
        {
            ind = i;
@@ -936,11 +965,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();
    }