[ros-diffs] [greatlrd] 23730: fpr 32bpp 1. Remove inline asm from hline and convert it to own asm file with intel syntax. 2. Reimplement colorfill inline asm version and convert it to own asm file with intel syntax. the asm code can be optimze bit more. But for done

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Sat Aug 26 23:18:33 CEST 2006


Author: greatlrd
Date: Sun Aug 27 01:18:33 2006
New Revision: 23730

URL: http://svn.reactos.org/svn/reactos?rev=23730&view=rev
Log:
fpr 32bpp
1. Remove inline asm from hline and convert it to own asm file with intel syntax. 
2. Reimplement colorfill inline asm version and convert it to own asm file with intel syntax. 
   the asm code can be optimze bit more. But for done 

Added:
    trunk/reactos/subsystems/win32/win32k/dib/dib32bppc.c
    trunk/reactos/subsystems/win32/win32k/dib/i386/
    trunk/reactos/subsystems/win32/win32k/dib/i386/dib32bpp_colorfill.s
    trunk/reactos/subsystems/win32/win32k/dib/i386/dib32bpp_hline.s
Modified:
    trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c
    trunk/reactos/subsystems/win32/win32k/win32k.rbuild

Modified: trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c?rev=23730&r1=23729&r2=23730&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c (original)
+++ trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c Sun Aug 27 01:18:33 2006
@@ -41,53 +41,6 @@
   return (ULONG)(*addr);
 }
 
-#if defined(_M_IX86) && !defined(_MSC_VER)
-VOID
-DIB_32BPP_HLine(SURFOBJ *SurfObj, LONG x1, LONG x2, LONG y, ULONG c)
-{      
-  LONG cx  = (x2 - x1) ;  
-   PBYTE byteaddr = (PBYTE)SurfObj->pvScan0 + y * SurfObj->lDelta;
-   PDWORD addr = (PDWORD)byteaddr + x1;
-
-    __asm__ __volatile__ (
-"  cld\n"
-"  mov  %0, %%eax\n"
-"  mov  %2, %%edi\n"
-"  test $0x03, %%edi\n" /* Align to fullword boundary */
-"  jnz   0f\n"
-"  mov  %1,%%ecx\n"     /* Setup count of fullwords to fill */
-"  rep stosl\n"         /* The actual fill */
-"  jmp   1f\n"
-"0:\n"
-"  stosw\n"
-"  ror  $0x10,%%eax\n"
-"  mov  %1,%%ecx\n"     /* Setup count of fullwords to fill */
-"  dec  %%ecx\n"
-"  rep stosl\n"         /* The actual fill */
-"  shr $0x10,%%eax\n"
-"  stosw\n"
-"1:\n"
-  : /* no output */
-  : "m"(c), "r"(cx), "m"(addr)
-  : "%eax", "%ecx", "%edi");
-
-  
-}
-#else
-VOID
-DIB_32BPP_HLine(SURFOBJ *SurfObj, LONG x1, LONG x2, LONG y, ULONG c)
-{
-  PBYTE byteaddr = (ULONG_PTR)SurfObj->pvScan0 + y * SurfObj->lDelta;  
-  PDWORD addr = (PDWORD)byteaddr + x1;		
-  LONG cx = x1;
-  while(cx < x2) 
-  {
-    *addr = (DWORD)c;
-    ++addr;
-    ++cx;
-   }	  
-}
-#endif
 
 VOID
 DIB_32BPP_VLine(SURFOBJ *SurfObj, LONG x, LONG y1, LONG y2, ULONG c)
@@ -324,19 +277,7 @@
   return TRUE;
 }
 
