static void fill_coding_method_array(sb_int8_array tone_level_idx,

                                     sb_int8_array tone_level_idx_temp,

                                     sb_int8_array coding_method,

                                     int nb_channels,

                                     int c, int superblocktype_2_3,

                                     int cm_table_select)

{

    int ch, sb, j;

    int tmp, acc, esp_40, comp;

    int add1, add2, add3, add4;

    int64_t multres;



    if (!superblocktype_2_3) {

        /* This case is untested, no samples available */

        SAMPLES_NEEDED

        for (ch = 0; ch < nb_channels; ch++)

            for (sb = 0; sb < 30; sb++) {

                for (j = 1; j < 63; j++) {  // The loop only iterates to 63 so the code doesn't overflow the buffer

                    add1 = tone_level_idx[ch][sb][j] - 10;

                    if (add1 < 0)

                        add1 = 0;

                    add2 = add3 = add4 = 0;

                    if (sb > 1) {

                        add2 = tone_level_idx[ch][sb - 2][j] + tone_level_idx_offset_table[sb][0] - 6;

                        if (add2 < 0)

                            add2 = 0;

                    }

                    if (sb > 0) {

                        add3 = tone_level_idx[ch][sb - 1][j] + tone_level_idx_offset_table[sb][1] - 6;

                        if (add3 < 0)

                            add3 = 0;

                    }

                    if (sb < 29) {

                        add4 = tone_level_idx[ch][sb + 1][j] + tone_level_idx_offset_table[sb][3] - 6;

                        if (add4 < 0)

                            add4 = 0;

                    }

                    tmp = tone_level_idx[ch][sb][j + 1] * 2 - add4 - add3 - add2 - add1;

                    if (tmp < 0)

                        tmp = 0;

                    tone_level_idx_temp[ch][sb][j + 1] = tmp & 0xff;

                }

                tone_level_idx_temp[ch][sb][0] = tone_level_idx_temp[ch][sb][1];

            }

            acc = 0;

            for (ch = 0; ch < nb_channels; ch++)

                for (sb = 0; sb < 30; sb++)

                    for (j = 0; j < 64; j++)

                        acc += tone_level_idx_temp[ch][sb][j];



            multres = 0x66666667 * (acc * 10);

            esp_40 = (multres >> 32) / 8 + ((multres & 0xffffffff) >> 31);

            for (ch = 0;  ch < nb_channels; ch++)

                for (sb = 0; sb < 30; sb++)

                    for (j = 0; j < 64; j++) {

                        comp = tone_level_idx_temp[ch][sb][j]* esp_40 * 10;

                        if (comp < 0)

                            comp += 0xff;

                        comp /= 256; // signed shift

                        switch(sb) {

                            case 0:

                                if (comp < 30)

                                    comp = 30;

                                comp += 15;

                                break;

                            case 1:

                                if (comp < 24)

                                    comp = 24;

                                comp += 10;

                                break;

                            case 2:

                            case 3:

                            case 4:

                                if (comp < 16)

                                    comp = 16;

                        }

                        if (comp <= 5)

                            tmp = 0;

                        else if (comp <= 10)

                            tmp = 10;

                        else if (comp <= 16)

                            tmp = 16;

                        else if (comp <= 24)

                            tmp = -1;

                        else

                            tmp = 0;

                        coding_method[ch][sb][j] = ((tmp & 0xfffa) + 30 )& 0xff;

                    }

            for (sb = 0; sb < 30; sb++)

                fix_coding_method_array(sb, nb_channels, coding_method);

            for (ch = 0; ch < nb_channels; ch++)

                for (sb = 0; sb < 30; sb++)

                    for (j = 0; j < 64; j++)

                        if (sb >= 10) {

                            if (coding_method[ch][sb][j] < 10)

                                coding_method[ch][sb][j] = 10;

                        } else {

                            if (sb >= 2) {

                                if (coding_method[ch][sb][j] < 16)

                                    coding_method[ch][sb][j] = 16;

                            } else {

                                if (coding_method[ch][sb][j] < 30)

                                    coding_method[ch][sb][j] = 30;

                            }

                        }

    } else { // superblocktype_2_3 != 0

        for (ch = 0; ch < nb_channels; ch++)

            for (sb = 0; sb < 30; sb++)

                for (j = 0; j < 64; j++)

                    coding_method[ch][sb][j] = coding_method_table[cm_table_select][sb];

    }

}

