Author: dgorbachev
Date: Thu Feb 16 07:37:27 2012
New Revision: 55628
URL:
http://svn.reactos.org/svn/reactos?rev=55628&view=rev
Log:
[WIN32K]
Use local labels in the inline asm code to avoid a clash when building with link-time code
generation.
[PSEH]
Do not push memory operands with ESP as the base register (can happen when compiling with
some GCC options), load arguments into registers.
Fix formatting.
Modified:
trunk/reactos/lib/pseh/i386/framebased-gcchack.c
trunk/reactos/subsystems/win32/win32k/dib/dib16bpp.c
trunk/reactos/subsystems/win32/win32k/dib/dib24bpp.c
Modified: trunk/reactos/lib/pseh/i386/framebased-gcchack.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/pseh/i386/framebased-g…
==============================================================================
--- trunk/reactos/lib/pseh/i386/framebased-gcchack.c [iso-8859-1] (original)
+++ trunk/reactos/lib/pseh/i386/framebased-gcchack.c [iso-8859-1] Thu Feb 16 07:37:27
2012
@@ -94,13 +94,14 @@
{
__asm__ __volatile__
(
- "push %%ebp\n"
- "push $0\n"
- "push $0\n"
- "push $Return%=\n"
- "push %[target]\n"
+ "push %%ebp\n\t"
+ "push $0\n\t"
+ "push $0\n\t"
+ "push $Return%=\n\t"
+ "push %[target]\n\t"
"call %c[RtlUnwind]\n"
- "Return%=: pop %%ebp\n" :
+ "Return%=:\n\t"
+ "pop %%ebp" :
:
[target] "g" (target), [RtlUnwind] "g" (&RtlUnwind) :
"eax", "ebx", "ecx", "edx", "esi",
"edi", "flags", "memory"
@@ -131,13 +132,13 @@
__asm__ __volatile__
(
- "push %[ep]\n"
- "push %[frame]\n"
- "call *%[filter]\n"
- "pop %%edx\n"
- "pop %%edx\n" :
+ "push %[ep]\n\t"
+ "push %[frame]\n\t"
+ "call *%[filter]\n\t"
+ "pop %%edx\n\t"
+ "pop %%edx" :
[ret] "=a" (ret) :
- "c" (context), [filter] "r" (filter), [frame] "g"
(frame), [ep] "g" (ep) :
+ "c" (context), [filter] "r" (filter), [frame] "r"
(frame), [ep] "r" (ep) :
"edx", "flags", "memory"
);
@@ -158,7 +159,7 @@
body = _SEHFunctionFromTrampoline((_SEHTrampoline_t *)body);
}
- __asm__ __volatile__("call *%1\n" : : "c" (context), "r"
(body) : "eax", "edx", "flags", "memory");
+ __asm__ __volatile__("call *%1" : : "c" (context), "r"
(body) : "eax", "edx", "flags", "memory");
}
}
Modified: trunk/reactos/subsystems/win32/win32k/dib/dib16bpp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/di…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/dib16bpp.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/dib/dib16bpp.c [iso-8859-1] Thu Feb 16 07:37:27
2012
@@ -413,24 +413,24 @@
for (DestY = DestRect->top; DestY< DestRect->bottom; DestY++)
{
__asm__ __volatile__ (
- " cld\n"
- " mov %1,%%ebx\n"
- " mov %2,%%edi\n"
- " test $0x03, %%edi\n" /* Align to fullword boundary */
- " jz .FL1\n"
- " stosw\n"
- " dec %%ebx\n"
- " jz .FL2\n"
- ".FL1:\n"
- " mov %%ebx,%%ecx\n" /* Setup count of fullwords to fill */
- " shr $1,%%ecx\n"
- " rep stosl\n" /* The actual fill */
- " test $0x01, %%ebx\n" /* One left to do at the right side? */
- " jz .FL2\n"
- " stosw\n"
- ".FL2:\n"
+ "cld\n\t"
+ "mov %1,%%ebx\n\t"
+ "mov %2,%%edi\n\t"
+ "test $0x03, %%edi\n\t" /* Align to fullword boundary */
+ "jz 1f\n\t"
+ "stosw\n\t"
+ "dec %%ebx\n\t"
+ "jz 2f\n"
+ "1:\n\t"
+ "mov %%ebx,%%ecx\n\t" /* Setup count of fullwords to fill */
+ "shr $1,%%ecx\n\t"
+ "rep stosl\n\t" /* The actual fill */
+ "test $0x01, %%ebx\n\t" /* One left to do at the right side? */
+ "jz 2f\n\t"
+ "stosw\n"
+ "2:"
:
- : "a" (color), "r" (width), "m" (pos)
+ : "a" (color), "r" (width), "m" (pos)
: "%ecx", "%ebx", "%edi");
pos =(PULONG)((ULONG_PTR)pos + delta);
}
Modified: trunk/reactos/subsystems/win32/win32k/dib/dib24bpp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/di…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/dib24bpp.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/dib/dib24bpp.c [iso-8859-1] Thu Feb 16 07:37:27
2012
@@ -344,37 +344,37 @@
* So, taking endianness into account again, we need to fill with these
* ULONGs: CABC BCAB ABCA */
- /* This is about 30% faster than the generic C code below */
- __asm__ __volatile__ (
-" movl %1, %%ecx\n"
-" andl $0xffffff, %%ecx\n" /* 0ABC */
-" movl %%ecx, %%ebx\n" /* Construct BCAB in ebx */
-" shrl $8, %%ebx\n"
-" movl %%ecx, %%eax\n"
-" shll $16, %%eax\n"
-" orl %%eax, %%ebx\n"
-" movl %%ecx, %%edx\n" /* Construct ABCA in edx */
-" shll $8, %%edx\n"
-" movl %%ecx, %%eax\n"
-" shrl $16, %%eax\n"
-" orl %%eax, %%edx\n"
-" movl %%ecx, %%eax\n" /* Construct CABC in eax */
-" shll $24, %%eax\n"
-" orl %%ecx, %%eax\n"
-" movl %2, %%ecx\n" /* Load count */
-" shr $2, %%ecx\n"
-" movl %3, %%edi\n" /* Load dest */
-".FL1:\n"
-" movl %%eax, (%%edi)\n" /* Store 4 pixels, 12 bytes */
-" movl %%ebx, 4(%%edi)\n"
-" movl %%edx, 8(%%edi)\n"
-" addl $12, %%edi\n"
-" dec %%ecx\n"
-" jnz .FL1\n"
-" movl %%edi, %0\n"
- : "=m"(addr)
- : "m"(color), "m"(Count), "m"(addr)
- : "%eax", "%ebx", "%ecx", "%edx",
"%edi");
+ /* This is about 30% faster than the generic C code below */
+ __asm__ __volatile__ (
+ "movl %1, %%ecx\n\t"
+ "andl $0xffffff, %%ecx\n\t" /* 0ABC */
+ "movl %%ecx, %%ebx\n\t" /* Construct BCAB in ebx */
+ "shrl $8, %%ebx\n\t"
+ "movl %%ecx, %%eax\n\t"
+ "shll $16, %%eax\n\t"
+ "orl %%eax, %%ebx\n\t"
+ "movl %%ecx, %%edx\n\t" /* Construct ABCA in edx */
+ "shll $8, %%edx\n\t"
+ "movl %%ecx, %%eax\n\t"
+ "shrl $16, %%eax\n\t"
+ "orl %%eax, %%edx\n\t"
+ "movl %%ecx, %%eax\n\t" /* Construct CABC in eax */
+ "shll $24, %%eax\n\t"
+ "orl %%ecx, %%eax\n\t"
+ "movl %2, %%ecx\n\t" /* Load count */
+ "shr $2, %%ecx\n\t"
+ "movl %3, %%edi\n" /* Load dest */
+ "1:\n\t"
+ "movl %%eax, (%%edi)\n\t" /* Store 4 pixels, 12 bytes */
+ "movl %%ebx, 4(%%edi)\n\t"
+ "movl %%edx, 8(%%edi)\n\t"
+ "addl $12, %%edi\n\t"
+ "dec %%ecx\n\t"
+ "jnz 1b\n\t"
+ "movl %%edi, %0"
+ : "=m"(addr)
+ : "m"(color), "m"(Count), "m"(addr)
+ : "%eax", "%ebx", "%ecx", "%edx",
"%edi");
Count = Count & 0x03;
while (0 != Count--)
{