diff --exclude='*.cm*' --exclude='*.o' -u -r ocaml-3.07/byterun/config.h ocaml-3.07-icc/byterun/config.h
--- ocaml-3.07/byterun/config.h	2002-12-16 00:27:06.000000000 +0100
+++ ocaml-3.07-icc/byterun/config.h	2004-05-18 09:19:45.000000000 +0200
@@ -75,7 +75,7 @@
 /* We use threaded code interpretation if the compiler provides labels
    as first-class values (GCC 2.x). */
 
-#if defined(__GNUC__) && __GNUC__ >= 2 && !defined(DEBUG) && !defined (SHRINKED_GNUC)
+#if (defined(__INTEL_COMPILER) || (defined(__GNUC__) && __GNUC__ >= 2)) && !defined(DEBUG) && !defined (SHRINKED_GNUC)
 #define THREADED_CODE
 #endif
 
diff --exclude='*.cm*' --exclude='*.o' -u -r ocaml-3.07/byterun/interp.c ocaml-3.07-icc/byterun/interp.c
--- ocaml-3.07/byterun/interp.c	2003-06-30 10:28:46.000000000 +0200
+++ ocaml-3.07-icc/byterun/interp.c	2004-05-18 10:05:12.000000000 +0200
@@ -113,7 +113,11 @@
    For GCC, I have hand-assigned hardware registers for several architectures.
 */
 
-#if defined(__GNUC__) && !defined(DEBUG)
+/* D. Monniaux: icc (Intel Compiler) defines __GNUC__ but somehow this
+register allocation results in a buggy byterunner... Disable if
+__INTEL_COMPILER is defined. */
+
+#if (defined(__GNUC__) && !defined(__INTEL_COMPILER)) && !defined(DEBUG)
 #ifdef __mips__
 #define PC_REG asm("$16")
 #define SP_REG asm("$17")
Binary files ocaml-3.07/byterun/libcamlrun.a and ocaml-3.07-icc/byterun/libcamlrun.a differ
diff --exclude='*.cm*' --exclude='*.o' -u -r ocaml-3.07/byterun/misc.h ocaml-3.07-icc/byterun/misc.h
--- ocaml-3.07/byterun/misc.h	2003-05-12 16:21:52.000000000 +0200
+++ ocaml-3.07-icc/byterun/misc.h	2004-05-18 09:19:02.000000000 +0200
@@ -38,7 +38,7 @@
 typedef char * addr;
 /* </private> */
 
-#ifdef __GNUC__
+#if defined(__GNUC__) || defined(__INTEL_COMPILER)
 /* Works only in GCC 2.5 and later */
 #define Noreturn __attribute ((noreturn))
 #else
diff --exclude='*.cm*' --exclude='*.o' -u -r ocaml-3.07/byterun/sys.c ocaml-3.07-icc/byterun/sys.c
--- ocaml-3.07/byterun/sys.c	2003-03-24 16:24:51.000000000 +0100
+++ ocaml-3.07-icc/byterun/sys.c	2004-05-17 23:15:59.000000000 +0200
@@ -73,7 +73,7 @@
 #else
 
 extern int sys_nerr;
-extern char * sys_errlist [];
+/* DM extern char * sys_errlist []; */
 
 char * error_message(void)
 {
diff --exclude='*.cm*' --exclude='*.o' -u -r ocaml-3.07/stdlib/camlheader ocaml-3.07-icc/stdlib/camlheader
diff --exclude='*.cm*' --exclude='*.o' -u -r ocaml-3.07/yacc/defs.h ocaml-3.07-icc/yacc/defs.h
--- ocaml-3.07/yacc/defs.h	2003-09-03 15:26:10.000000000 +0200
+++ ocaml-3.07-icc/yacc/defs.h	2004-05-18 09:21:24.000000000 +0200
@@ -316,7 +316,7 @@
 
 /* global functions */
 
-#ifdef __GNUC__
+#if defined(__GNUC__) || defined(__INTEL_COMPILER)
 /* Works only in GCC 2.5 and later */
 #define Noreturn __attribute ((noreturn))
 #else