static void fill_coding_method_array(sb_int8_array tone_level_idx,

                                     sb_int8_array tone_level_idx_temp,

                                     sb_int8_array coding_method,

                                     int nb_channels,

                                     int c, int superblocktype_2_3,

                                     int cm_table_select)

{

    int ch, sb, j;

    int tmp, acc, esp_40, comp;

    int add1, add2, add3, add4;

    int64_t multres;



    if (!superblocktype_2_3) {

        

        SAMPLES_NEEDED

        for (ch = 0; ch < nb_channels; ch++)

            for (sb = 0; sb < 30; sb++) {

                for (j = 1; j < 63; j++) {  

                    add1 = tone_level_idx[ch][sb][j] - 10;

                    if (add1 < 0)

                        add1 = 0;

                    add2 = add3 = add4 = 0;

                    if (sb > 1) {

                        add2 = tone_level_idx[ch][sb - 2][j] + tone_level_idx_offset_table[sb][0] - 6;

                        if (add2 < 0)

                            add2 = 0;

                    }

                    if (sb > 0) {

                        add3 = tone_level_idx[ch][sb - 1][j] + tone_level_idx_offset_table[sb][1] - 6;

                        if (add3 < 0)

                            add3 = 0;

                    }

                    if (sb < 29) {

                        add4 = tone_level_idx[ch][sb + 1][j] + tone_level_idx_offset_table[sb][3] - 6;

                        if (add4 < 0)

                            add4 = 0;

                    }

                    tmp = tone_level_idx[ch][sb][j + 1] * 2 - add4 - add3 - add2 - add1;

                    if (tmp < 0)

                        tmp = 0;

                    tone_level_idx_temp[ch][sb][j + 1] = tmp & 0xff;

                }

                tone_level_idx_temp[ch][sb][0] = tone_level_idx_temp[ch][sb][1];

            }

            acc = 0;

            for (ch = 0; ch < nb_channels; ch++)

                for (sb = 0; sb < 30; sb++)

                    for (j = 0; j < 64; j++)

                        acc += tone_level_idx_temp[ch][sb][j];



            multres = 0x66666667 * (acc * 10);

            esp_40 = (multres >> 32) / 8 + ((multres & 0xffffffff) >> 31);

            for (ch = 0;  ch < nb_channels; ch++)

                for (sb = 0; sb < 30; sb++)

                    for (j = 0; j < 64; j++) {

                        comp = tone_level_idx_temp[ch][sb][j]* esp_40 * 10;

                        if (comp < 0)

                            comp += 0xff;

                        comp /= 256; 

                        switch(sb) {

                            case 0:

                                if (comp < 30)

                                    comp = 30;

                                comp += 15;

                                break;

                            case 1:

                                if (comp < 24)

                                    comp = 24;

                                comp += 10;

                                break;

                            case 2:

                            case 3:

                            case 4:

                                if (comp < 16)

                                    comp = 16;

                        }

                        if (comp <= 5)

                            tmp = 0;

                        else if (comp <= 10)

                            tmp = 10;

                        else if (comp <= 16)

                            tmp = 16;

                        else if (comp <= 24)

                            tmp = -1;

                        else

                            tmp = 0;

                        coding_method[ch][sb][j] = ((tmp & 0xfffa) + 30 )& 0xff;

                    }

            for (sb = 0; sb < 30; sb++)

                fix_coding_method_array(sb, nb_channels, coding_method);

            for (ch = 0; ch < nb_channels; ch++)

                for (sb = 0; sb < 30; sb++)

                    for (j = 0; j < 64; j++)

                        if (sb >= 10) {

                            if (coding_method[ch][sb][j] < 10)

                                coding_method[ch][sb][j] = 10;

                        } else {

                            if (sb >= 2) {

                                if (coding_method[ch][sb][j] < 16)

                                    coding_method[ch][sb][j] = 16;

                            } else {

                                if (coding_method[ch][sb][j] < 30)

                                    coding_method[ch][sb][j] = 30;

                            }

                        }

    } else { 

        for (ch = 0; ch < nb_channels; ch++)

            for (sb = 0; sb < 30; sb++)

                for (j = 0; j < 64; j++)

                    coding_method[ch][sb][j] = coding_method_table[cm_table_select][sb];

    }

}

            multres = 0x66666667 * (acc * 10);
