fix bug in color fill inline asm code. Did crash cirrus drv, vmware 5 drv and if the buffer was not align. Clean up inline asm code.
Modified: trunk/reactos/subsys/win32k/dib/dib16bpp.c

Modified: trunk/reactos/subsys/win32k/dib/dib16bpp.c
--- trunk/reactos/subsys/win32k/dib/dib16bpp.c	2005-06-12 19:06:38 UTC (rev 15878)
+++ trunk/reactos/subsys/win32k/dib/dib16bpp.c	2005-06-12 19:23:40 UTC (rev 15879)
@@ -344,24 +344,6 @@
    PULONG DestBits;
    ULONG RoundedRight;
 
-   /*
-    switch (BltInfo->Rop4)
-  {  
-    case ROP4_PATCOPY:	
-        if (!BltInfo->PatternSurface)
-        {
-          Pattern = BltInfo->Brush->iSolidColor | (BltInfo->Brush->iSolidColor << 16);
-          DIB_16BPP_ColorFill(BltInfo->DestSurface, BltInfo->DestRect, Pattern);       
-          return TRUE;          
-        }
-    
-    break;	
-    		
-    default:
-    break;
-   }	
-*/
-
    UsesSource = ROP4_USES_SOURCE(BltInfo->Rop4);
    UsesPattern = ROP4_USES_PATTERN(BltInfo->Rop4);
 
@@ -454,31 +436,34 @@
   ULONG delta = DestSurface->lDelta;
   ULONG width = (DestRect->right - DestRect->left) ;
   PULONG pos =  (PULONG) (DestSurface->pvScan0 + DestRect->top * delta + (DestRect->left<<1));
-  color = (color<<16)|(color&0xffff); /* If the color value is "abcd", put "abcdabcd" into color */
+  color = (color&0xffff);  /* If the color value is "abcd", put "abcdabcd" into color */
+  color += (color<<16);
   
   for (DestY = DestRect->top; DestY< DestRect->bottom; DestY++)
-  {
-    int d0, d1, d2;
+  {   
   __asm__ __volatile__ (
     "  cld\n"
+    "  mov  %0,%%eax\n"
+    "  mov  %1,%%ebx\n" 
     "  test $0x03, %%edi\n" /* Align to fullword boundary */
     "  jz   .FL1\n"
     "  stosw\n"
-    "  dec  %4\n"
+    "  dec  %%ebx\n"
     "  jz   .FL2\n"
     ".FL1:\n"
-    "  mov  %4,%%ecx\n"     /* Setup count of fullwords to fill */
+    "  mov  %%ebx,%%ecx\n"     /* Setup count of fullwords to fill */
     "  shr  $1,%%ecx\n"
     "  rep stosl\n"         /* The actual fill */
-    "  test $0x01, %4\n"    /* One left to do at the right side? */
+    "  test $0x01, %%ebx\n"    /* One left to do at the right side? */
     "  jz   .FL2\n"
     "  stosw\n"
     ".FL2:\n"
-    : "=&A" (d0), "=&r" (d1), "=&D" (d2)
-    : "0"(color), "1"(width), "2"(pos)
-    : "%ecx");
+    : 
+    : "r" (color), "r" (width), "D" (pos)
+    : "%eax", "%ecx","%ebx");
      pos =(PULONG)((ULONG_PTR)pos + delta);	 
   }
+
 #else /* _M_IX86 */
 
 	for (DestY = DestRect->top; DestY< DestRect->bottom; DestY++)