decode_coeffs_b_generic(VP56RangeCoder *c, int16_t *coef, int n_coeffs,

                        int is_tx32x32, int is8bitsperpixel, int bpp, unsigned (*cnt)[6][3],

                        unsigned (*eob)[6][2], uint8_t (*p)[6][11],

                        int nnz, const int16_t *scan, const int16_t (*nb)[2],

                        const int16_t *band_counts, const int16_t *qmul)

{

    int i = 0, band = 0, band_left = band_counts[band];

    uint8_t *tp = p[0][nnz];

    uint8_t cache[1024];



    do {

        int val, rc;



        val = vp56_rac_get_prob_branchy(c, tp[0]); // eob

        eob[band][nnz][val]++;

        if (!val)

            break;



skip_eob:

        if (!vp56_rac_get_prob_branchy(c, tp[1])) { // zero

            cnt[band][nnz][0]++;

            if (!--band_left)

                band_left = band_counts[++band];

            cache[scan[i]] = 0;

            nnz            = (1 + cache[nb[i][0]] + cache[nb[i][1]]) >> 1;

            tp             = p[band][nnz];

            if (++i == n_coeffs)

                break;  //invalid input; blocks should end with EOB

            goto skip_eob;

        }



        rc = scan[i];

        if (!vp56_rac_get_prob_branchy(c, tp[2])) { // one

            cnt[band][nnz][1]++;

            val       = 1;

            cache[rc] = 1;

        } else {

            // fill in p[3-10] (model fill) - only once per frame for each pos

            if (!tp[3])

                memcpy(&tp[3], ff_vp9_model_pareto8[tp[2]], 8);



            cnt[band][nnz][2]++;

            if (!vp56_rac_get_prob_branchy(c, tp[3])) { // 2, 3, 4

                if (!vp56_rac_get_prob_branchy(c, tp[4])) {

                    cache[rc] = val = 2;

                } else {

                    val       = 3 + vp56_rac_get_prob(c, tp[5]);

                    cache[rc] = 3;

                }

            } else if (!vp56_rac_get_prob_branchy(c, tp[6])) { // cat1/2

                cache[rc] = 4;

                if (!vp56_rac_get_prob_branchy(c, tp[7])) {

                    val  =  vp56_rac_get_prob(c, 159) + 5;

                } else {

                    val  = (vp56_rac_get_prob(c, 165) << 1) + 7;

                    val +=  vp56_rac_get_prob(c, 145);

                }

            } else { // cat 3-6

                cache[rc] = 5;

                if (!vp56_rac_get_prob_branchy(c, tp[8])) {

                    if (!vp56_rac_get_prob_branchy(c, tp[9])) {

                        val  = 11 + (vp56_rac_get_prob(c, 173) << 2);

                        val +=      (vp56_rac_get_prob(c, 148) << 1);

                        val +=       vp56_rac_get_prob(c, 140);

                    } else {

                        val  = 19 + (vp56_rac_get_prob(c, 176) << 3);

                        val +=      (vp56_rac_get_prob(c, 155) << 2);

                        val +=      (vp56_rac_get_prob(c, 140) << 1);

                        val +=       vp56_rac_get_prob(c, 135);

                    }

                } else if (!vp56_rac_get_prob_branchy(c, tp[10])) {

                    val  = (vp56_rac_get_prob(c, 180) << 4) + 35;

                    val += (vp56_rac_get_prob(c, 157) << 3);

                    val += (vp56_rac_get_prob(c, 141) << 2);

                    val += (vp56_rac_get_prob(c, 134) << 1);

                    val +=  vp56_rac_get_prob(c, 130);

                } else {

                    val = 67;

                    if (!is8bitsperpixel) {

                        if (bpp == 12) {

                            val += vp56_rac_get_prob(c, 255) << 17;

                            val += vp56_rac_get_prob(c, 255) << 16;

                        }

                        val +=  (vp56_rac_get_prob(c, 255) << 15);

                        val +=  (vp56_rac_get_prob(c, 255) << 14);

                    }

                    val += (vp56_rac_get_prob(c, 254) << 13);

                    val += (vp56_rac_get_prob(c, 254) << 12);

                    val += (vp56_rac_get_prob(c, 254) << 11);

                    val += (vp56_rac_get_prob(c, 252) << 10);

                    val += (vp56_rac_get_prob(c, 249) << 9);

                    val += (vp56_rac_get_prob(c, 243) << 8);

                    val += (vp56_rac_get_prob(c, 230) << 7);

                    val += (vp56_rac_get_prob(c, 196) << 6);

                    val += (vp56_rac_get_prob(c, 177) << 5);

                    val += (vp56_rac_get_prob(c, 153) << 4);

                    val += (vp56_rac_get_prob(c, 140) << 3);

                    val += (vp56_rac_get_prob(c, 133) << 2);

                    val += (vp56_rac_get_prob(c, 130) << 1);

                    val +=  vp56_rac_get_prob(c, 129);

                }

            }

        }

#define STORE_COEF(c, i, v) do { \

    if (is8bitsperpixel) { \

        c[i] = v; \

    } else { \

        AV_WN32A(&c[i * 2], v); \

    } \

} while (0)

        if (!--band_left)

            band_left = band_counts[++band];

        if (is_tx32x32)

            STORE_COEF(coef, rc, ((vp8_rac_get(c) ? -val : val) * qmul[!!i]) / 2);

        else

            STORE_COEF(coef, rc, (vp8_rac_get(c) ? -val : val) * qmul[!!i]);

        nnz = (1 + cache[nb[i][0]] + cache[nb[i][1]]) >> 1;

        tp = p[band][nnz];

    } while (++i < n_coeffs);



    return i;

}

