lite Optimze only for dib32bpp.c 
thanks Blight for the inline asm for hline 
bitblt have got optimze for fill black and white color
only. more will come
Modified: trunk/reactos/subsys/win32k/dib/dib.h
Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c

Modified: trunk/reactos/subsys/win32k/dib/dib.h
--- trunk/reactos/subsys/win32k/dib/dib.h	2005-06-02 19:56:12 UTC (rev 15731)
+++ trunk/reactos/subsys/win32k/dib/dib.h	2005-06-02 20:12:58 UTC (rev 15732)
@@ -1,6 +1,27 @@
 #ifndef _W32K_DIB_DIB_H
 #define _W32K_DIB_DIB_H
 
+#ifdef _M_IX86
+#define memset4(dest, value, count) asm volatile("rep stosl" : : "D"(dest), "a"(value), "c"(count) : "memory");
+#endif
+
+#define ROP4_BLACKNESS	  ((((0x00000042) >> 8) & 0xff00) | (((0x00000042) >> 16) & 0x00ff))
+#define ROP4_NOTSRCERASE  ((((0x001100A6) >> 8) & 0xff00) | (((0x001100A6) >> 16) & 0x00ff)) 
+#define ROP4_NOTSRCCOPY	  ((((0x00330008) >> 8) & 0xff00) | (((0x00330008) >> 16) & 0x00ff))  
+#define ROP4_SRCERASE	  ((((0x00440328) >> 8) & 0xff00) | (((0x00440328) >> 16) & 0x00ff))  
+#define ROP4_DSTINVERT	  ((((0x00550009) >> 8) & 0xff00) | (((0x00550009) >> 16) & 0x00ff))  
+#define ROP4_PATINVERT	  ((((0x005A0049) >> 8) & 0xff00) | (((0x005A0049) >> 16) & 0x00ff))  
+#define ROP4_SRCINVERT	  ((((0x00660046) >> 8) & 0xff00) | (((0x00660046) >> 16) & 0x00ff))  
+#define ROP4_SRCAND	      ((((0x008800C6) >> 8) & 0xff00) | (((0x008800C6) >> 16) & 0x00ff))  
+#define ROP4_MERGEPAINT	  ((((0x00BB0226) >> 8) & 0xff00) | (((0x00BB0226) >> 16) & 0x00ff))  
+#define ROP4_MERGECOPY	  ((((0x00C000CA) >> 8) & 0xff00) | (((0x00C000CA) >> 16) & 0x00ff))  
+#define ROP4_SRCCOPY	  ((((0x00CC0020) >> 8) & 0xff00) | (((0x00CC0020) >> 16) & 0x00ff))  
+#define ROP4_SRCPAINT	  ((((0x00EE0086) >> 8) & 0xff00) | (((0x00EE0086) >> 16) & 0x00ff))  
+#define ROP4_PATCOPY	  ((((0x00F00021) >> 8) & 0xff00) | (((0x00F00021) >> 16) & 0x00ff))  
+#define ROP4_PATPAINT	  ((((0x00FB0A09) >> 8) & 0xff00) | (((0x00FB0A09) >> 16) & 0x00ff)) 
+#define ROP4_WHITENESS	  ((((0x00FF0062) >> 8) & 0xff00) | (((0x00FF0062) >> 16) & 0x00ff)) 
+
+
 typedef struct _BLTINFO
 {
    SURFOBJ *DestSurface;

Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c
--- trunk/reactos/subsys/win32k/dib/dib32bpp.c	2005-06-02 19:56:12 UTC (rev 15731)
+++ trunk/reactos/subsys/win32k/dib/dib32bpp.c	2005-06-02 20:12:58 UTC (rev 15732)
@@ -37,8 +37,19 @@
   return (ULONG)(*addr);
 }
 
+
+#ifdef _M_IX86
 VOID
 DIB_32BPP_HLine(SURFOBJ *SurfObj, LONG x1, LONG x2, LONG y, ULONG c)
