/*
  Simple DirectMedia Layer
  Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>

  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.

  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not
     claim that you wrote the original software. If you use this software
     in a product, an acknowledgment in the product documentation would be
     appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.
*/
#include "SDL_config.h"

#if (__GNUC__ > 2) && defined(__i386__) && __OPTIMIZE__ && SDL_ASSEMBLY_ROUTINES

#include "SDL_stdinc.h"

#include "mmx.h"

/* *INDENT-OFF* */

static mmx_t MMX_0080w    = { .ud = {0x00800080, 0x00800080} };
static mmx_t MMX_00FFw    = { .ud = {0x00ff00ff, 0x00ff00ff} };
static mmx_t MMX_FF00w    = { .ud = {0xff00ff00, 0xff00ff00} };

static mmx_t MMX_Ycoeff   = { .uw = {0x004a, 0x004a, 0x004a, 0x004a} };

static mmx_t MMX_UbluRGB  = { .uw = {0x0072, 0x0072, 0x0072, 0x0072} };
static mmx_t MMX_VredRGB  = { .uw = {0x0059, 0x0059, 0x0059, 0x0059} };
static mmx_t MMX_UgrnRGB  = { .uw = {0xffea, 0xffea, 0xffea, 0xffea} };
static mmx_t MMX_VgrnRGB  = { .uw = {0xffd2, 0xffd2, 0xffd2, 0xffd2} };

static mmx_t MMX_Ublu5x5  = { .uw = {0x0081, 0x0081, 0x0081, 0x0081} };
static mmx_t MMX_Vred5x5  = { .uw = {0x0066, 0x0066, 0x0066, 0x0066} };
static mmx_t MMX_Ugrn565  = { .uw = {0xffe8, 0xffe8, 0xffe8, 0xffe8} };
static mmx_t MMX_Vgrn565  = { .uw = {0xffcd, 0xffcd, 0xffcd, 0xffcd} };

static mmx_t MMX_red565   = { .uw = {0xf800, 0xf800, 0xf800, 0xf800} };
static mmx_t MMX_grn565   = { .uw = {0x07e0, 0x07e0, 0x07e0, 0x07e0} };

/**
   This MMX assembler is my first assembler/MMX program ever.
   Thus it maybe buggy.
   Send patches to:
   mvogt@rhrk.uni-kl.de

   After it worked fine I have "obfuscated" the code a bit to have
   more parallism in the MMX units. This means I moved
   initilisation around and delayed other instruction.
   Performance measurement did not show that this brought any advantage
   but in theory it _should_ be faster this way.

   The overall performanve gain to the C based dither was 30%-40%.
   The MMX routine calculates 256bit=8RGB values in each cycle
   (4 for row1 & 4 for row2)

   The red/green/blue.. coefficents are taken from the mpeg_play
   player. They look nice, but I dont know if you can have
   better values, to avoid integer rounding errors.


   IMPORTANT:
   ==========

   It is a requirement that the cr/cb/lum are 8 byte aligned and
   the out are 16byte aligned or you will/may get segfaults

*/