decode_coeffs_b_generic(VP56RangeCoder *c, int16_t *coef, int n_coeffs,

                        int is_tx32x32, int is8bitsperpixel, int bpp, unsigned (*cnt)[6][3],

                        unsigned (*eob)[6][2], uint8_t (*p)[6][11],

                        int nnz, const int16_t *scan, const int16_t (*nb)[2],

                        const int16_t *band_counts, const int16_t *qmul)

{

    int i = 0, band = 0, band_left = band_counts[band];

    uint8_t *tp = p[0][nnz];

    uint8_t cache[1024];



    do {

        int val, rc;



        val = vp56_rac_get_prob_branchy(c, tp[0]); 

        eob[band][nnz][val]++;

        if (!val)

            break;



skip_eob:

        if (!vp56_rac_get_prob_branchy(c, tp[1])) { 

            cnt[band][nnz][0]++;

            if (!--band_left)

                band_left = band_counts[++band];

            cache[scan[i]] = 0;

            nnz            = (1 + cache[nb[i][0]] + cache[nb[i][1]]) >> 1;

            tp             = p[band][nnz];

            if (++i == n_coeffs)

                break;  

            goto skip_eob;

        }



        rc = scan[i];

        if (!vp56_rac_get_prob_branchy(c, tp[2])) { 

            cnt[band][nnz][1]++;

            val       = 1;

            cache[rc] = 1;

        } else {

            

            if (!tp[3])

                memcpy(&tp[3], ff_vp9_model_pareto8[tp[2]], 8);



            cnt[band][nnz][2]++;

            if (!vp56_rac_get_prob_branchy(c, tp[3])) { 

                if (!vp56_rac_get_prob_branchy(c, tp[4])) {

                    cache[rc] = val = 2;

                } else {

                    val       = 3 + vp56_rac_get_prob(c, tp[5]);

                    cache[rc] = 3;

                }

            } else if (!vp56_rac_get_prob_branchy(c, tp[6])) { 

                cache[rc] = 4;

                if (!vp56_rac_get_prob_branchy(c, tp[7])) {

                    val  =  vp56_rac_get_prob(c, 159) + 5;

                } else {

                    val  = (vp56_rac_get_prob(c, 165) << 1) + 7;

                    val +=  vp56_rac_get_prob(c, 145);

                }

            } else { 

                cache[rc] = 5;

                if (!vp56_rac_get_prob_branchy(c, tp[8])) {

                    if (!vp56_rac_get_prob_branchy(c, tp[9])) {

                        val  = 11 + (vp56_rac_get_prob(c, 173) << 2);

                        val +=      (vp56_rac_get_prob(c, 148) << 1);

                        val +=       vp56_rac_get_prob(c, 140);

                    } else {

                        val  = 19 + (vp56_rac_get_prob(c, 176) << 3);

                        val +=      (vp56_rac_get_prob(c, 155) << 2);

                        val +=      (vp56_rac_get_prob(c, 140) << 1);

                        val +=       vp56_rac_get_prob(c, 135);

                    }

                } else if (!vp56_rac_get_prob_branchy(c, tp[10])) {

                    val  = (vp56_rac_get_prob(c, 180) << 4) + 35;

                    val += (vp56_rac_get_prob(c, 157) << 3);

                    val += (vp56_rac_get_prob(c, 141) << 2);

                    val += (vp56_rac_get_prob(c, 134) << 1);

                    val +=  vp56_rac_get_prob(c, 130);

                } else {

                    val = 67;

                    if (!is8bitsperpixel) {

                        if (bpp == 12) {

                            val += vp56_rac_get_prob(c, 255) << 17;

                            val += vp56_rac_get_prob(c, 255) << 16;

                        }

                        val +=  (vp56_rac_get_prob(c, 255) << 15);

                        val +=  (vp56_rac_get_prob(c, 255) << 14);

                    }

                    val += (vp56_rac_get_prob(c, 254) << 13);

                    val += (vp56_rac_get_prob(c, 254) << 12);

                    val += (vp56_rac_get_prob(c, 254) << 11);

                    val += (vp56_rac_get_prob(c, 252) << 10);

                    val += (vp56_rac_get_prob(c, 249) << 9);

                    val += (vp56_rac_get_prob(c, 243) << 8);

                    val += (vp56_rac_get_prob(c, 230) << 7);

                    val += (vp56_rac_get_prob(c, 196) << 6);

                    val += (vp56_rac_get_prob(c, 177) << 5);

                    val += (vp56_rac_get_prob(c, 153) << 4);

                    val += (vp56_rac_get_prob(c, 140) << 3);

                    val += (vp56_rac_get_prob(c, 133) << 2);

                    val += (vp56_rac_get_prob(c, 130) << 1);

                    val +=  vp56_rac_get_prob(c, 129);

                }

            }

        }

#define STORE_COEF(c, i, v) do { \

    if (is8bitsperpixel) { \

        c[i] = v; \

    } else { \

        AV_WN32A(&c[i * 2], v); \

    } \

} while (0)

        if (!--band_left)

            band_left = band_counts[++band];

        if (is_tx32x32)

            STORE_COEF(coef, rc, ((vp8_rac_get(c) ? -val : val) * qmul[!!i]) / 2);

        else

            STORE_COEF(coef, rc, (vp8_rac_get(c) ? -val : val) * qmul[!!i]);

        nnz = (1 + cache[nb[i][0]] + cache[nb[i][1]]) >> 1;

        tp = p[band][nnz];

    } while (++i < n_coeffs);



    return i;

}

            STORE_COEF(coef, rc, ((vp8_rac_get(c) ? -val : val) * qmul[!!i]) / 2);             STORE_COEF(coef, rc, (vp8_rac_get(c) ? -val : val) * qmul[!!i]);
