static void reverse_matrixing(float *su1, float *su2, int *prev_code,

                              int *curr_code)

{

    int i, nsample, band;

    float mc1_l, mc1_r, mc2_l, mc2_r;



    for (i = 0, band = 0; band < 4 * 256; band += 256, i++) {

        int s1 = prev_code[i];

        int s2 = curr_code[i];

        nsample = 0;



        if (s1 != s2) {

            /* Selector value changed, interpolation needed. */

            mc1_l = matrix_coeffs[s1 * 2    ];

            mc1_r = matrix_coeffs[s1 * 2 + 1];

            mc2_l = matrix_coeffs[s2 * 2    ];

            mc2_r = matrix_coeffs[s2 * 2 + 1];



            /* Interpolation is done over the first eight samples. */

            for (; nsample < 8; nsample++) {

                float c1 = su1[band + nsample];

                float c2 = su2[band + nsample];

                c2 = c1 * INTERPOLATE(mc1_l, mc2_l, nsample) +

                     c2 * INTERPOLATE(mc1_r, mc2_r, nsample);

                su1[band + nsample] = c2;

                su2[band + nsample] = c1 * 2.0 - c2;

            }

        }



        /* Apply the matrix without interpolation. */

        switch (s2) {

        case 0:     /* M/S decoding */

            for (; nsample < 256; nsample++) {

                float c1 = su1[band + nsample];

                float c2 = su2[band + nsample];

                su1[band + nsample] =  c2       * 2.0;

                su2[band + nsample] = (c1 - c2) * 2.0;

            }

            break;

        case 1:

            for (; nsample < 256; nsample++) {

                float c1 = su1[band + nsample];

                float c2 = su2[band + nsample];

                su1[band + nsample] = (c1 + c2) *  2.0;

                su2[band + nsample] =  c2       * -2.0;

            }

            break;

        case 2:

        case 3:

            for (; nsample < 256; nsample++) {

                float c1 = su1[band + nsample];

                float c2 = su2[band + nsample];

                su1[band + nsample] = c1 + c2;

                su2[band + nsample] = c1 - c2;

            }

            break;

        default:

            assert(0);

        }

    }

}

static void reverse_matrixing(float *su1, float *su2, int *prev_code,

                              int *curr_code)

{

    int i, nsample, band;

    float mc1_l, mc1_r, mc2_l, mc2_r;



    for (i = 0, band = 0; band < 4 * 256; band += 256, i++) {

        int s1 = prev_code[i];

        int s2 = curr_code[i];

        nsample = 0;



        if (s1 != s2) {

            

            mc1_l = matrix_coeffs[s1 * 2    ];

            mc1_r = matrix_coeffs[s1 * 2 + 1];

            mc2_l = matrix_coeffs[s2 * 2    ];

            mc2_r = matrix_coeffs[s2 * 2 + 1];



            

            for (; nsample < 8; nsample++) {

                float c1 = su1[band + nsample];

                float c2 = su2[band + nsample];

                c2 = c1 * INTERPOLATE(mc1_l, mc2_l, nsample) +

                     c2 * INTERPOLATE(mc1_r, mc2_r, nsample);

                su1[band + nsample] = c2;

                su2[band + nsample] = c1 * 2.0 - c2;

            }

        }



        

        switch (s2) {

        case 0:     

            for (; nsample < 256; nsample++) {

                float c1 = su1[band + nsample];

                float c2 = su2[band + nsample];

                su1[band + nsample] =  c2       * 2.0;

                su2[band + nsample] = (c1 - c2) * 2.0;

            }

            break;

        case 1:

            for (; nsample < 256; nsample++) {

                float c1 = su1[band + nsample];

                float c2 = su2[band + nsample];

                su1[band + nsample] = (c1 + c2) *  2.0;

                su2[band + nsample] =  c2       * -2.0;

            }

            break;

        case 2:

        case 3:

            for (; nsample < 256; nsample++) {

                float c1 = su1[band + nsample];

                float c2 = su2[band + nsample];

                su1[band + nsample] = c1 + c2;

                su2[band + nsample] = c1 - c2;

            }

            break;

        default:

            assert(0);

        }

    }

}

static void FUNC_0(float *VAR_0, float *VAR_1, int *VAR_2,

                              int *VAR_3)

