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