Commit 4a1cd706 authored by vaillancour's avatar vaillancour
Browse files

more fixes for ffts

parent d1f30399
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -314,13 +314,21 @@ void edct_16fx(
        i2 = shl(i,1);

        L_tmp = L_mult(x[i2],edct_table[i]);/*Q(Qx+16) */
#ifdef BASOP_NOGLOB
        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) */
#else
        Lacc = L_mac(L_tmp,*px,*pt);/*Q(Qx+16) */
        re2[i] = round_fx(L_shl(Lacc, Q_edct)); /* Q(Qx+Q_edct) */

#endif
        L_tmp = L_mult(*px,edct_table[i]);/*Q(Qx+16) */
#ifdef BASOP_NOGLOB
        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) */
#else
        Lacc = L_msu(L_tmp,x[i2],*pt);/*Q(Qx+16) */
        im2[i] = round_fx(L_shl(Lacc, Q_edct)); /* Q(Qx+Q_edct) */

#endif
        px -= 2;
        pt--;
    }
@@ -352,7 +360,11 @@ void edct_16fx(
#endif

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

    /* Post-rotate and obtain the output data */
@@ -363,10 +375,11 @@ void edct_16fx(
        i2 = shl(i,1);

        L_tmp = L_mult(re[i],edct_table[i]);/*Q(Qx+Q_edct+16) */
        Lacc = L_mac(L_tmp,im[i],*pt);/*Q(Qx+Q_edct+16) */
#ifdef BASOP_NOGLOB
        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) */
#else /* BASOP_NOGLOB */
        Lacc = L_mac(L_tmp, im[i], *pt);/*Q(Qx+Q_edct+16) */
        y[i2] = round_fx(L_shr(Lacc,Q_edct)); /* Q(Qx) */
#endif /* BASOP_NOGLOB */

+264 −41
Original line number Diff line number Diff line
@@ -1715,14 +1715,17 @@ static void cftfsub_16fx(
#else
            x0r = sub(a[j],a[j1]);
#endif
            x0i = sub(a[j + 1],a[j1 + 1]);
#ifdef BASOP_NOGLOB
            x0i = sub_o(a[j + 1], a[j1 + 1], &Overflow);
            a[j] = add_o(a[j], a[j1], &Overflow);
            move16();
            a[j + 1] = add_o(a[j + 1], a[j1 + 1], &Overflow);
#else
            x0i = sub(a[j + 1], a[j1 + 1]);
            a[j] = add(a[j],a[j1]);
#endif
            move16();
            a[j + 1] = add(a[j + 1], a[j1 + 1]);
#endif
            move16();
            a[j1] = x0r;
            move16();
@@ -1748,7 +1751,9 @@ static void cft1st_16fx(
    Word16 x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
    Word16 tmp;
    Word32 L_tmp;

#ifdef BASOP_NOGLOB
    Flag Overflow = 0;
#endif
    x0r = add(a[0],a[2]);
    x0i = add(a[1],a[3]);
    x1r = sub(a[0],a[2]);
@@ -1834,6 +1839,23 @@ static void cft1st_16fx(
        L_tmp = L_shl(Mult_32_32(wk2i,wk1r),1);/*Q29 */
        wk3i = L_sub(L_shl(L_tmp,1),wk1i);/*Q30 */

#ifdef BASOP_NOGLOB
        x0r = add_o(a[j],a[j + 2], &Overflow);
        x0i = add_o(a[j + 1],a[j + 3], &Overflow);
        x1r = sub_o(a[j],a[j + 2], &Overflow);
        x1i = sub_o(a[j + 1],a[j + 3], &Overflow);
        x2r = add_o(a[j + 4],a[j + 6], &Overflow);
        x2i = add_o(a[j + 5],a[j + 7], &Overflow);
        x3r = sub_o(a[j + 4],a[j + 6], &Overflow);
        x3i = sub_o(a[j + 5],a[j + 7], &Overflow);
        a[j] = add_o(x0r,x2r, &Overflow);
        move16();
        a[j + 1] = add_o(x0i,x2i, &Overflow);
        move16();

        x0r = sub_o(x0r, x2r, &Overflow);
        x0i = sub_o(x0i, x2i, &Overflow);
#else
        x0r = add(a[j], a[j + 2]);
        x0i = add(a[j + 1], a[j + 3]);
        x1r = sub(a[j], a[j + 2]);
@@ -1849,32 +1871,67 @@ static void cft1st_16fx(

        x0r = sub(x0r, x2r);
        x0i = sub(x0i, x2i);
#endif

        L_tmp = Mult_32_16(wk2r,x0r);/*Q(15+Qx+Q_edct) */
        L_tmp = Msub_32_16(L_tmp,wk2i,x0i); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 4] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
        a[j + 4] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

#endif
        L_tmp = Mult_32_16(wk2r,x0i);/*Q(15+Qx+Q_edct) */
        L_tmp = Madd_32_16(L_tmp,wk2i,x0r); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 5] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
        x0r = sub_o(x1r, x3i, &Overflow);
        x0i = add_o(x1i, x3r, &Overflow);
#else
        a[j + 5] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

        x0r = sub(x1r, x3i);
        x0i = add(x1i, x3r); 
#endif

        L_tmp = Mult_32_16(wk1r,x0r);/*Q(15+Qx+Q_edct) */
        L_tmp = Msub_32_16(L_tmp,wk1i,x0i); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 2] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
        a[j + 2] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

#endif
        L_tmp = Mult_32_16(wk1r,x0i);/*Q(15+Qx+Q_edct) */
        L_tmp = Madd_32_16(L_tmp,wk1i,x0r); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 3] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */

        x0r = add_o(x1r,x3i, &Overflow);
        x0i = sub_o(x1i,x3r, &Overflow);
#else
        a[j + 3] = round_fx(L_shl(L_tmp, 1)); /*Q(Qx+Q_edct) */

        x0r = add(x1r, x3i);
        x0i = sub(x1i, x3r);
#endif
        L_tmp = Mult_32_16(wk3r,x0r); /*Q(15+Qx+Q_edct) */
        L_tmp = Msub_32_16(L_tmp,wk3i,x0i); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 6] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
        a[j + 6] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

