Commit 96403839 authored by Fabian Bauer's avatar Fabian Bauer
Browse files

edct_fx.c : replaced overflow ops

parent 4b5dee1b
Loading
Loading
Loading
Loading
+30 −9
Original line number Diff line number Diff line
@@ -396,10 +396,12 @@ void edct_16fx(
    const Word16 *px, *pt;
    Word16 *py;
    (void) element_mode;
#ifndef ISSUE_1836_replace_overflow_libcom
#ifdef BASOP_NOGLOB_DECLARE_LOCAL
    Flag Overflow;
    Overflow = 0;
    move32();
#endif
#endif
    /*COMPLETE: some eDCT sub function are missing */

@@ -456,12 +458,21 @@ void edct_16fx(
        i2 = shl( i, 1 );

        L_tmp = L_mult( x[i2], edct_table[i] );                               /*Q(Qx+16) */
#ifdef ISSUE_1836_replace_overflow_libcom
        Lacc = L_mac_sat( L_tmp, *px, *pt );                                  /*Q(Qx+16) */
        re2[i] = round_fx_sat( L_shl_sat( Lacc, Q_edct ) );                   /* Q(Qx+Q_edct) */
        move16();
        L_tmp = L_mult( *px, edct_table[i] );                                 /*Q(Qx+16) */
        Lacc = L_msu_sat( L_tmp, x[i2], *pt );                                /*Q(Qx+16) */
        im2[i] = round_fx_sat( L_shl_sat( Lacc, Q_edct ) );                   /* Q(Qx+Q_edct) */
#else
        Lacc = L_mac_o( L_tmp, *px, *pt, &Overflow );                         /*Q(Qx+16) */
        re2[i] = round_fx_o( L_shl_o( Lacc, Q_edct, &Overflow ), &Overflow ); /* Q(Qx+Q_edct) */
        move16();
        L_tmp = L_mult( *px, edct_table[i] );                                 /*Q(Qx+16) */
        Lacc = L_msu_o( L_tmp, x[i2], *pt, &Overflow );                       /*Q(Qx+16) */
        im2[i] = round_fx_o( L_shl_o( Lacc, Q_edct, &Overflow ), &Overflow ); /* Q(Qx+Q_edct) */
#endif
        move16();
        px -= 2;
        pt--;
@@ -487,11 +498,19 @@ void edct_16fx(
    FOR( i = 0; i < shr( length, 1 ); i++ )
    {
        tmp = mult_r( im2[i], fact );            /*Q(Qx+Q_edct) */
#ifdef ISSUE_1836_replace_overflow_libcom
        re[i] = sub_sat( re2[i], tmp );          /*Q(Qx+Q_edct) */
#else
        re[i] = sub_o( re2[i], tmp, &Overflow ); /*Q(Qx+Q_edct) */
#endif
        move16();

        tmp = mult_r( re2[i], fact );            /*Q(Qx+Q_edct) */
#ifdef ISSUE_1836_replace_overflow_libcom
        im[i] = add_sat( im2[i], tmp );          /*Q(Qx+Q_edct) */
#else
        im[i] = add_o( im2[i], tmp, &Overflow ); /*Q(Qx+Q_edct) */
#endif
        move16();
    }

@@ -503,19 +522,21 @@ void edct_16fx(
        i2 = shl( i, 1 );

        L_tmp = L_mult( re[i], edct_table[i] );             /*Q(Qx+Q_edct+16) */
        Lacc = L_mac_o( L_tmp, im[i], *pt, &Overflow ); /*Q(Qx+Q_edct+16) */
#ifdef ISSUE_1799_replace_L_shr_o
        y[i2] = round_fx_o( L_shr_sat( Lacc, Q_edct ), &Overflow ); /* Q(Qx) */
#ifdef ISSUE_1836_replace_overflow_libcom
        Lacc = L_mac_sat( L_tmp, im[i], *pt );              /*Q(Qx+Q_edct+16) */
        y[i2] = round_fx_sat( L_shr_sat( Lacc, Q_edct ) );  /* Q(Qx) */
        move16();

        L_tmp = L_mult( re[i], edct_table[sub( shr( length, 1 ), add( 1, i ) )] ); /*Q(Qx+Q_edct+16) */
        Lacc = L_msu( L_tmp, im[i], edct_table[i] );                               /*Q(Qx+Q_edct+16) */
        *py = round_fx_sat( L_shr_sat( Lacc, Q_edct ) );                           /* Q(Qx) */
#else
        Lacc = L_mac_o( L_tmp, im[i], *pt, &Overflow ); /*Q(Qx+Q_edct+16) */
        y[i2] = round_fx_o( L_shr_o( Lacc, Q_edct, &Overflow ), &Overflow ); /* Q(Qx) */
#endif
        move16();

        L_tmp = L_mult( re[i], edct_table[sub( shr( length, 1 ), add( 1, i ) )] ); /*Q(Qx+Q_edct+16) */
        Lacc = L_msu( L_tmp, im[i], edct_table[i] );                               /*Q(Qx+Q_edct+16) */
#ifdef ISSUE_1799_replace_L_shr_o
        *py = round_fx_o( L_shr_sat( Lacc, Q_edct ), &Overflow ); /* Q(Qx) */
#else
        *py = round_fx_o( L_shr_o( Lacc, Q_edct, &Overflow ), &Overflow );         /* Q(Qx) */
#endif
        move16();