We were changing the edi register, but not informing the compiler about
this.
For certain optimization combinations, the compiler would assume edi was
unchanged. Fixed by adding %edi to the clobber list.
Modified: trunk/reactos/subsys/win32k/dib/dib16bpp.c
Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c
_____
Modified: trunk/reactos/subsys/win32k/dib/dib16bpp.c
--- trunk/reactos/subsys/win32k/dib/dib16bpp.c 2005-06-13 21:51:42 UTC
(rev 15900)
+++ trunk/reactos/subsys/win32k/dib/dib16bpp.c 2005-06-13 22:24:28 UTC
(rev 15901)
@@ -17,6 +17,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id$ */
+
#include <w32k.h>
VOID
@@ -53,6 +54,7 @@
" shl $16, %%eax\n"
" andl $0xffff, %0\n" /* If the pixel value is "abcd", put
"abcdabcd"
in %eax */
" or %0, %%eax\n"
+" mov %2, %%edi\n"
" test $0x03, %%edi\n" /* Align to fullword boundary */
" jz .L1\n"
" stosw\n"
@@ -67,8 +69,8 @@
" stosw\n"
".L2:\n"
: /* no output */
- : "r"(c), "r"(Count), "D"(addr)
- : "%eax", "%ecx");
+ : "r"(c), "r"(Count), "m"(addr)
+ : "%eax", "%ecx", "%edi");
#else /* _M_IX86 */
LONG cx = x1;
DWORD cc;
@@ -443,8 +445,8 @@
{
__asm__ __volatile__ (
" cld\n"
- " mov %0,%%eax\n"
" mov %1,%%ebx\n"
+ " mov %2,%%edi\n"
" test $0x03, %%edi\n" /* Align to fullword boundary */
" jz .FL1\n"
" stosw\n"
@@ -458,9 +460,9 @@
" jz .FL2\n"
" stosw\n"
".FL2:\n"
- :
- : "r" (color), "r" (width), "D" (pos)
- : "%eax", "%ecx","%ebx");
+ :
+ : "a" (color), "r" (width), "m" (pos)
+ : "%ecx", "%ebx", "%edi");
pos =(PULONG)((ULONG_PTR)pos + delta);
}
_____
Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c
--- trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-06-13 21:51:42 UTC
(rev 15900)
+++ trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-06-13 22:24:28 UTC
(rev 15901)
@@ -52,6 +52,7 @@
__asm__ __volatile__ (
" cld\n"
" mov %0, %%eax\n"
+" mov %2, %%edi\n"
" test $0x03, %%edi\n" /* Align to fullword boundary */
" jnz .L1\n"
" mov %1,%%ecx\n" /* Setup count of fullwords to fill */
@@ -67,8 +68,8 @@
" stosw\n"
".L2:\n"
: /* no output */
- : "r"(c), "r"(cx), "D"(addr)
- : "%eax", "%ecx");
+ : "m"(c), "r"(cx), "m"(addr)
+ : "%eax", "%ecx", "%edi");
}