#endif
        L_tmp = Mult_32_16(wk3r,x0i); /*Q(15+Qx+Q_edct) */
        L_tmp = Madd_32_16(L_tmp,wk3i,x0r); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 7] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */

        wk1r = w[k2 + 2];	move32();
        wk1i = w[k2 + 3];	move32();
        L_tmp = L_shl_o(Mult_32_32(wk2r,wk1i),1, &Overflow);/*Q29 */
        wk3r = L_sub_o(wk1r,L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q30  */

        L_tmp = L_shl_o(Mult_32_32(wk2r,wk1r),1, &Overflow);/*Q29 */
        wk3i = L_sub_o(L_shl_o(L_tmp,1, &Overflow),wk1i, &Overflow); /*Q30 */
#else
        a[j + 7] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

        wk1r = w[k2 + 2];	move32();
@@ -1884,7 +1941,22 @@ static void cft1st_16fx(

        L_tmp = L_shl(Mult_32_32(wk2r,wk1r),1);/*Q29 */
        wk3i = L_sub(L_shl(L_tmp,1),wk1i); /*Q30 */

#endif
#ifdef BASOP_NOGLOB
        x0r = add_o(a[j + 8],a[j + 10], &Overflow);
        x0i = add_o(a[j + 9],a[j + 11], &Overflow);
        x1r = sub_o(a[j + 8],a[j + 10], &Overflow);
        x1i = sub_o(a[j + 9],a[j + 11], &Overflow);
        x2r = add_o(a[j + 12],a[j + 14], &Overflow);
        x2i = add_o(a[j + 13],a[j + 15], &Overflow);
        x3r = sub_o(a[j + 12],a[j + 14], &Overflow);
        x3i = sub_o(a[j + 13],a[j + 15], &Overflow);
        a[j + 8] = add_o(x0r,x2r, &Overflow);
        move16();
        a[j + 9] = add_o(x0i,x2i, &Overflow);
        x0r = sub_o(x0r, x2r, &Overflow);
        x0i = sub_o(x0i, x2i, &Overflow);
#else
        x0r = add(a[j + 8],a[j + 10]);
        x0i = add(a[j + 9],a[j + 11]);
        x1r = sub(a[j + 8],a[j + 10]);
@@ -1897,39 +1969,66 @@ static void cft1st_16fx(
        move16();
        a[j + 9] = add(x0i,x2i);
        move16();

        x0r = sub(x0r, x2r);
        x0i = sub(x0i, x2i); 
#endif

        tmp = negate(x0r);
        L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */
        L_tmp = Msub_32_16(L_tmp,wk2r,x0i); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 12] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
        a[j + 12] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

#endif
        tmp = negate(x0i);
        L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */
        L_tmp = Madd_32_16(L_tmp,wk2r,x0r); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 13] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */

        x0r = sub_o(x1r,x3i, &Overflow);
        x0i = add_o(x1i,x3r, &Overflow);
#else
        a[j + 13] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

        x0r = sub(x1r,x3i);
        x0i = add(x1i,x3r);
#endif
        L_tmp = Mult_32_16(wk1r,x0r);/*Q(15+Qx+Q_edct) */
        L_tmp = Msub_32_16(L_tmp,wk1i,x0i); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 10] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
        a[j + 10] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

