- Fixed the inline assembler in DIB_16BPP_ColorFill.  
- Calculated the color value outside of the loop in DIB_16BPP_ColorFill.
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 10:18:51 UTC (rev 15868)
+++ trunk/reactos/subsys/win32k/dib/dib16bpp.c	2005-06-12 10:23:04 UTC (rev 15869)
@@ -454,32 +454,29 @@
   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 */
   
   for (DestY = DestRect->top; DestY< DestRect->bottom; DestY++)
   {
+    int d0, d1, d2;
   __asm__ __volatile__ (
     "  cld\n"
-    "  mov  %0, %%eax\n"
-    "  mov  %%eax, %%ecx\n"
-    "  shl  $16, %%eax\n"
-    "  andl $0xffff, %%ecx\n"  /* If the pixel value is "abcd", put "abcdabcd" in %eax */
-    "  or   %%ecx, %%eax\n"
     "  test $0x03, %%edi\n" /* Align to fullword boundary */
     "  jz   .FL1\n"
     "  stosw\n"
-    "  dec  %1\n"
+    "  dec  %4\n"
     "  jz   .FL2\n"
     ".FL1:\n"
-    "  mov  %1,%%ecx\n"     /* Setup count of fullwords to fill */
+    "  mov  %4,%%ecx\n"     /* Setup count of fullwords to fill */
     "  shr  $1,%%ecx\n"
     "  rep stosl\n"         /* The actual fill */
-    "  test $0x01, %1\n"    /* One left to do at the right side? */
+    "  test $0x01, %4\n"    /* One left to do at the right side? */
     "  jz   .FL2\n"
     "  stosw\n"
     ".FL2:\n"
-    : /* no output */
-    : "r"(color), "r"(width), "D"(pos)
-    : "%eax", "%ecx");
+    : "=&A" (d0), "=&r" (d1), "=&D" (d2)
+    : "0"(color), "1"(width), "2"(pos)
+    : "%ecx");
      pos =(PULONG)((ULONG_PTR)pos + delta);	 
   }
 #else /* _M_IX86 */