void ColorRGBDitherYV12MMX1X( int *colortab, Uint32 *rgb_2_pix,
                              unsigned char *lum, unsigned char *cr,
                              unsigned char *cb, unsigned char *out,
                              int rows, int cols, int mod )
{
    Uint32 *row1;
    Uint32 *row2;

    unsigned char* y = lum +cols*rows;    /* Pointer to the end */
    int x = 0;
    row1 = (Uint32 *)out;                 /* 32 bit target */
    row2 = (Uint32 *)out+cols+mod;        /* start of second row */
    mod = (mod+cols+mod)*4;               /* increment for row1 in byte */

    __asm__ __volatile__ (
        /* tap dance to workaround the inability to use %%ebx at will... */
        /*  move one thing to the stack... */
        "pushl $0\n"  /* save a slot on the stack. */
        "pushl %%ebx\n"  /* save %%ebx. */
        "movl %0, %%ebx\n"  /* put the thing in ebx. */
        "movl %%ebx,4(%%esp)\n"  /* put the thing in the stack slot. */
        "popl %%ebx\n"  /* get back %%ebx (the PIC register). */

        ".align 8\n"
        "1:\n"

        /* create Cr (result in mm1) */
        "pushl %%ebx\n"
        "movl 4(%%esp),%%ebx\n"
        "movd (%%ebx),%%mm1\n"   /*         0  0  0  0  v3 v2 v1 v0 */
        "popl %%ebx\n"
        "pxor %%mm7,%%mm7\n"      /*         00 00 00 00 00 00 00 00 */
        "movd (%2), %%mm2\n"           /*    0  0  0  0 l3 l2 l1 l0 */
        "punpcklbw %%mm7,%%mm1\n" /*         0  v3 0  v2 00 v1 00 v0 */
        "punpckldq %%mm1,%%mm1\n" /*         00 v1 00 v0 00 v1 00 v0 */
        "psubw %9,%%mm1\n"        /* mm1-128:r1 r1 r0 r0 r1 r1 r0 r0 */

        /* create Cr_g (result in mm0) */
        "movq %%mm1,%%mm0\n"           /* r1 r1 r0 r0 r1 r1 r0 r0 */
        "pmullw %10,%%mm0\n"           /* red*-46dec=0.7136*64 */
        "pmullw %11,%%mm1\n"           /* red*89dec=1.4013*64 */
        "psraw  $6, %%mm0\n"           /* red=red/64 */
        "psraw  $6, %%mm1\n"           /* red=red/64 */

        /* create L1 L2 (result in mm2,mm4) */
        /* L2=lum+cols */
        "movq (%2,%4),%%mm3\n"         /*    0  0  0  0 L3 L2 L1 L0 */
        "punpckldq %%mm3,%%mm2\n"      /*   L3 L2 L1 L0 l3 l2 l1 l0 */
        "movq %%mm2,%%mm4\n"           /*   L3 L2 L1 L0 l3 l2 l1 l0 */
        "pand %12,%%mm2\n"             /*   L3 0  L1  0 l3  0 l1  0 */
        "pand %13,%%mm4\n"             /*   0  L2  0 L0  0 l2  0 l0 */
        "psrlw $8,%%mm2\n"             /*   0  L3  0 L1  0 l3  0 l1 */

        /* create R (result in mm6) */
        "movq %%mm2,%%mm5\n"           /*   0 L3  0 L1  0 l3  0 l1 */
        "movq %%mm4,%%mm6\n"           /*   0 L2  0 L0  0 l2  0 l0 */
        "paddsw  %%mm1, %%mm5\n"       /* lum1+red:x R3 x R1 x r3 x r1 */
        "paddsw  %%mm1, %%mm6\n"       /* lum1+red:x R2 x R0 x r2 x r0 */
        "packuswb %%mm5,%%mm5\n"       /*  R3 R1 r3 r1 R3 R1 r3 r1 */
        "packuswb %%mm6,%%mm6\n"       /*  R2 R0 r2 r0 R2 R0 r2 r0 */
        "pxor %%mm7,%%mm7\n"      /*         00 00 00 00 00 00 00 00 */
        "punpcklbw %%mm5,%%mm6\n"      /*  R3 R2 R1 R0 r3 r2 r1 r0 */

        /* create Cb (result in mm1) */
        "movd (%1), %%mm1\n"      /*         0  0  0  0  u3 u2 u1 u0 */
        "punpcklbw %%mm7,%%mm1\n" /*         0  u3 0  u2 00 u1 00 u0 */
        "punpckldq %%mm1,%%mm1\n" /*         00 u1 00 u0 00 u1 00 u0 */
        "psubw %9,%%mm1\n"        /* mm1-128:u1 u1 u0 u0 u1 u1 u0 u0 */

        /* create Cb_g (result in mm5) */
        "movq %%mm1,%%mm5\n"            /* u1 u1 u0 u0 u1 u1 u0 u0 */
        "pmullw %14,%%mm5\n"            /* blue*-109dec=1.7129*64 */
        "pmullw %15,%%mm1\n"            /* blue*114dec=1.78125*64 */
        "psraw  $6, %%mm5\n"            /* blue=red/64 */
        "psraw  $6, %%mm1\n"            /* blue=blue/64 */

        /* create G (result in mm7) */
        "movq %%mm2,%%mm3\n"      /*   0  L3  0 L1  0 l3  0 l1 */
        "movq %%mm4,%%mm7\n"      /*   0  L2  0 L0  0 l2  0 l1 */
        "paddsw  %%mm5, %%mm3\n"  /* lum1+Cb_g:x G3t x G1t x g3t x g1t */
        "paddsw  %%mm5, %%mm7\n"  /* lum1+Cb_g:x G2t x G0t x g2t x g0t */
        "paddsw  %%mm0, %%mm3\n"  /* lum1+Cr_g:x G3  x G1  x g3  x g1 */
        "paddsw  %%mm0, %%mm7\n"  /* lum1+blue:x G2  x G0  x g2  x g0 */
        "packuswb %%mm3,%%mm3\n"  /* G3 G1 g3 g1 G3 G1 g3 g1 */
        "packuswb %%mm7,%%mm7\n"  /* G2 G0 g2 g0 G2 G0 g2 g0 */
        "punpcklbw %%mm3,%%mm7\n" /* G3 G2 G1 G0 g3 g2 g1 g0 */

        /* create B (result in mm5) */
        "movq %%mm2,%%mm3\n"         /*   0  L3  0 L1  0 l3  0 l1 */
        "movq %%mm4,%%mm5\n"         /*   0  L2  0 L0  0 l2  0 l1 */
        "paddsw  %%mm1, %%mm3\n"     /* lum1+blue:x B3 x B1 x b3 x b1 */
        "paddsw  %%mm1, %%mm5\n"     /* lum1+blue:x B2 x B0 x b2 x b0 */
        "packuswb %%mm3,%%mm3\n"     /* B3 B1 b3 b1 B3 B1 b3 b1 */
        "packuswb %%mm5,%%mm5\n"     /* B2 B0 b2 b0 B2 B0 b2 b0 */
        "punpcklbw %%mm3,%%mm5\n"    /* B3 B2 B1 B0 b3 b2 b1 b0 */

        /* fill destination row1 (needed are mm6=Rr,mm7=Gg,mm5=Bb) */

        "pxor %%mm2,%%mm2\n"           /*  0  0  0  0  0  0  0  0 */
        "pxor %%mm4,%%mm4\n"           /*  0  0  0  0  0  0  0  0 */
        "movq %%mm6,%%mm1\n"           /* R3 R2 R1 R0 r3 r2 r1 r0 */
        "movq %%mm5,%%mm3\n"           /* B3 B2 B1 B0 b3 b2 b1 b0 */

        /* process lower lum */
        "punpcklbw %%mm4,%%mm1\n"      /*  0 r3  0 r2  0 r1  0 r0 */
        "punpcklbw %%mm4,%%mm3\n"      /*  0 b3  0 b2  0 b1  0 b0 */
        "movq %%mm1,%%mm2\n"           /*  0 r3  0 r2  0 r1  0 r0 */
        "movq %%mm3,%%mm0\n"           /*  0 b3  0 b2  0 b1  0 b0 */
        "punpcklwd %%mm1,%%mm3\n"      /*  0 r1  0 b1  0 r0  0 b0 */
        "punpckhwd %%mm2,%%mm0\n"      /*  0 r3  0 b3  0 r2  0 b2 */

        "pxor %%mm2,%%mm2\n"           /*  0  0  0  0  0  0  0  0 */
        "movq %%mm7,%%mm1\n"           /* G3 G2 G1 G0 g3 g2 g1 g0 */
        "punpcklbw %%mm1,%%mm2\n"      /* g3  0 g2  0 g1  0 g0  0 */
        "punpcklwd %%mm4,%%mm2\n"      /*  0  0 g1  0  0  0 g0  0 */
        "por %%mm3, %%mm2\n"          /*  0 r1 g1 b1  0 r0 g0 b0 */
        "movq %%mm2,(%3)\n"          /* wrote out ! row1 */

        "pxor %%mm2,%%mm2\n"           /*  0  0  0  0  0  0  0  0 */
        "punpcklbw %%mm1,%%mm4\n"      /* g3  0 g2  0 g1  0 g0  0 */
        "punpckhwd %%mm2,%%mm4\n"      /*  0  0 g3  0  0  0 g2  0 */
        "por %%mm0, %%mm4\n"          /*  0 r3 g3 b3  0 r2 g2 b2 */
        "movq %%mm4,8(%3)\n"         /* wrote out ! row1 */

        /* fill destination row2 (needed are mm6=Rr,mm7=Gg,mm5=Bb) */
        /* this can be done "destructive" */
        "pxor %%mm2,%%mm2\n"           /*  0  0  0  0  0  0  0  0 */
        "punpckhbw %%mm2,%%mm6\n"      /*  0 R3  0 R2  0 R1  0 R0 */
        "punpckhbw %%mm1,%%mm5\n"      /* G3 B3 G2 B2 G1 B1 G0 B0 */
        "movq %%mm5,%%mm1\n"           /* G3 B3 G2 B2 G1 B1 G0 B0 */
        "punpcklwd %%mm6,%%mm1\n"      /*  0 R1 G1 B1  0 R0 G0 B0 */
        "movq %%mm1,(%5)\n"          /* wrote out ! row2 */
        "punpckhwd %%mm6,%%mm5\n"      /*  0 R3 G3 B3  0 R2 G2 B2 */
        "movq %%mm5,8(%5)\n"         /* wrote out ! row2 */

        "addl $4,%2\n"            /* lum+4 */
        "leal 16(%3),%3\n"        /* row1+16 */
        "leal 16(%5),%5\n"        /* row2+16 */
        "addl $2,(%%esp)\n"        /* cr+2 */
        "addl $2,%1\n"           /* cb+2 */

        "addl $4,%6\n"            /* x+4 */
        "cmpl %4,%6\n"

        "jl 1b\n"
        "addl %4,%2\n" /* lum += cols */
        "addl %8,%3\n" /* row1+= mod */
        "addl %8,%5\n" /* row2+= mod */
        "movl $0,%6\n" /* x=0 */
        "cmpl %7,%2\n"
        "jl 1b\n"

        "addl $4,%%esp\n"  /* get rid of the stack slot we reserved. */
        "emms\n"  /* reset MMX registers. */
        :
        : "m" (cr), "r"(cb),"r"(lum),
          "r"(row1),"r"(cols),"r"(row2),"m"(x),"m"(y),"m"(mod),
          "m"(MMX_0080w),"m"(MMX_VgrnRGB),"m"(MMX_VredRGB),
          "m"(MMX_FF00w),"m"(MMX_00FFw),"m"(MMX_UgrnRGB),
          "m"(MMX_UbluRGB)
    );
}