static void FUNC_0(sb_int8_array VAR_0,

                                     sb_int8_array VAR_1,

                                     sb_int8_array VAR_2,

                                     int VAR_3,

                                     int VAR_4, int VAR_5,

                                     int VAR_6)

{

    int VAR_7, VAR_8, VAR_9;

    int VAR_10, VAR_11, VAR_12, VAR_13;

    int VAR_14, VAR_15, VAR_16, VAR_17;

    int64_t multres;



    if (!VAR_5) {

        

        SAMPLES_NEEDED

        for (VAR_7 = 0; VAR_7 < VAR_3; VAR_7++)

            for (VAR_8 = 0; VAR_8 < 30; VAR_8++) {

                for (VAR_9 = 1; VAR_9 < 63; VAR_9++) {  

                    VAR_14 = VAR_0[VAR_7][VAR_8][VAR_9] - 10;

                    if (VAR_14 < 0)

                        VAR_14 = 0;

                    VAR_15 = VAR_16 = VAR_17 = 0;

                    if (VAR_8 > 1) {

                        VAR_15 = VAR_0[VAR_7][VAR_8 - 2][VAR_9] + tone_level_idx_offset_table[VAR_8][0] - 6;

                        if (VAR_15 < 0)

                            VAR_15 = 0;

                    }

                    if (VAR_8 > 0) {

                        VAR_16 = VAR_0[VAR_7][VAR_8 - 1][VAR_9] + tone_level_idx_offset_table[VAR_8][1] - 6;

                        if (VAR_16 < 0)

                            VAR_16 = 0;

                    }

                    if (VAR_8 < 29) {

                        VAR_17 = VAR_0[VAR_7][VAR_8 + 1][VAR_9] + tone_level_idx_offset_table[VAR_8][3] - 6;

                        if (VAR_17 < 0)

                            VAR_17 = 0;

                    }

                    VAR_10 = VAR_0[VAR_7][VAR_8][VAR_9 + 1] * 2 - VAR_17 - VAR_16 - VAR_15 - VAR_14;

                    if (VAR_10 < 0)

                        VAR_10 = 0;

                    VAR_1[VAR_7][VAR_8][VAR_9 + 1] = VAR_10 & 0xff;

                }

                VAR_1[VAR_7][VAR_8][0] = VAR_1[VAR_7][VAR_8][1];

            }

            VAR_11 = 0;

            for (VAR_7 = 0; VAR_7 < VAR_3; VAR_7++)

                for (VAR_8 = 0; VAR_8 < 30; VAR_8++)

                    for (VAR_9 = 0; VAR_9 < 64; VAR_9++)

                        VAR_11 += VAR_1[VAR_7][VAR_8][VAR_9];



            multres = 0x66666667 * (VAR_11 * 10);

            VAR_12 = (multres >> 32) / 8 + ((multres & 0xffffffff) >> 31);

            for (VAR_7 = 0;  VAR_7 < VAR_3; VAR_7++)

                for (VAR_8 = 0; VAR_8 < 30; VAR_8++)

                    for (VAR_9 = 0; VAR_9 < 64; VAR_9++) {

                        VAR_13 = VAR_1[VAR_7][VAR_8][VAR_9]* VAR_12 * 10;

                        if (VAR_13 < 0)

                            VAR_13 += 0xff;

                        VAR_13 /= 256; 

                        switch(VAR_8) {

                            case 0:

                                if (VAR_13 < 30)

                                    VAR_13 = 30;

                                VAR_13 += 15;

                                break;

                            case 1:

                                if (VAR_13 < 24)

                                    VAR_13 = 24;

                                VAR_13 += 10;

                                break;

                            case 2:

                            case 3:

                            case 4:

                                if (VAR_13 < 16)

                                    VAR_13 = 16;

                        }

                        if (VAR_13 <= 5)

                            VAR_10 = 0;

                        else if (VAR_13 <= 10)

                            VAR_10 = 10;

                        else if (VAR_13 <= 16)

                            VAR_10 = 16;

                        else if (VAR_13 <= 24)

                            VAR_10 = -1;

                        else

                            VAR_10 = 0;

                        VAR_2[VAR_7][VAR_8][VAR_9] = ((VAR_10 & 0xfffa) + 30 )& 0xff;

                    }

            for (VAR_8 = 0; VAR_8 < 30; VAR_8++)

                fix_coding_method_array(VAR_8, VAR_3, VAR_2);

            for (VAR_7 = 0; VAR_7 < VAR_3; VAR_7++)

                for (VAR_8 = 0; VAR_8 < 30; VAR_8++)

                    for (VAR_9 = 0; VAR_9 < 64; VAR_9++)

                        if (VAR_8 >= 10) {

                            if (VAR_2[VAR_7][VAR_8][VAR_9] < 10)

                                VAR_2[VAR_7][VAR_8][VAR_9] = 10;

                        } else {

                            if (VAR_8 >= 2) {

                                if (VAR_2[VAR_7][VAR_8][VAR_9] < 16)

                                    VAR_2[VAR_7][VAR_8][VAR_9] = 16;

                            } else {

                                if (VAR_2[VAR_7][VAR_8][VAR_9] < 30)

                                    VAR_2[VAR_7][VAR_8][VAR_9] = 30;

                            }

                        }

    } else { 

        for (VAR_7 = 0; VAR_7 < VAR_3; VAR_7++)

            for (VAR_8 = 0; VAR_8 < 30; VAR_8++)

                for (VAR_9 = 0; VAR_9 < 64; VAR_9++)

                    VAR_2[VAR_7][VAR_8][VAR_9] = coding_method_table[VAR_6][VAR_8];

    }

}