#endif
        L_tmp = Mult_32_16(wk1r,x0i);/*Q(15+Qx+Q_edct) */
        L_tmp = Madd_32_16(L_tmp,wk1i,x0r); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 11] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */

        x0r = add_o(x1r,x3i, &Overflow);
        x0i = sub_o(x1i,x3r, &Overflow);
#else
        a[j + 11] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

        x0r = add(x1r,x3i);
        x0i = sub(x1i,x3r);

#endif
        L_tmp = Mult_32_16(wk3r,x0r); /*Q(15+Qx+Q_edct) */
        L_tmp = Msub_32_16(L_tmp,wk3i,x0i); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 14] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
        a[j + 14] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

#endif
        L_tmp = Mult_32_16(wk3r,x0i); /*Q(15+Qx+Q_edct) */
        L_tmp = Madd_32_16(L_tmp,wk3i,x0r); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j + 15] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
        a[j + 15] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */
#endif
    }

    return;
@@ -1952,7 +2051,9 @@ static void cftmdl_16fx(
    Word16 tmp, tmp2;
    Word32 L_tmp;
    Word32 L_x0r, L_x0i;

#ifdef BASOP_NOGLOB
    Flag Overflow = 0;
#endif
    m = shl(l, 2);
    move16();
    FOR (j = 0; j < l; j += 2)
@@ -1960,6 +2061,32 @@ static void cftmdl_16fx(
        j1 = add(j,l);
        j2 = add(j1,l);
        j3 = add(j2,l);
#ifdef BASOP_NOGLOB
        x0r = add_o(a[j],a[j1], &Overflow);
        x0i = add_o(a[j + 1],a[j1 + 1], &Overflow);
        x1r = sub_o(a[j],a[j1], &Overflow);
        x1i = sub_o(a[j + 1],a[j1 + 1], &Overflow);
        x2r = add_o(a[j2],a[j3], &Overflow);
        x2i = add_o(a[j2 + 1],a[j3 + 1], &Overflow);
        x3r = sub_o(a[j2],a[j3], &Overflow);
        x3i = sub_o(a[j2 + 1],a[j3 + 1], &Overflow);
        a[j] = add_o(x0r,x2r, &Overflow);
        move16();
        a[j + 1] = add_o(x0i,x2i, &Overflow);
        move16();
        a[j2] = sub_o(x0r,x2r, &Overflow);
        move16();
        a[j2 + 1] = sub_o(x0i,x2i, &Overflow);
        move16();
        a[j1] = sub_o(x1r,x3i, &Overflow);
        move16();
        a[j1 + 1] = add_o(x1i,x3r, &Overflow);
        move16();
        a[j3] = add_o(x1r,x3i, &Overflow);
        move16();
        a[j3 + 1] = sub_o(x1i,x3r, &Overflow);
        move16();
#else
        x0r = add(a[j],a[j1]);
        x0i = add(a[j + 1],a[j1 + 1]);
        x1r = sub(a[j],a[j1]);
@@ -1984,6 +2111,7 @@ static void cftmdl_16fx(
        move16();
        a[j3 + 1] = sub(x1i,x3r);
        move16();
#endif
    }

    wk1r = w[2];
@@ -1994,6 +2122,28 @@ static void cftmdl_16fx(
        j1 = add(j,l);
        j2 = add(j1,l);
        j3 = add(j2,l);
#ifdef BASOP_NOGLOB
        x0r = add_o(a[j],a[j1], &Overflow);
        x0i = add_o(a[j + 1],a[j1 + 1], &Overflow);
        x1r = sub_o(a[j],a[j1], &Overflow);
        x1i = sub_o(a[j + 1],a[j1 + 1], &Overflow);
        x2r = add_o(a[j2],a[j3], &Overflow);
        x2i = add_o(a[j2 + 1],a[j3 + 1], &Overflow);
        x3r = sub_o(a[j2],a[j3], &Overflow);
        x3i = sub_o(a[j2 + 1],a[j3 + 1], &Overflow);
        a[j] = add_o(x0r,x2r, &Overflow);
        move16();
        a[j + 1] = add_o(x0i,x2i, &Overflow);
        move16();
        a[j2] = sub_o(x2i,x0i, &Overflow);
        move16();
        a[j2 + 1] = 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[j],a[j1]);
        x0i = add(a[j + 1],a[j1 + 1]);
        x1r = sub(a[j],a[j1]);
@@ -2014,22 +2164,46 @@ static void cftmdl_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[j1] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
        tmp = add_o(x0r, x0i, &Overflow);
#else
        a[j1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

        tmp = add(x0r, x0i);
#endif
        L_tmp = Mult_32_16(wk1r,tmp); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j1 + 1] = 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);
#else
        a[j1 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

        x0r = add(x3i,x1r);
        x0i = sub(x3r,x1i);
        tmp = sub(x0i,x0r);
#endif
        L_tmp = Mult_32_16(wk1r,tmp);/*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j3] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */

        tmp = add_o(x0i,x0r, &Overflow);
#else
        a[j3] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

        tmp = add(x0i,x0r);
#endif
        L_tmp = Mult_32_16(wk1r,tmp); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
        a[j3 + 1] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
        a[j3 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */
#endif
    }

    k1 = 0;
@@ -2107,18 +2281,42 @@ static void cftmdl_16fx(
        move32();
        wk1i = w[k2 + 3];
        move32();
#ifdef BASOP_NOGLOB
        L_tmp = L_shl_o(Mult_32_32(wk2r,wk1i),1, &Overflow);/*Q29 */
        wk3r = L_sub_o(wk1r,L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q30  */

        L_tmp = L_shl_o(Mult_32_32(wk2r,wk1r),1, &Overflow);/*Q29 */
        wk3i = L_sub_o(L_shl_o(L_tmp,1, &Overflow),wk1i, &Overflow); /*Q30 */
#else
        L_tmp = L_shl(Mult_32_32(wk2r,wk1i),1);/*Q29 */
        wk3r = L_sub(wk1r,L_shl(L_tmp,1)); /*Q30  */

        L_tmp = L_shl(Mult_32_32(wk2r,wk1r),1);/*Q29 */
        wk3i = L_sub(L_shl(L_tmp,1),wk1i); /*Q30 */

#endif
        tmp2 = add(l,add(k,m));
        FOR (j = add(k,m); j < tmp2; j += 2)
        {
            j1 = add(j,l);
            j2 = add(j1,l);
            j3 = add(j2,l);
#ifdef BASOP_NOGLOB
            x0r = add_o(a[j],a[j1], &Overflow);
            x0i = add_o(a[j + 1],a[j1 + 1], &Overflow);
            x1r = sub_o(a[j],a[j1], &Overflow);
            x1i = sub_o(a[j + 1],a[j1 + 1], &Overflow);
            x2r = add_o(a[j2],a[j3], &Overflow);
            x2i = add_o(a[j2 + 1],a[j3 + 1], &Overflow);
            x3r = sub_o(a[j2],a[j3], &Overflow);
            x3i = sub_o(a[j2 + 1],a[j3 + 1], &Overflow);
            a[j] = add_o(x0r,x2r, &Overflow);
            move16();
            a[j + 1] = add_o(x0i,x2i, &Overflow);
            move16();

            x0r = sub_o(x0r,x2r, &Overflow);
            x0i = sub_o(x0i,x2i, &Overflow);
#else
            x0r = add(a[j],a[j1]);
            x0i = add(a[j + 1],a[j1 + 1]);
            x1r = sub(a[j],a[j1]);
@@ -2134,38 +2332,63 @@ static void cftmdl_16fx(

            x0r = sub(x0r,x2r);
            x0i = sub(x0i,x2i);

#endif
            tmp = negate(x0r);
            L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */
            L_tmp = Msub_32_16(L_tmp,wk2r,x0i); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
            a[j2] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
            a[j2] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

#endif
            tmp = negate(x0i);
            L_tmp = Mult_32_16(wk2i,tmp);/*Q(15+Qx+Q_edct) */
            L_tmp = Madd_32_16(L_tmp,wk2r,x0r); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
            a[j2 + 1] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */

            x0r = sub_o(x1r,x3i, &Overflow);
            x0i = add_o(x1i,x3r, &Overflow);
#else
            a[j2 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

            x0r = sub(x1r,x3i);
            x0i = add(x1i,x3r);

#endif
            L_tmp = Mult_32_16(wk1r,x0r);/*Q(15+Qx+Q_edct) */
            L_tmp = Msub_32_16(L_tmp,wk1i,x0i); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
            a[j1] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
            a[j1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

#endif
            L_tmp = Mult_32_16(wk1r,x0i);/*Q(15+Qx+Q_edct) */
            L_tmp = Madd_32_16(L_tmp,wk1i,x0r); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
            a[j1 + 1] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */

            x0r = add_o(x1r,x3i, &Overflow);
            x0i = sub_o(x1i,x3r, &Overflow);
#else
            a[j1 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

            x0r = add(x1r,x3i);
            x0i = sub(x1i,x3r);

#endif
            L_tmp = Mult_32_16(wk3r,x0r); /*Q(15+Qx+Q_edct) */
            L_tmp = Msub_32_16(L_tmp,wk3i,x0i); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
            a[j3] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
            a[j3] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */

#endif
            L_tmp = Mult_32_16(wk3r,x0i); /*Q(15+Qx+Q_edct) */
            L_tmp = Madd_32_16(L_tmp,wk3i,x0r); /*Q(15+Qx+Q_edct) */
#ifdef BASOP_NOGLOB
            a[j3 + 1] = round_fx_o(L_shl_o(L_tmp,1, &Overflow), &Overflow); /*Q(Qx+Q_edct) */
#else
            a[j3 + 1] = round_fx(L_shl(L_tmp,1)); /*Q(Qx+Q_edct) */
#endif
        }
    }