void Color565DitherYV12MMX1X( int *colortab, Uint32 *rgb_2_pix,
                             unsigned char *lum, unsigned char *cr,
                             unsigned char *cb, unsigned char *out,
                             int rows, int cols, int mod )
{
    Uint16 *row1;
    Uint16 *row2;

    unsigned char* y = lum +cols*rows;    /* Pointer to the end */
    int x = 0;
    row1 = (Uint16 *)out;                 /* 16 bit target */
    row2 = (Uint16 *)out+cols+mod;        /* start of second row  */
    mod = (mod+cols+mod)*2;               /* increment for row1 in byte */

    __asm__ __volatile__(
        /* tap dance to workaround the inability to use %%ebx at will... */
        /*  move one thing to the stack... */
        "pushl $0\n"  /* save a slot on the stack. */
        "pushl %%ebx\n"  /* save %%ebx. */
        "movl %0, %%ebx\n"  /* put the thing in ebx. */
        "movl %%ebx, 4(%%esp)\n"  /* put the thing in the stack slot. */
        "popl %%ebx\n"  /* get back %%ebx (the PIC register). */

        ".align 8\n"
        "1:\n"

        "movd           (%1),                   %%mm0\n" /* 4 Cb         0  0  0  0 u3 u2 u1 u0 */
        "pxor           %%mm7,                  %%mm7\n"
        "pushl %%ebx\n"
        "movl 4(%%esp), %%ebx\n"
        "movd (%%ebx), %%mm1\n"   /* 4 Cr                0  0  0  0 v3 v2 v1 v0 */
        "popl %%ebx\n"

        "punpcklbw      %%mm7,                  %%mm0\n" /* 4 W cb   0 u3  0 u2  0 u1  0 u0 */
        "punpcklbw      %%mm7,                  %%mm1\n" /* 4 W cr   0 v3  0 v2  0 v1  0 v0 */
        "psubw          %9,                     %%mm0\n"
        "psubw          %9,                     %%mm1\n"
        "movq           %%mm0,                  %%mm2\n" /* Cb                   0 u3  0 u2  0 u1  0 u0 */
        "movq           %%mm1,                  %%mm3\n" /* Cr */
        "pmullw         %10,                    %%mm2\n" /* Cb2green 0 R3  0 R2  0 R1  0 R0 */
        "movq           (%2),                   %%mm6\n" /* L1      l7 L6 L5 L4 L3 L2 L1 L0 */
        "pmullw         %11,                    %%mm0\n" /* Cb2blue */
        "pand           %12,                    %%mm6\n" /* L1      00 L6 00 L4 00 L2 00 L0 */
        "pmullw         %13,                    %%mm3\n" /* Cr2green */
        "movq           (%2),                   %%mm7\n" /* L2 */
        "pmullw         %14,                    %%mm1\n" /* Cr2red */
        "psrlw          $8,                     %%mm7\n"        /* L2           00 L7 00 L5 00 L3 00 L1 */
        "pmullw         %15,                    %%mm6\n" /* lum1 */
        "paddw          %%mm3,                  %%mm2\n" /* Cb2green + Cr2green == green */
        "pmullw         %15,                    %%mm7\n" /* lum2 */

        "movq           %%mm6,                  %%mm4\n" /* lum1 */
        "paddw          %%mm0,                  %%mm6\n" /* lum1 +blue 00 B6 00 B4 00 B2 00 B0 */
        "movq           %%mm4,                  %%mm5\n" /* lum1 */
        "paddw          %%mm1,                  %%mm4\n" /* lum1 +red  00 R6 00 R4 00 R2 00 R0 */
        "paddw          %%mm2,                  %%mm5\n" /* lum1 +green 00 G6 00 G4 00 G2 00 G0 */
        "psraw          $6,                     %%mm4\n" /* R1 0 .. 64 */
        "movq           %%mm7,                  %%mm3\n" /* lum2                       00 L7 00 L5 00 L3 00 L1 */
        "psraw          $6,                     %%mm5\n" /* G1  - .. + */
        "paddw          %%mm0,                  %%mm7\n" /* Lum2 +blue 00 B7 00 B5 00 B3 00 B1 */
        "psraw          $6,                     %%mm6\n" /* B1         0 .. 64 */
        "packuswb       %%mm4,                  %%mm4\n" /* R1 R1 */
        "packuswb       %%mm5,                  %%mm5\n" /* G1 G1 */
        "packuswb       %%mm6,                  %%mm6\n" /* B1 B1 */
        "punpcklbw      %%mm4,                  %%mm4\n"
        "punpcklbw      %%mm5,                  %%mm5\n"

        "pand           %16,                    %%mm4\n"
        "psllw          $3,                     %%mm5\n" /* GREEN       1 */
        "punpcklbw      %%mm6,                  %%mm6\n"
        "pand           %17,                    %%mm5\n"
        "pand           %16,                    %%mm6\n"
        "por            %%mm5,                  %%mm4\n" /* */
        "psrlw          $11,                    %%mm6\n" /* BLUE        1 */
        "movq           %%mm3,                  %%mm5\n" /* lum2 */
        "paddw          %%mm1,                  %%mm3\n" /* lum2 +red      00 R7 00 R5 00 R3 00 R1 */
        "paddw          %%mm2,                  %%mm5\n" /* lum2 +green 00 G7 00 G5 00 G3 00 G1 */
        "psraw          $6,                     %%mm3\n" /* R2 */
        "por            %%mm6,                  %%mm4\n" /* MM4 */
        "psraw          $6,                     %%mm5\n" /* G2 */
        "movq           (%2, %4),               %%mm6\n" /* L3 load lum2 */
        "psraw          $6,                     %%mm7\n"
        "packuswb       %%mm3,                  %%mm3\n"
        "packuswb       %%mm5,                  %%mm5\n"
        "packuswb       %%mm7,                  %%mm7\n"
        "pand           %12,                    %%mm6\n" /* L3 */
        "punpcklbw      %%mm3,                  %%mm3\n"
        "punpcklbw      %%mm5,                  %%mm5\n"
        "pmullw         %15,                    %%mm6\n" /* lum3 */
        "punpcklbw      %%mm7,                  %%mm7\n"
        "psllw          $3,                     %%mm5\n" /* GREEN 2 */
        "pand           %16,                    %%mm7\n"
        "pand           %16,                    %%mm3\n"
        "psrlw          $11,                    %%mm7\n" /* BLUE  2 */
        "pand           %17,                    %%mm5\n"
        "por            %%mm7,                  %%mm3\n"
        "movq           (%2,%4),                %%mm7\n" /* L4 load lum2 */
        "por            %%mm5,                  %%mm3\n"
        "psrlw          $8,                     %%mm7\n" /* L4 */
        "movq           %%mm4,                  %%mm5\n"
        "punpcklwd      %%mm3,                  %%mm4\n"
        "pmullw         %15,                    %%mm7\n" /* lum4 */
        "punpckhwd      %%mm3,                  %%mm5\n"

        "movq           %%mm4,                  (%3)\n"  /* write row1 */
        "movq           %%mm5,                  8(%3)\n" /* write row1 */

        "movq           %%mm6,                  %%mm4\n" /* Lum3 */
        "paddw          %%mm0,                  %%mm6\n" /* Lum3 +blue */

        "movq           %%mm4,                  %%mm5\n" /* Lum3 */
        "paddw          %%mm1,                  %%mm4\n" /* Lum3 +red */
        "paddw          %%mm2,                  %%mm5\n" /* Lum3 +green */
        "psraw          $6,                     %%mm4\n"
        "movq           %%mm7,                  %%mm3\n" /* Lum4 */
        "psraw          $6,                     %%mm5\n"
        "paddw          %%mm0,                  %%mm7\n" /* Lum4 +blue */
        "psraw          $6,                     %%mm6\n" /* Lum3 +blue */
        "movq           %%mm3,                  %%mm0\n" /* Lum4 */
        "packuswb       %%mm4,                  %%mm4\n"
        "paddw          %%mm1,                  %%mm3\n" /* Lum4 +red */
        "packuswb       %%mm5,                  %%mm5\n"
        "paddw          %%mm2,                  %%mm0\n" /* Lum4 +green */
        "packuswb       %%mm6,                  %%mm6\n"
        "punpcklbw      %%mm4,                  %%mm4\n"
        "punpcklbw      %%mm5,                  %%mm5\n"
        "punpcklbw      %%mm6,                  %%mm6\n"
        "psllw          $3,                     %%mm5\n" /* GREEN 3 */
        "pand           %16,                    %%mm4\n"
        "psraw          $6,                     %%mm3\n" /* psr 6 */
        "psraw          $6,                     %%mm0\n"
        "pand           %16,                    %%mm6\n" /* BLUE */
        "pand           %17,                    %%mm5\n"
        "psrlw          $11,                    %%mm6\n" /* BLUE  3 */
        "por            %%mm5,                  %%mm4\n"
        "psraw          $6,                     %%mm7\n"
        "por            %%mm6,                  %%mm4\n"
        "packuswb       %%mm3,                  %%mm3\n"
        "packuswb       %%mm0,                  %%mm0\n"
        "packuswb       %%mm7,                  %%mm7\n"
        "punpcklbw      %%mm3,                  %%mm3\n"
        "punpcklbw      %%mm0,                  %%mm0\n"
        "punpcklbw      %%mm7,                  %%mm7\n"
        "pand           %16,                    %%mm3\n"
        "pand           %16,                    %%mm7\n" /* BLUE */
        "psllw          $3,                     %%mm0\n" /* GREEN 4 */
        "psrlw          $11,                    %%mm7\n"
        "pand           %17,                    %%mm0\n"
        "por            %%mm7,                  %%mm3\n"
        "por            %%mm0,                  %%mm3\n"

        "movq           %%mm4,                  %%mm5\n"

        "punpcklwd      %%mm3,                  %%mm4\n"
        "punpckhwd      %%mm3,                  %%mm5\n"

        "movq           %%mm4,                  (%5)\n"
        "movq           %%mm5,                  8(%5)\n"

        "addl           $8,                     %6\n"
        "addl           $8,                     %2\n"
        "addl           $4,                     (%%esp)\n"
        "addl           $4,                     %1\n"
        "cmpl           %4,                     %6\n"
        "leal           16(%3),                 %3\n"
        "leal           16(%5),%5\n" /* row2+16 */

        "jl             1b\n"
        "addl           %4,     %2\n" /* lum += cols */
        "addl           %8,     %3\n" /* row1+= mod */
        "addl           %8,     %5\n" /* row2+= mod */
        "movl           $0,     %6\n" /* x=0 */
        "cmpl           %7,     %2\n"
        "jl             1b\n"
        "addl $4, %%esp\n"  /* get rid of the stack slot we reserved. */
        "emms\n"
        :
        : "m" (cr), "r"(cb),"r"(lum),
          "r"(row1),"r"(cols),"r"(row2),"m"(x),"m"(y),"m"(mod),
          "m"(MMX_0080w),"m"(MMX_Ugrn565),"m"(MMX_Ublu5x5),
          "m"(MMX_00FFw),"m"(MMX_Vgrn565),"m"(MMX_Vred5x5),
          "m"(MMX_Ycoeff),"m"(MMX_red565),"m"(MMX_grn565)
    );
}

/* *INDENT-ON* */

#endif /* GCC3 i386 inline assembly */

/* vi: set ts=4 sw=4 expandtab: */