-BOOLEAN 
-DIB_32BPP_ColorFill(SURFOBJ* DestSurface, RECTL* DestRect, ULONG color)
-{			 
-  ULONG DestY;	
-
-	for (DestY = DestRect->top; DestY< DestRect->bottom; DestY++)
-  {
-    DIB_32BPP_HLine (DestSurface, DestRect->left, DestRect->right, DestY, color);
-  }
-
-
-	return TRUE;
-}
+
 /*
 =======================================
  Stretching functions goes below

Added: trunk/reactos/subsystems/win32/win32k/dib/dib32bppc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/dib/dib32bppc.c?rev=23730&view=auto
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/dib32bppc.c (added)
+++ trunk/reactos/subsystems/win32/win32k/dib/dib32bppc.c Sun Aug 27 01:18:33 2006
@@ -1,0 +1,51 @@
+/* 
+ *  ReactOS W32 Subsystem
+ *  Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 2004, 2005, 2006 ReactOS Team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+/* $Id: */
+
+#include <w32k.h>
+
+#define NDEBUG
+#include <debug.h>
+
+VOID
+DIB_32BPP_HLine(SURFOBJ *SurfObj, LONG x1, LONG x2, LONG y, ULONG c)
+{
+  PBYTE byteaddr = (ULONG_PTR)SurfObj->pvScan0 + y * SurfObj->lDelta;  
+  PDWORD addr = (PDWORD)byteaddr + x1;		
+  LONG cx = x1;
+  while(cx < x2) 
+  {
+    *addr = (DWORD)c;
+    ++addr;
+    ++cx;
+   }	  
+}
+
+BOOLEAN 
+DIB_32BPP_ColorFill(SURFOBJ* DestSurface, RECTL* DestRect, ULONG color)
+{			 
+  ULONG DestY;	
+
+  for (DestY = DestRect->top; DestY< DestRect->bottom; DestY++)
+  {
+    DIB_32BPP_HLine (DestSurface, DestRect->left, DestRect->right, DestY, color);
+  }
+
+  return TRUE;
+}

Added: trunk/reactos/subsystems/win32/win32k/dib/i386/dib32bpp_colorfill.s
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/dib/i386/dib32bpp_colorfill.s?rev=23730&view=auto
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/i386/dib32bpp_colorfill.s (added)
+++ trunk/reactos/subsystems/win32/win32k/dib/i386/dib32bpp_colorfill.s Sun Aug 27 01:18:33 2006
@@ -1,0 +1,93 @@
+
+/* 
+ *  ReactOS W32 Subsystem
+ *  Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 2004, 2005, 2006 ReactOS Team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+/* $Id: */
+  .globl _DIB_32BPP_ColorFill
+  .intel_syntax noprefix
+
+  .def   _DIB_32BPP_ColorFill;
+  .scl	2;
+  .type	32;
+  .endef
+  
+  _DIB_32BPP_ColorFill:
+                        sub     esp, 24
+                        mov     ecx, [esp+32]
+                        mov     [esp+8], ebx
+                        mov     ebx, [esp+28]
+                        mov     [esp+20], ebp
+                        mov     ebp, [esp+36]
+                        mov     [esp+12], esi
+                        mov     [esp+16], edi
+                        mov     edi, [ecx]
+                        mov     esi, [ecx+8]
+                        mov     edx, [ebx+36]
+                        sub     esi, edi
+                        mov     edi, [ecx+4]
+                        mov     eax, edi
+                        imul    eax, edx
+                        add     eax, [ebx+32]
+                        mov     ebx, [ecx]
+                        lea     eax, [eax+ebx*4]
+                        mov     [esp+4], eax
+                        mov     eax, [ecx+12]
+                        cmp     eax, edi
+                        jbe     end
+                        sub     eax, edi
+                        mov     [esp], eax
+                        lea     esi, [esi+0]
+                        
+               for_loop:
+                        mov     eax, ebp
+                        cld
+                        mov     ebx, esi
+                        mov     edi, [esp+4]
+                        test    edi, 3
+                        jnz     algin_draw
+                        mov     ecx, esi
+                        rep stosd
+                        add     [esp+4], edx
+                        dec     dword ptr [esp]
+                        jnz     for_loop
+               end:        
+                        mov     ebx, [esp+8]
+                        mov     eax, 1
+                        mov     esi, [esp+12]
+                        mov     edi, [esp+16]
+                        mov     ebp, [esp+20]
+                        add     esp, 24
+                        ret      
+                                          
+               algin_draw:
+                        stosd
+                        dec     ebx
+                        mov     ecx, ebx
+                        rol     eax, 16
+                        stosd
+                        add     [esp+4], edx
+                        dec     dword ptr [esp]
+                        jnz     for_loop
+             
+                        mov     ebx, [esp+8]
+                        mov     eax, 1
+                        mov     esi, [esp+12]
+                        mov     edi, [esp+16]
+                        mov     ebp, [esp+20]
+                        add     esp, 24
+                        ret

