[PATCH] Make wine build with the Intel CC

Jonathan Schleifer js at h3c.de
Sat Apr 21 10:53:07 CDT 2007


Hi!

This patch makes it possible to build an run wine with the Intel
compiler.

Here are the environment variables I used to build:

export CC="icc"
export CFLAGS="-O3 -xP -msse3 -parallel"
export CXX="icc"
export CXXFLAGS="-O3 -xP -msse3 -parallel"
export LDFLAGS="-lguide -lsvml -lstdc++ -parallel"
export MAKEFLAGS="-j 2"

(Not all are needed, just quoting from my .profile)

And here's the patch:

diff -Nru wine-0.9.35/dlls/kernel32/sync.c wine-0.9.35-icc/dlls/kernel32/sync.c
--- wine-0.9.35/dlls/kernel32/sync.c	2007-04-13 17:47:52.000000000 +0200
+++ wine-0.9.35-icc/dlls/kernel32/sync.c	2007-04-21 17:20:13.000000000 +0200
@@ -1885,12 +1885,14 @@
  *		InterlockedCompareExchange (KERNEL32.@)
  */
 /* LONG WINAPI InterlockedCompareExchange( PLONG dest, LONG xchg, LONG compare ); */
+#ifndef __INTEL_COMPILER
 __ASM_GLOBAL_FUNC(InterlockedCompareExchange,
                   "movl 12(%esp),%eax\n\t"
                   "movl 8(%esp),%ecx\n\t"
                   "movl 4(%esp),%edx\n\t"
                   "lock; cmpxchgl %ecx,(%edx)\n\t"
                   "ret $12")
+#endif
 
 /***********************************************************************
  *		InterlockedExchange (KERNEL32.@)
diff -Nru wine-0.9.35/dlls/kernel32/thread.c wine-0.9.35-icc/dlls/kernel32/thread.c
--- wine-0.9.35/dlls/kernel32/thread.c	2007-04-13 17:47:52.000000000 +0200
+++ wine-0.9.35-icc/dlls/kernel32/thread.c	2007-04-21 17:21:25.000000000 +0200
@@ -554,11 +554,13 @@
  *		SetLastError (KERNEL32.@)
  */
 /* void WINAPI SetLastError( DWORD error ); */
+#ifndef __INTEL_COMPILER
 __ASM_GLOBAL_FUNC( SetLastError,
                    "movl 4(%esp),%eax\n\t"
                    ".byte 0x64\n\t"
                    "movl %eax,0x34\n\t"
                    "ret $4" )
+#endif
 
 /***********************************************************************
  *		GetLastError (KERNEL.148)
diff -Nru wine-0.9.35/dlls/ntdll/thread.c wine-0.9.35-icc/dlls/ntdll/thread.c
--- wine-0.9.35/dlls/ntdll/thread.c	2007-04-13 17:47:52.000000000 +0200
+++ wine-0.9.35-icc/dlls/ntdll/thread.c	2007-04-21 17:19:41.000000000 +0200
@@ -1429,7 +1429,9 @@
  */
 #if defined(__i386__) && defined(__GNUC__)
 
+#ifndef __INTEL_COMPILER
 __ASM_GLOBAL_FUNC( NtCurrentTeb, ".byte 0x64\n\tmovl 0x18,%eax\n\tret" )
+#endif
 
 #elif defined(__i386__) && defined(_MSC_VER)
 
diff -Nru wine-0.9.35/libs/wine/ldt.c wine-0.9.35-icc/libs/wine/ldt.c
--- wine-0.9.35/libs/wine/ldt.c	2007-04-13 17:47:52.000000000 +0200
+++ wine-0.9.35-icc/libs/wine/ldt.c	2007-04-21 17:19:41.000000000 +0200
@@ -480,10 +480,14 @@
 __ASM_GLOBAL_FUNC( wine_get_cs, "movw %cs,%ax\n\tret" )
 __ASM_GLOBAL_FUNC( wine_get_ds, "movw %ds,%ax\n\tret" )
 __ASM_GLOBAL_FUNC( wine_get_es, "movw %es,%ax\n\tret" )
+#ifndef __INTEL_COMPILER
 __ASM_GLOBAL_FUNC( wine_get_fs, "movw %fs,%ax\n\tret" )
+#endif
 __ASM_GLOBAL_FUNC( wine_get_gs, "movw %gs,%ax\n\tret" )
 __ASM_GLOBAL_FUNC( wine_get_ss, "movw %ss,%ax\n\tret" )
+#ifndef __INTEL_COMPILER
 __ASM_GLOBAL_FUNC( wine_set_fs, "movl 4(%esp),%eax\n\tmovw %ax,%fs\n\tret" )
+#endif
 __ASM_GLOBAL_FUNC( wine_set_gs, "movl 4(%esp),%eax\n\tmovw %ax,%gs\n\tret" )
 # endif /* defined(_MSC_VER) */
 
diff -Nru wine-0.9.35/programs/winefile/winefile.c wine-0.9.35-icc/programs/winefile/winefile.c
--- wine-0.9.35/programs/winefile/winefile.c	2007-04-13 17:47:52.000000000 +0200
+++ wine-0.9.35-icc/programs/winefile/winefile.c	2007-04-21 17:19:41.000000000 +0200
@@ -283,7 +283,11 @@
 
 	if (!pvswprintf) {
 		HMODULE hModMsvcrt = LoadLibraryA("msvcrt");
+#ifdef __INTEL_COMPILER
+		pvswprintf = GetProcAddress(hModMsvcrt, "vswprintf");
+#else
 		pvswprintf = (int(__cdecl*)(WCHAR*,const WCHAR*,va_list)) GetProcAddress(hModMsvcrt, "vswprintf");
+#endif
 	}
 
 	va_start(ap, fmt);

I #ifdef'd the asm code out since for some strange reason, it was
already defined when using ICC.

Could you please test it and commit it if it works?

-- 
Jonathan



More information about the wine-devel mailing list