static void decode(Real288_internal *glob, float gain, int cb_coef)

{

    unsigned int x, y;

    float f;

    double sum, sumsum;

    float *p1, *p2;

    float buffer[5];



    for (x=36; x--; glob->sb[x+5] = glob->sb[x]);



    for (x=5; x--;) {

        p1 = glob->sb+x;

        p2 = glob->pr1;

        for (sum=0, y=36; y--; sum -= (*(++p1))*(*(p2++)));



        glob->sb[x] = sum;

    }



    /* convert log and do rms */

    for (sum=32, x=10; x--; sum -= glob->pr2[x] * glob->lhist[x]);



    if (sum < 0)

        sum = 0;

    else if (sum > 60)

        sum = 60;



    sumsum = exp(sum * 0.1151292546497) * gain;    /* pow(10.0,sum/20)*f */



    for (sum=0, x=5; x--;) {

        buffer[x] = codetable[cb_coef][x] * sumsum;

        sum += buffer[x] * buffer[x];

    }



    if ((sum /= 5) < 1)

        sum = 1;



    /* shift and store */

    for (x=10; --x; glob->lhist[x] = glob->lhist[x-1]);



    *glob->lhist = glob->history[glob->phase] = 10 * log10(sum) - 32;



    for (x=1; x < 5; x++)

        for (y=x; y--; buffer[x] -= glob->pr1[x-y-1] * buffer[y]);



    /* output */

    for (x=0; x < 5; x++) {

        f = glob->sb[4-x] + buffer[x];



        if (f > 4095)

            f = 4095;

        else if (f < -4095)

            f = -4095;



        glob->output[glob->phasep+x] = glob->sb[4-x] = f;

    }

}

static void decode(Real288_internal *glob, float gain, int cb_coef)

{

    unsigned int x, y;

    float f;

    double sum, sumsum;

    float *p1, *p2;

    float buffer[5];



    for (x=36; x--; glob->sb[x+5] = glob->sb[x]);



    for (x=5; x--;) {

        p1 = glob->sb+x;

        p2 = glob->pr1;

        for (sum=0, y=36; y--; sum -= (*(++p1))*(*(p2++)));



        glob->sb[x] = sum;

    }



    

    for (sum=32, x=10; x--; sum -= glob->pr2[x] * glob->lhist[x]);



    if (sum < 0)

        sum = 0;

    else if (sum > 60)

        sum = 60;



    sumsum = exp(sum * 0.1151292546497) * gain;    



    for (sum=0, x=5; x--;) {

        buffer[x] = codetable[cb_coef][x] * sumsum;

        sum += buffer[x] * buffer[x];

    }



    if ((sum /= 5) < 1)

        sum = 1;



    

    for (x=10; --x; glob->lhist[x] = glob->lhist[x-1]);



    *glob->lhist = glob->history[glob->phase] = 10 * log10(sum) - 32;



    for (x=1; x < 5; x++)

        for (y=x; y--; buffer[x] -= glob->pr1[x-y-1] * buffer[y]);



    

    for (x=0; x < 5; x++) {

        f = glob->sb[4-x] + buffer[x];



        if (f > 4095)

            f = 4095;

        else if (f < -4095)

            f = -4095;



        glob->output[glob->phasep+x] = glob->sb[4-x] = f;

    }

}

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