+{    
+ PBYTE byteaddr = SurfObj->pvScan0 + y * SurfObj->lDelta;
+  PDWORD addr = (PDWORD)byteaddr + x1;
+  LONG cx = x2 - x1;
+  if (cx>0) memset4(addr, c, cx);    
+}
+#else
+VOID
+DIB_32BPP_HLine(SURFOBJ *SurfObj, LONG x1, LONG x2, LONG y, ULONG c)
 {
   PBYTE byteaddr = SurfObj->pvScan0 + y * SurfObj->lDelta;
   PDWORD addr = (PDWORD)byteaddr + x1;
@@ -50,6 +61,7 @@
     ++cx;
   }
 }
+#endif
 
 VOID
 DIB_32BPP_VLine(SURFOBJ *SurfObj, LONG x, LONG y1, LONG y2, ULONG c)
@@ -294,6 +306,80 @@
    BOOL UsesPattern;
    PULONG DestBits;
 
+   switch (BltInfo->Rop4)
+	{
+		 case  ROP4_BLACKNESS:  
+			 //return(0x00000000);	
+			 
+#ifdef _M_IX86              			 			 
+             if (BltInfo->DestRect.left!=0)
+			 {
+			  SourceX = (BltInfo->DestRect.right - BltInfo->DestRect.left) ;
+			  if (SourceX<=0) return TRUE;
+
+				for (DestY=BltInfo->DestRect.bottom-1;DestY>=BltInfo->DestRect.top;DestY--)
+				{			 
+					memset4( (PDWORD) (BltInfo->DestSurface->pvScan0 + DestY * 
+					                   BltInfo->DestSurface->lDelta + 
+					                   BltInfo->DestRect.left),  0x00000000, SourceX);  					 
+				}
+			
+			  }
+			 else
+			 {
+			  
+			   SourceX = ((BltInfo->DestRect.bottom - BltInfo->DestRect.top) * 
+			  	           BltInfo->DestRect.right) ;
+
+			   if (SourceX<=0) return TRUE
+			   memset4( (PDWORD) (BltInfo->DestSurface->pvScan0 + BltInfo->DestRect.top * 
+				                  BltInfo->DestSurface->lDelta), 0x00000000, SourceX);  			  
+			 }
+#else			 	
+			 for (DestY=BltInfo->DestRect.bottom-1;DestY>=BltInfo->DestRect.top;DestY--)
+			 {			 				
+					DIB_32BPP_HLine(BltInfo->DestSurface, BltInfo->DestRect.bottom, SourceX, DestY, 0x00000000);			  				
+			 }
+#endif
+
+		 return TRUE;
+		 break;
+
+		 case ROP4_WHITENESS:   
+			 //return(0xFFFFFFFF);
+			 SourceX = ((BltInfo->DestRect.bottom - BltInfo->DestRect.top) * BltInfo->DestRect.right) ;
+             if (SourceX<=0) return TRUE
+#ifdef _M_IX86
+			 
+             if (BltInfo->DestRect.left!=0)
+			 {								
+				for (DestY=BltInfo->DestRect.bottom-1;DestY>=BltInfo->DestRect.top;DestY--)
+				{			 				
+					memset4( (PDWORD) (BltInfo->DestSurface->pvScan0 + DestY * 
+					                   BltInfo->DestSurface->lDelta + 
+					                   BltInfo->DestRect.left),  0xFFFFFFFF, SourceX);  					 
+				}
+			
+			 }
+			 else
+			 {			  			   
+			   memset4( (PDWORD) (BltInfo->DestSurface->pvScan0 + BltInfo->DestRect.top * 
+				       BltInfo->DestSurface->lDelta), 0xFFFFFFFF, SourceX);  			  
+			 }
+#else
+			 for (DestY=BltInfo->DestRect.bottom-1;DestY>=BltInfo->DestRect.top;DestY--)
+			 {			 				
+					DIB_32BPP_HLine(BltInfo->DestSurface, BltInfo->DestRect.bottom, SourceX, DestY, 0xFFFFFFFF);			  				
+			 }
+#endif
+
+		 return TRUE;
+		 break;
+
+		 default:
+		 break;
+         }	
+
    UsesSource = ROP4_USES_SOURCE(BltInfo->Rop4);
    UsesPattern = ROP4_USES_PATTERN(BltInfo->Rop4);