static void FUNC_0(sb_int8_array VAR_0,
sb_int8_array VAR_1,
sb_int8_array VAR_2,
int VAR_3,
int VAR_4, int VAR_5,
int VAR_6)
{ int VAR_7, VAR_8, VAR_9; int VAR_10, VAR_11, VAR_12, VAR_13; int VAR_14, VAR_15, VAR_16, VAR_17; int64_t multres; if (!VAR_5) { SAMPLES_NEEDED
for (VAR_7 = 0; VAR_7 < VAR_3; VAR_7++) for (VAR_8 = 0; VAR_8 < 30; VAR_8++) { for (VAR_9 = 1; VAR_9 < 63; VAR_9++) { VAR_14 = VAR_0[VAR_7][VAR_8][VAR_9] - 10; if (VAR_14 < 0)
VAR_14 = 0; VAR_15 = VAR_16 = VAR_17 = 0; if (VAR_8 > 1) { VAR_15 = VAR_0[VAR_7][VAR_8 - 2][VAR_9] + tone_level_idx_offset_table[VAR_8][0] - 6; if (VAR_15 < 0)
VAR_15 = 0; } if (VAR_8 > 0) { VAR_16 = VAR_0[VAR_7][VAR_8 - 1][VAR_9] + tone_level_idx_offset_table[VAR_8][1] - 6; if (VAR_16 < 0)
VAR_16 = 0; } if (VAR_8 < 29) { VAR_17 = VAR_0[VAR_7][VAR_8 + 1][VAR_9] + tone_level_idx_offset_table[VAR_8][3] - 6; if (VAR_17 < 0)
VAR_17 = 0; } VAR_10 = VAR_0[VAR_7][VAR_8][VAR_9 + 1] * 2 - VAR_17 - VAR_16 - VAR_15 - VAR_14; if (VAR_10 < 0)
VAR_10 = 0; VAR_1[VAR_7][VAR_8][VAR_9 + 1] = VAR_10 & 0xff; } VAR_1[VAR_7][VAR_8][0] = VAR_1[VAR_7][VAR_8][1]; } VAR_11 = 0; for (VAR_7 = 0; VAR_7 < VAR_3; VAR_7++) for (VAR_8 = 0; VAR_8 < 30; VAR_8++) for (VAR_9 = 0; VAR_9 < 64; VAR_9++) VAR_11 += VAR_1[VAR_7][VAR_8][VAR_9]; multres = 0x66666667 * (VAR_11 * 10); VAR_12 = (multres >> 32) / 8 + ((multres & 0xffffffff) >> 31); for (VAR_7 = 0;  VAR_7 < VAR_3; VAR_7++) for (VAR_8 = 0; VAR_8 < 30; VAR_8++) for (VAR_9 = 0; VAR_9 < 64; VAR_9++) { VAR_13 = VAR_1[VAR_7][VAR_8][VAR_9]* VAR_12 * 10; if (VAR_13 < 0)
VAR_13 += 0xff; VAR_13 /= 256; switch(VAR_8) { case 0:
if (VAR_13 < 30)
VAR_13 = 30; VAR_13 += 15; break; case 1:
if (VAR_13 < 24)
VAR_13 = 24; VAR_13 += 10; break; case 2:
case 3:
case 4:
if (VAR_13 < 16)
VAR_13 = 16; } if (VAR_13 <= 5)
VAR_10 = 0; else if (VAR_13 <= 10)
VAR_10 = 10; else if (VAR_13 <= 16)
VAR_10 = 16; else if (VAR_13 <= 24)
VAR_10 = -1; else
VAR_10 = 0; VAR_2[VAR_7][VAR_8][VAR_9] = ((VAR_10 & 0xfffa) + 30 )& 0xff; } for (VAR_8 = 0; VAR_8 < 30; VAR_8++) fix_coding_method_array(VAR_8, VAR_3, VAR_2); for (VAR_7 = 0; VAR_7 < VAR_3; VAR_7++) for (VAR_8 = 0; VAR_8 < 30; VAR_8++) for (VAR_9 = 0; VAR_9 < 64; VAR_9++) if (VAR_8 >= 10) { if (VAR_2[VAR_7][VAR_8][VAR_9] < 10)
VAR_2[VAR_7][VAR_8][VAR_9] = 10; } else { if (VAR_8 >= 2) { if (VAR_2[VAR_7][VAR_8][VAR_9] < 16)
VAR_2[VAR_7][VAR_8][VAR_9] = 16; } else { if (VAR_2[VAR_7][VAR_8][VAR_9] < 30)
VAR_2[VAR_7][VAR_8][VAR_9] = 30; } } } else { for (VAR_7 = 0; VAR_7 < VAR_3; VAR_7++) for (VAR_8 = 0; VAR_8 < 30; VAR_8++) for (VAR_9 = 0; VAR_9 < 64; VAR_9++) VAR_2[VAR_7][VAR_8][VAR_9] = coding_method_table[VAR_6][VAR_8]; } }