static inline void idctSparseColAdd (uint8_t *dest, int line_size,
                                     DCTELEM * col)
{
        int a0, a1, a2, a3, b0, b1, b2, b3;
        uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
        a0 = W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4));
        a1 = a0;
        a2 = a0;
        a3 = a0;
        a0 +=  + W2*col[8*2];
        a1 +=  + W6*col[8*2];
        a2 +=  - W6*col[8*2];
        a3 +=  - W2*col[8*2];
        MUL16(b0, W1, col[8*1]);
        MUL16(b1, W3, col[8*1]);
        MUL16(b2, W5, col[8*1]);
        MUL16(b3, W7, col[8*1]);
        MAC16(b0, + W3, col[8*3]);
        MAC16(b1, - W7, col[8*3]);
        MAC16(b2, - W1, col[8*3]);
        MAC16(b3, - W5, col[8*3]);
        if(col[8*4]){
            a0 += + W4*col[8*4];
            a1 += - W4*col[8*4];
            a2 += - W4*col[8*4];
            a3 += + W4*col[8*4];
        }
        if (col[8*5]) {
            MAC16(b0, + W5, col[8*5]);
            MAC16(b1, - W1, col[8*5]);
            MAC16(b2, + W7, col[8*5]);
            MAC16(b3, + W3, col[8*5]);
        }
        if(col[8*6]){
            a0 += + W6*col[8*6];
            a1 += - W2*col[8*6];
            a2 += + W2*col[8*6];
            a3 += - W6*col[8*6];
        }
        if (col[8*7]) {
            MAC16(b0, + W7, col[8*7]);
            MAC16(b1, - W5, col[8*7]);
            MAC16(b2, + W3, col[8*7]);
            MAC16(b3, - W1, col[8*7]);
        }
        dest[0] = cm[dest[0] + ((a0 + b0) >> COL_SHIFT)];
        dest += line_size;
        dest[0] = cm[dest[0] + ((a1 + b1) >> COL_SHIFT)];
        dest += line_size;
        dest[0] = cm[dest[0] + ((a2 + b2) >> COL_SHIFT)];
        dest += line_size;
        dest[0] = cm[dest[0] + ((a3 + b3) >> COL_SHIFT)];
        dest += line_size;
        dest[0] = cm[dest[0] + ((a3 - b3) >> COL_SHIFT)];
        dest += line_size;
        dest[0] = cm[dest[0] + ((a2 - b2) >> COL_SHIFT)];
        dest += line_size;
        dest[0] = cm[dest[0] + ((a1 - b1) >> COL_SHIFT)];
        dest += line_size;
        dest[0] = cm[dest[0] + ((a0 - b0) >> COL_SHIFT)];
}
['void ff_wmv2_add_mb(MpegEncContext *s, DCTELEM block1[6][64], uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr){\n    Wmv2Context * const w= (Wmv2Context*)s;\n    wmv2_add_block(w, block1[0], dest_y                    , s->linesize, 0);\n    wmv2_add_block(w, block1[1], dest_y + 8                , s->linesize, 1);\n    wmv2_add_block(w, block1[2], dest_y +     8*s->linesize, s->linesize, 2);\n    wmv2_add_block(w, block1[3], dest_y + 8 + 8*s->linesize, s->linesize, 3);\n    if(s->flags&CODEC_FLAG_GRAY) return;\n    wmv2_add_block(w, block1[4], dest_cb                   , s->uvlinesize, 4);\n    wmv2_add_block(w, block1[5], dest_cr                   , s->uvlinesize, 5);\n}', 'static void wmv2_add_block(Wmv2Context *w, DCTELEM *block1, uint8_t *dst, int stride, int n){\n    MpegEncContext * const s= &w->s;\n  if (s->block_last_index[n] >= 0) {\n    switch(w->abt_type_table[n]){\n    case 0:\n        s->dsp.idct_add (dst, stride, block1);\n        break;\n    case 1:\n        ff_simple_idct84_add(dst           , stride, block1);\n        ff_simple_idct84_add(dst + 4*stride, stride, w->abt_block2[n]);\n        memset(w->abt_block2[n], 0, 64*sizeof(DCTELEM));\n        break;\n    case 2:\n        ff_simple_idct48_add(dst           , stride, block1);\n        ff_simple_idct48_add(dst + 4       , stride, w->abt_block2[n]);\n        memset(w->abt_block2[n], 0, 64*sizeof(DCTELEM));\n        break;\n    default:\n        av_log(s->avctx, AV_LOG_ERROR, "internal error in WMV2 abt\\n");\n    }\n  }\n}', 'void ff_simple_idct48_add(uint8_t *dest, int line_size, DCTELEM *block)\n{\n    int i;\n    for(i=0; i<8; i++) {\n        idct4row(block + i*8);\n    }\n    for(i=0; i<4; i++){\n        idctSparseColAdd(dest + i, line_size, block + i);\n    }\n}', 'static inline void idctSparseColAdd (uint8_t *dest, int line_size,\n                                     DCTELEM * col)\n{\n        int a0, a1, a2, a3, b0, b1, b2, b3;\n        uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\n        a0 = W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4));\n        a1 = a0;\n        a2 = a0;\n        a3 = a0;\n        a0 +=  + W2*col[8*2];\n        a1 +=  + W6*col[8*2];\n        a2 +=  - W6*col[8*2];\n        a3 +=  - W2*col[8*2];\n        MUL16(b0, W1, col[8*1]);\n        MUL16(b1, W3, col[8*1]);\n        MUL16(b2, W5, col[8*1]);\n        MUL16(b3, W7, col[8*1]);\n        MAC16(b0, + W3, col[8*3]);\n        MAC16(b1, - W7, col[8*3]);\n        MAC16(b2, - W1, col[8*3]);\n        MAC16(b3, - W5, col[8*3]);\n        if(col[8*4]){\n            a0 += + W4*col[8*4];\n            a1 += - W4*col[8*4];\n            a2 += - W4*col[8*4];\n            a3 += + W4*col[8*4];\n        }\n        if (col[8*5]) {\n            MAC16(b0, + W5, col[8*5]);\n            MAC16(b1, - W1, col[8*5]);\n            MAC16(b2, + W7, col[8*5]);\n            MAC16(b3, + W3, col[8*5]);\n        }\n        if(col[8*6]){\n            a0 += + W6*col[8*6];\n            a1 += - W2*col[8*6];\n            a2 += + W2*col[8*6];\n            a3 += - W6*col[8*6];\n        }\n        if (col[8*7]) {\n            MAC16(b0, + W7, col[8*7]);\n            MAC16(b1, - W5, col[8*7]);\n            MAC16(b2, + W3, col[8*7]);\n            MAC16(b3, - W1, col[8*7]);\n        }\n        dest[0] = cm[dest[0] + ((a0 + b0) >> COL_SHIFT)];\n        dest += line_size;\n        dest[0] = cm[dest[0] + ((a1 + b1) >> COL_SHIFT)];\n        dest += line_size;\n        dest[0] = cm[dest[0] + ((a2 + b2) >> COL_SHIFT)];\n        dest += line_size;\n        dest[0] = cm[dest[0] + ((a3 + b3) >> COL_SHIFT)];\n        dest += line_size;\n        dest[0] = cm[dest[0] + ((a3 - b3) >> COL_SHIFT)];\n        dest += line_size;\n        dest[0] = cm[dest[0] + ((a2 - b2) >> COL_SHIFT)];\n        dest += line_size;\n        dest[0] = cm[dest[0] + ((a1 - b1) >> COL_SHIFT)];\n        dest += line_size;\n        dest[0] = cm[dest[0] + ((a0 - b0) >> COL_SHIFT)];\n}']