Added: trunk/reactos/subsystems/win32/win32k/dib/i386/dib32bpp_hline.s
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/dib/i386/dib32bpp_hline.s?rev=23730&view=auto
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/i386/dib32bpp_hline.s (added)
+++ trunk/reactos/subsystems/win32/win32k/dib/i386/dib32bpp_hline.s Sun Aug 27 01:18:33 2006
@@ -1,0 +1,69 @@
+/* 
+ *  ReactOS W32 Subsystem
+ *  Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 2004, 2005, 2006 ReactOS Team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+/* $Id: */
+
+.globl _DIB_32BPP_HLine
+.intel_syntax noprefix
+
+.def   _DIB_32BPP_HLine;
+.scl	2;
+.type	32;
+.endef
+
+_DIB_32BPP_HLine:
+                  sub     esp, 12             // rember the base is not hex it is dec
+                  mov     ecx, [esp+16]
+                  mov     [esp+4], ebx   
+                  mov     edx, [esp+20]      // edx =  LONG x1
+                  mov     [esp+8], edi    
+                  mov     edi, [esp+28]
+                  mov     eax, [ecx+36]
+                  mov     ebx, [esp+24]      // ebx =  LONG x2 
+                  imul    eax, edi
+                  mov     edi, [ecx+32]
+                  sub     ebx, edx            // cx  = (x2 - x1) ;
+                  add     eax, edi
+                  lea     edx, [eax+edx*4]    
+                  mov     [esp], edx
+                  cld
+                  mov     eax, [esp+32]      
+                  mov     edi, [esp]
+                  test    edi, 3             // Align to fullword boundary 
+                  jnz     short _save_rest
+                  mov     ecx, ebx           // Setup count of fullwords to fill 
+                  rep stosd
+                  
+                  mov     ebx, [esp+4]
+                  mov     edi, [esp+8]
+                  add     esp, 12
+                  ret
+_save_rest:
+                  stosw
+                  ror     eax, 16
+                  mov     ecx, ebx           // Setup count of fullwords to fill 
+                  dec     ecx
+                  rep stosd                  // The actual fill 
+                  shr     eax, 16
+                  stosw
+
+                  mov     ebx, [esp+4]
+                  mov     edi, [esp+8]
+                  add     esp, 12
+                  ret
+

Modified: trunk/reactos/subsystems/win32/win32k/win32k.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/win32k.rbuild?rev=23730&r1=23729&r2=23730&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/win32k.rbuild (original)
+++ trunk/reactos/subsystems/win32/win32k/win32k.rbuild Sun Aug 27 01:18:33 2006
@@ -12,6 +12,7 @@
 	<define name="_SEH_NO_NATIVE_NLG" />
 	<define name="_WIN32K_" />
 	<pch>w32k.h</pch>
+
 	<directory name="dib">
 		<file>dib1bpp.c</file>
 		<file>dib4bpp.c</file>
@@ -23,7 +24,23 @@
 		<file>dib32bpp.c</file>
 		<file>dib32gen.c</file>
 		<file>dib.c</file>
+
+            <if property="ARCH" value="i386">
+                      <directory name="i386">
+                            <file>dib32bpp_hline.s</file>
+                            <file>dib32bpp_colorfill.s</file>
+                      </directory>
+            </if>
+
+            <ifnot property="ARCH" value="i386">                      
+                      <file>dib32bppc.c</file>
+            </ifnot> 
+
 	</directory>
+
+      
+
+
 	<directory name="eng">
 		<compilationunit name="eng.c">
 			<file>bitblt.c</file>




More information about the Ros-diffs mailing list