FUNC_0(VP56RangeCoder *VAR_0, VAR_11 *VAR_1, int VAR_2,

                        int VAR_3, int VAR_4, int VAR_5, unsigned (*VAR_6)[6][3],

                        unsigned (*VAR_7)[6][2], VAR_8 (*p)[6][11],

                        int VAR_9, const VAR_11 *VAR_10, const VAR_11 (*nb)[2],

                        const VAR_11 *VAR_12, const VAR_11 *VAR_13)

{

    int VAR_14 = 0, VAR_15 = 0, VAR_16 = VAR_12[VAR_15];

    VAR_8 *tp = p[0][VAR_9];

    VAR_8 cache[1024];



    do {

        int VAR_17, VAR_18;



        VAR_17 = vp56_rac_get_prob_branchy(VAR_0, tp[0]); 

        VAR_7[VAR_15][VAR_9][VAR_17]++;

        if (!VAR_17)

            break;



skip_eob:

        if (!vp56_rac_get_prob_branchy(VAR_0, tp[1])) { 

            VAR_6[VAR_15][VAR_9][0]++;

            if (!--VAR_16)

                VAR_16 = VAR_12[++VAR_15];

            cache[VAR_10[VAR_14]] = 0;

            VAR_9            = (1 + cache[nb[VAR_14][0]] + cache[nb[VAR_14][1]]) >> 1;

            tp             = p[VAR_15][VAR_9];

            if (++VAR_14 == VAR_2)

                break;  

            goto skip_eob;

        }



        VAR_18 = VAR_10[VAR_14];

        if (!vp56_rac_get_prob_branchy(VAR_0, tp[2])) { 

            VAR_6[VAR_15][VAR_9][1]++;

            VAR_17       = 1;

            cache[VAR_18] = 1;

        } else {

            

            if (!tp[3])

                memcpy(&tp[3], ff_vp9_model_pareto8[tp[2]], 8);



            VAR_6[VAR_15][VAR_9][2]++;

            if (!vp56_rac_get_prob_branchy(VAR_0, tp[3])) { 

                if (!vp56_rac_get_prob_branchy(VAR_0, tp[4])) {

                    cache[VAR_18] = VAR_17 = 2;

                } else {

                    VAR_17       = 3 + vp56_rac_get_prob(VAR_0, tp[5]);

                    cache[VAR_18] = 3;

                }

            } else if (!vp56_rac_get_prob_branchy(VAR_0, tp[6])) { 

                cache[VAR_18] = 4;

                if (!vp56_rac_get_prob_branchy(VAR_0, tp[7])) {

                    VAR_17  =  vp56_rac_get_prob(VAR_0, 159) + 5;

                } else {

                    VAR_17  = (vp56_rac_get_prob(VAR_0, 165) << 1) + 7;

                    VAR_17 +=  vp56_rac_get_prob(VAR_0, 145);

                }

            } else { 

                cache[VAR_18] = 5;

                if (!vp56_rac_get_prob_branchy(VAR_0, tp[8])) {

                    if (!vp56_rac_get_prob_branchy(VAR_0, tp[9])) {

                        VAR_17  = 11 + (vp56_rac_get_prob(VAR_0, 173) << 2);

                        VAR_17 +=      (vp56_rac_get_prob(VAR_0, 148) << 1);

                        VAR_17 +=       vp56_rac_get_prob(VAR_0, 140);

                    } else {

                        VAR_17  = 19 + (vp56_rac_get_prob(VAR_0, 176) << 3);

                        VAR_17 +=      (vp56_rac_get_prob(VAR_0, 155) << 2);

                        VAR_17 +=      (vp56_rac_get_prob(VAR_0, 140) << 1);

                        VAR_17 +=       vp56_rac_get_prob(VAR_0, 135);

                    }

                } else if (!vp56_rac_get_prob_branchy(VAR_0, tp[10])) {

                    VAR_17  = (vp56_rac_get_prob(VAR_0, 180) << 4) + 35;

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 157) << 3);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 141) << 2);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 134) << 1);

                    VAR_17 +=  vp56_rac_get_prob(VAR_0, 130);

                } else {

                    VAR_17 = 67;

                    if (!VAR_4) {

                        if (VAR_5 == 12) {

                            VAR_17 += vp56_rac_get_prob(VAR_0, 255) << 17;

                            VAR_17 += vp56_rac_get_prob(VAR_0, 255) << 16;

                        }

                        VAR_17 +=  (vp56_rac_get_prob(VAR_0, 255) << 15);

                        VAR_17 +=  (vp56_rac_get_prob(VAR_0, 255) << 14);

                    }

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 254) << 13);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 254) << 12);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 254) << 11);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 252) << 10);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 249) << 9);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 243) << 8);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 230) << 7);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 196) << 6);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 177) << 5);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 153) << 4);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 140) << 3);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 133) << 2);

                    VAR_17 += (vp56_rac_get_prob(VAR_0, 130) << 1);

                    VAR_17 +=  vp56_rac_get_prob(VAR_0, 129);

                }

            }

        }