{

    int VAR_4, VAR_5, VAR_6;

    float VAR_7, VAR_8, VAR_9, VAR_10;



    for (VAR_4 = 0, VAR_6 = 0; VAR_6 < 4 * 256; VAR_6 += 256, VAR_4++) {

        int VAR_11 = VAR_2[VAR_4];

        int VAR_12 = VAR_3[VAR_4];

        VAR_5 = 0;



        if (VAR_11 != VAR_12) {

            

            VAR_7 = matrix_coeffs[VAR_11 * 2    ];

            VAR_8 = matrix_coeffs[VAR_11 * 2 + 1];

            VAR_9 = matrix_coeffs[VAR_12 * 2    ];

            VAR_10 = matrix_coeffs[VAR_12 * 2 + 1];



            

            for (; VAR_5 < 8; VAR_5++) {

                float VAR_15 = VAR_0[VAR_6 + VAR_5];

                float VAR_15 = VAR_1[VAR_6 + VAR_5];

                VAR_15 = VAR_15 * INTERPOLATE(VAR_7, VAR_9, VAR_5) +

                     VAR_15 * INTERPOLATE(VAR_8, VAR_10, VAR_5);

                VAR_0[VAR_6 + VAR_5] = VAR_15;

                VAR_1[VAR_6 + VAR_5] = VAR_15 * 2.0 - VAR_15;

            }

        }



        

        switch (VAR_12) {

        case 0:     

            for (; VAR_5 < 256; VAR_5++) {

                float VAR_15 = VAR_0[VAR_6 + VAR_5];

                float VAR_15 = VAR_1[VAR_6 + VAR_5];

                VAR_0[VAR_6 + VAR_5] =  VAR_15       * 2.0;

                VAR_1[VAR_6 + VAR_5] = (VAR_15 - VAR_15) * 2.0;

            }

            break;

        case 1:

            for (; VAR_5 < 256; VAR_5++) {

                float VAR_15 = VAR_0[VAR_6 + VAR_5];

                float VAR_15 = VAR_1[VAR_6 + VAR_5];

                VAR_0[VAR_6 + VAR_5] = (VAR_15 + VAR_15) *  2.0;

                VAR_1[VAR_6 + VAR_5] =  VAR_15       * -2.0;

            }

            break;

        case 2:

        case 3:

            for (; VAR_5 < 256; VAR_5++) {

                float VAR_15 = VAR_0[VAR_6 + VAR_5];

                float VAR_15 = VAR_1[VAR_6 + VAR_5];

                VAR_0[VAR_6 + VAR_5] = VAR_15 + VAR_15;

                VAR_1[VAR_6 + VAR_5] = VAR_15 - VAR_15;

            }

            break;

        default:

            assert(0);

        }

    }

}

static void FUNC_0(float *VAR_0, float *VAR_1, int *VAR_2,
int *VAR_3)
{ int VAR_4, VAR_5, VAR_6; float VAR_7, VAR_8, VAR_9, VAR_10; for (VAR_4 = 0, VAR_6 = 0; VAR_6 < 4 * 256; VAR_6 += 256, VAR_4++) { int VAR_11 = VAR_2[VAR_4]; int VAR_12 = VAR_3[VAR_4]; VAR_5 = 0; if (VAR_11 != VAR_12) { VAR_7 = matrix_coeffs[VAR_11 * 2    ]; VAR_8 = matrix_coeffs[VAR_11 * 2 + 1]; VAR_9 = matrix_coeffs[VAR_12 * 2    ]; VAR_10 = matrix_coeffs[VAR_12 * 2 + 1]; for (; VAR_5 < 8; VAR_5++) { float VAR_15 = VAR_0[VAR_6 + VAR_5]; float VAR_15 = VAR_1[VAR_6 + VAR_5]; VAR_15 = VAR_15 * INTERPOLATE(VAR_7, VAR_9, VAR_5) +
VAR_15 * INTERPOLATE(VAR_8, VAR_10, VAR_5); VAR_0[VAR_6 + VAR_5] = VAR_15; VAR_1[VAR_6 + VAR_5] = VAR_15 * 2.0 - VAR_15; } } switch (VAR_12) { case 0:
for (; VAR_5 < 256; VAR_5++) { float VAR_15 = VAR_0[VAR_6 + VAR_5]; float VAR_15 = VAR_1[VAR_6 + VAR_5]; VAR_0[VAR_6 + VAR_5] =  VAR_15       * 2.0; VAR_1[VAR_6 + VAR_5] = (VAR_15 - VAR_15) * 2.0; } break; case 1:
for (; VAR_5 < 256; VAR_5++) { float VAR_15 = VAR_0[VAR_6 + VAR_5]; float VAR_15 = VAR_1[VAR_6 + VAR_5]; VAR_0[VAR_6 + VAR_5] = (VAR_15 + VAR_15) *  2.0; VAR_1[VAR_6 + VAR_5] =  VAR_15       * -2.0; } break; case 2:
case 3:
for (; VAR_5 < 256; VAR_5++) { float VAR_15 = VAR_0[VAR_6 + VAR_5]; float VAR_15 = VAR_1[VAR_6 + VAR_5]; VAR_0[VAR_6 + VAR_5] = VAR_15 + VAR_15; VAR_1[VAR_6 + VAR_5] = VAR_15 - VAR_15; } break; default:
assert(0); } } }