Commit 32555eb8 authored by vaillancour's avatar vaillancour
Browse files

Fix for SWB switching

parent bda21755
Loading
Loading
Loading
Loading
+67 −2
Original line number Diff line number Diff line
@@ -1758,6 +1758,31 @@ static void cft1st_16fx(
    Flag Overflow = 0;
#endif

#ifdef BASOP_NOGLOB
    x0r = add_o(a[0],a[2], &Overflow);
    x0i = add_o(a[1],a[3], &Overflow);
    x1r = sub_o(a[0],a[2], &Overflow);
    x1i = sub_o(a[1],a[3], &Overflow);
    x2r = add_o(a[4],a[6], &Overflow);
    x2i = add_o(a[5],a[7], &Overflow);
    x3r = sub_o(a[4],a[6], &Overflow);
    x3i = sub_o(a[5],a[7], &Overflow);
    a[0] = add_o(x0r,x2r, &Overflow);
    move16();
    a[1] = add_o(x0i,x2i, &Overflow);
    move16();
    a[4] = sub_o(x0r,x2r, &Overflow);
    move16();
    a[5] = sub_o(x0i,x2i, &Overflow);
    move16();
    a[2] = sub_o(x1r,x3i, &Overflow);
    move16();
    a[3] = add_o(x1i,x3r, &Overflow);
    move16();
    a[6] = add_o(x1r,x3i, &Overflow);
    move16();
    a[7] = sub_o(x1i,x3r, &Overflow);
#else
    x0r = add(a[0],a[2]);
    x0i = add(a[1],a[3]);
    x1r = sub(a[0],a[2]);
@@ -1782,10 +1807,32 @@ static void cft1st_16fx(
    move16();
    a[7] = sub(x1i,x3r);
    move16();

#endif
    wk1r = w[2];
    move32();

#ifdef BASOP_NOGLOB
    x0r = add_o(a[8],a[10], &Overflow);
    x0i = add_o(a[9],a[11], &Overflow);
    x1r = sub_o(a[8],a[10], &Overflow);
    x1i = sub_o(a[9],a[11], &Overflow);
    x2r = add_o(a[12],a[14], &Overflow);
    x2i = add_o(a[13],a[15], &Overflow);
    x3r = sub_o(a[12],a[14], &Overflow);
    x3i = sub_o(a[13],a[15], &Overflow);
    a[8] = add_o(x0r,x2r, &Overflow);
    move16();
    a[9] = add_o(x0i,x2i, &Overflow);
    move16();
    a[12] = sub_o(x2i,x0i, &Overflow);
    move16();
    a[13] = sub_o(x0r,x2r, &Overflow);
    move16();

    x0r = sub_o(x1r,x3i, &Overflow);
    x0i = add_o(x1i,x3r, &Overflow);
    tmp = sub_o(x0r,x0i, &Overflow);
#else
    x0r = add(a[8],a[10]);
    x0i = add(a[9],a[11]);
    x1r = sub(a[8],a[10]);
@@ -1806,8 +1853,26 @@ static void cft1st_16fx(
    x0r = sub(x1r,x3i);
    x0i = add(x1i,x3r);
    tmp = sub(x0r,x0i);
#endif
    L_tmp = Mult_32_16(wk1r,tmp); /*Q(15+Qx+Q_edct) */

#ifdef BASOP_NOGLOB
    a[10] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */

    tmp = add_o(x0r,x0i, &Overflow);
    L_tmp = Mult_32_16(wk1r,tmp); /*Q(15+Qx+Q_edct) */
    a[11] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /* Q(Qx+Q_edct) */

    x0r = add_o(x3i,x1r, &Overflow);
    x0i = sub_o(x3r,x1i, &Overflow);
    tmp = sub_o(x0i,x0r, &Overflow);
    L_tmp = Mult_32_16(wk1r,tmp); /*Q(15+Qx+Q_edct) */
    a[14] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */

    tmp = add_o(x0i,x0r, &Overflow);
    L_tmp = Mult_32_16(wk1r,tmp); /*Q(15+Qx+Q_edct) */
    a[15] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
    a[10] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

    tmp = add(x0r,x0i);
@@ -1823,7 +1888,7 @@ static void cft1st_16fx(
    tmp = add(x0i,x0r);
    L_tmp = Mult_32_16(wk1r,tmp); /*Q(15+Qx+Q_edct) */
    a[15] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

#endif
    k1 = 0;
    move16();

+7 −1
Original line number Diff line number Diff line
@@ -29,7 +29,9 @@ void phase_dispersion(
    Word32 x32[2*L_SUBFR];
    Word16 *code_real, *code_imag;
    const Word16 *h_real, *h_imag;

#ifdef BASOP_NOGLOB
    Flag Overflow = 0;
#endif


    move16();
@@ -162,7 +164,11 @@ void phase_dispersion(
        scale2 = getScaleFactor32(x32, L_subfr);
        FOR (i=0; i<L_subfr; i++)
        {
#ifdef BASOP_NOGLOB
            code[i] = round_fx_o(L_shl_o(x32[i], scale2, &Overflow), &Overflow);
#else
            code[i] = round_fx(L_shl(x32[i], scale2));
#endif
        }
        j = sub(j, scale2);
    }