#define STORE_COEF(VAR_0, VAR_14, v) do { \

    if (VAR_4) { \

        VAR_0[VAR_14] = v; \

    } else { \

        AV_WN32A(&VAR_0[VAR_14 * 2], v); \

    } \

} while (0)

        if (!--VAR_16)

            VAR_16 = VAR_12[++VAR_15];

        if (VAR_3)

            STORE_COEF(VAR_1, VAR_18, ((vp8_rac_get(VAR_0) ? -VAR_17 : VAR_17) * VAR_13[!!VAR_14]) / 2);

        else

            STORE_COEF(VAR_1, VAR_18, (vp8_rac_get(VAR_0) ? -VAR_17 : VAR_17) * VAR_13[!!VAR_14]);

        VAR_9 = (1 + cache[nb[VAR_14][0]] + cache[nb[VAR_14][1]]) >> 1;

        tp = p[VAR_15][VAR_9];

    } while (++VAR_14 < VAR_2);



    return VAR_14;

}

FUNC_0(VP56RangeCoder *VAR_0, VAR_11 *VAR_1, int VAR_2,
int VAR_3, int VAR_4, int VAR_5, unsigned (*VAR_6)[6][3],
unsigned (*VAR_7)[6][2], VAR_8 (*p)[6][11],
int VAR_9, const VAR_11 *VAR_10, const VAR_11 (*nb)[2],
const VAR_11 *VAR_12, const VAR_11 *VAR_13)
{ int VAR_14 = 0, VAR_15 = 0, VAR_16 = VAR_12[VAR_15]; VAR_8 *tp = p[0][VAR_9]; VAR_8 cache[1024]; do { int VAR_17, VAR_18; VAR_17 = vp56_rac_get_prob_branchy(VAR_0, tp[0]); VAR_7[VAR_15][VAR_9][VAR_17]++; if (!VAR_17)
break; skip_eob:
if (!vp56_rac_get_prob_branchy(VAR_0, tp[1])) { VAR_6[VAR_15][VAR_9][0]++; if (!--VAR_16)
VAR_16 = VAR_12[++VAR_15]; cache[VAR_10[VAR_14]] = 0; VAR_9            = (1 + cache[nb[VAR_14][0]] + cache[nb[VAR_14][1]]) >> 1; tp             = p[VAR_15][VAR_9]; if (++VAR_14 == VAR_2)
break; goto skip_eob; } VAR_18 = VAR_10[VAR_14]; if (!vp56_rac_get_prob_branchy(VAR_0, tp[2])) { VAR_6[VAR_15][VAR_9][1]++; VAR_17       = 1; cache[VAR_18] = 1; } else { if (!tp[3])
memcpy(&tp[3], ff_vp9_model_pareto8[tp[2]], 8); VAR_6[VAR_15][VAR_9][2]++; if (!vp56_rac_get_prob_branchy(VAR_0, tp[3])) { if (!vp56_rac_get_prob_branchy(VAR_0, tp[4])) { cache[VAR_18] = VAR_17 = 2; } else { VAR_17       = 3 + vp56_rac_get_prob(VAR_0, tp[5]); cache[VAR_18] = 3; } } else if (!vp56_rac_get_prob_branchy(VAR_0, tp[6])) { cache[VAR_18] = 4; if (!vp56_rac_get_prob_branchy(VAR_0, tp[7])) { VAR_17  =  vp56_rac_get_prob(VAR_0, 159) + 5; } else { VAR_17  = (vp56_rac_get_prob(VAR_0, 165) << 1) + 7; VAR_17 +=  vp56_rac_get_prob(VAR_0, 145); } } else { cache[VAR_18] = 5; if (!vp56_rac_get_prob_branchy(VAR_0, tp[8])) { if (!vp56_rac_get_prob_branchy(VAR_0, tp[9])) { VAR_17  = 11 + (vp56_rac_get_prob(VAR_0, 173) << 2); VAR_17 +=      (vp56_rac_get_prob(VAR_0, 148) << 1); VAR_17 +=       vp56_rac_get_prob(VAR_0, 140); } else { VAR_17  = 19 + (vp56_rac_get_prob(VAR_0, 176) << 3); VAR_17 +=      (vp56_rac_get_prob(VAR_0, 155) << 2); VAR_17 +=      (vp56_rac_get_prob(VAR_0, 140) << 1); VAR_17 +=       vp56_rac_get_prob(VAR_0, 135); } } else if (!vp56_rac_get_prob_branchy(VAR_0, tp[10])) { VAR_17  = (vp56_rac_get_prob(VAR_0, 180) << 4) + 35; VAR_17 += (vp56_rac_get_prob(VAR_0, 157) << 3); VAR_17 += (vp56_rac_get_prob(VAR_0, 141) << 2); VAR_17 += (vp56_rac_get_prob(VAR_0, 134) << 1); VAR_17 +=  vp56_rac_get_prob(VAR_0, 130); } else { VAR_17 = 67; if (!VAR_4) { if (VAR_5 == 12) { VAR_17 += vp56_rac_get_prob(VAR_0, 255) << 17; VAR_17 += vp56_rac_get_prob(VAR_0, 255) << 16; } VAR_17 +=  (vp56_rac_get_prob(VAR_0, 255) << 15); VAR_17 +=  (vp56_rac_get_prob(VAR_0, 255) << 14); } VAR_17 += (vp56_rac_get_prob(VAR_0, 254) << 13); VAR_17 += (vp56_rac_get_prob(VAR_0, 254) << 12); VAR_17 += (vp56_rac_get_prob(VAR_0, 254) << 11); VAR_17 += (vp56_rac_get_prob(VAR_0, 252) << 10); VAR_17 += (vp56_rac_get_prob(VAR_0, 249) << 9); VAR_17 += (vp56_rac_get_prob(VAR_0, 243) << 8); VAR_17 += (vp56_rac_get_prob(VAR_0, 230) << 7); VAR_17 += (vp56_rac_get_prob(VAR_0, 196) << 6); VAR_17 += (vp56_rac_get_prob(VAR_0, 177) << 5); VAR_17 += (vp56_rac_get_prob(VAR_0, 153) << 4); VAR_17 += (vp56_rac_get_prob(VAR_0, 140) << 3); VAR_17 += (vp56_rac_get_prob(VAR_0, 133) << 2); VAR_17 += (vp56_rac_get_prob(VAR_0, 130) << 1); VAR_17 +=  vp56_rac_get_prob(VAR_0, 129); } } } #define STORE_COEF(VAR_0, VAR_14, v) do { \ if (VAR_4) { \ VAR_0[VAR_14] = v; \ } else { \ AV_WN32A(&VAR_0[VAR_14 * 2], v); \ } \ } while (0) if (!--VAR_16)
VAR_16 = VAR_12[++VAR_15]; if (VAR_3)
STORE_COEF(VAR_1, VAR_18, ((vp8_rac_get(VAR_0) ? -VAR_17 : VAR_17) * VAR_13[!!VAR_14]) / 2); else
STORE_COEF(VAR_1, VAR_18, (vp8_rac_get(VAR_0) ? -VAR_17 : VAR_17) * VAR_13[!!VAR_14]); VAR_9 = (1 + cache[nb[VAR_14][0]] + cache[nb[VAR_14][1]]) >> 1; tp = p[VAR_15][VAR_9]; } while (++VAR_14 < VAR_2); return VAR_14; }