{

    unsigned int VAR_3, VAR_4;

    float VAR_5;

    double VAR_6, VAR_7;

    float *VAR_8, *VAR_9;

    float VAR_10[5];



    for (VAR_3=36; VAR_3--; VAR_0->sb[VAR_3+5] = VAR_0->sb[VAR_3]);



    for (VAR_3=5; VAR_3--;) {

        VAR_8 = VAR_0->sb+VAR_3;

        VAR_9 = VAR_0->pr1;

        for (VAR_6=0, VAR_4=36; VAR_4--; VAR_6 -= (*(++VAR_8))*(*(VAR_9++)));



        VAR_0->sb[VAR_3] = VAR_6;

    }



    

    for (VAR_6=32, VAR_3=10; VAR_3--; VAR_6 -= VAR_0->pr2[VAR_3] * VAR_0->lhist[VAR_3]);



    if (VAR_6 < 0)

        VAR_6 = 0;

    else if (VAR_6 > 60)

        VAR_6 = 60;



    VAR_7 = exp(VAR_6 * 0.1151292546497) * VAR_1;    



    for (VAR_6=0, VAR_3=5; VAR_3--;) {

        VAR_10[VAR_3] = codetable[VAR_2][VAR_3] * VAR_7;

        VAR_6 += VAR_10[VAR_3] * VAR_10[VAR_3];

    }



    if ((VAR_6 /= 5) < 1)

        VAR_6 = 1;



    

    for (VAR_3=10; --VAR_3; VAR_0->lhist[VAR_3] = VAR_0->lhist[VAR_3-1]);



    *VAR_0->lhist = VAR_0->history[VAR_0->phase] = 10 * log10(VAR_6) - 32;



    for (VAR_3=1; VAR_3 < 5; VAR_3++)

        for (VAR_4=VAR_3; VAR_4--; VAR_10[VAR_3] -= VAR_0->pr1[VAR_3-VAR_4-1] * VAR_10[VAR_4]);



    

    for (VAR_3=0; VAR_3 < 5; VAR_3++) {

        VAR_5 = VAR_0->sb[4-VAR_3] + VAR_10[VAR_3];



        if (VAR_5 > 4095)

            VAR_5 = 4095;

        else if (VAR_5 < -4095)

            VAR_5 = -4095;



        VAR_0->output[VAR_0->phasep+VAR_3] = VAR_0->sb[4-VAR_3] = VAR_5;

    }

}

static void FUNC_0(Real288_internal *VAR_0, float VAR_1, int VAR_2)
{ unsigned int VAR_3, VAR_4; float VAR_5; double VAR_6, VAR_7; float *VAR_8, *VAR_9; float VAR_10[5]; for (VAR_3=36; VAR_3--; VAR_0->sb[VAR_3+5] = VAR_0->sb[VAR_3]); for (VAR_3=5; VAR_3--;) { VAR_8 = VAR_0->sb+VAR_3; VAR_9 = VAR_0->pr1; for (VAR_6=0, VAR_4=36; VAR_4--; VAR_6 -= (*(++VAR_8))*(*(VAR_9++))); VAR_0->sb[VAR_3] = VAR_6; } for (VAR_6=32, VAR_3=10; VAR_3--; VAR_6 -= VAR_0->pr2[VAR_3] * VAR_0->lhist[VAR_3]); if (VAR_6 < 0)
VAR_6 = 0; else if (VAR_6 > 60)
VAR_6 = 60; VAR_7 = exp(VAR_6 * 0.1151292546497) * VAR_1; for (VAR_6=0, VAR_3=5; VAR_3--;) { VAR_10[VAR_3] = codetable[VAR_2][VAR_3] * VAR_7; VAR_6 += VAR_10[VAR_3] * VAR_10[VAR_3]; } if ((VAR_6 /= 5) < 1)
VAR_6 = 1; for (VAR_3=10; --VAR_3; VAR_0->lhist[VAR_3] = VAR_0->lhist[VAR_3-1]); *VAR_0->lhist = VAR_0->history[VAR_0->phase] = 10 * log10(VAR_6) - 32; for (VAR_3=1; VAR_3 < 5; VAR_3++) for (VAR_4=VAR_3; VAR_4--; VAR_10[VAR_3] -= VAR_0->pr1[VAR_3-VAR_4-1] * VAR_10[VAR_4]); for (VAR_3=0; VAR_3 < 5; VAR_3++) { VAR_5 = VAR_0->sb[4-VAR_3] + VAR_10[VAR_3]; if (VAR_5 > 4095)
VAR_5 = 4095; else if (VAR_5 < -4095)
VAR_5 = -4095; VAR_0->output[VAR_0->phasep+VAR_3] = VAR_0->sb[4-VAR_3] = VAR_5; } }