PatchSet 4214 
Date: 2003/12/11 17:56:17
Author: dalibor
Branch: HEAD
Tag: (none) 
Log:
Converted i386-qnx and i386-win32 sysdepCallMethods to inline functions

2003-12-11  Dalibor Topic <[EMAIL PROTECTED]>

        * config/arm/sysdepCallMethod.h: New file.

        * config/Makefile.am
        (EXTRA_DIST) Added config/arm/sysdepCallMethod.h.

        * aclocal.m4,
        config/Makefile.in,
        kaffe/Makefile.in,
        kaffe/kaffe/Makefile.in,
        kaffe/scripts/Makefile.in,
        kaffe/scripts/compat/Makefile.in,
        test/internal/Makefile.in,
        test/regression/Makefile.in:
        Regenerated.

        * config/arm/common.h
        (sysdepCallMethod) Moved into its own file,
        config/arm/sysdepCallMethod.h.

        * config/arm/linux/md.h,
        config/arm/netbsd1/md.h:
        Include config/arm/sysdepCallMethod.h.

        * config/arm/riscos/md.h:
        (sysdepCallMethod) Converted macro to inline function.

Members: 
        ChangeLog:1.1804->1.1805 
        aclocal.m4:1.78->1.79 
        config/Makefile.am:1.29->1.30 
        config/Makefile.in:1.96->1.97 
        config/i386/common.h:1.16->1.17 
        config/i386/sysdepCallMethod.h:INITIAL->1.1 
        config/i386/beos/md.h:1.5->1.6 
        config/i386/bsdi/md.h:1.3->1.4 
        config/i386/cygwin32/md.h:1.2->1.3 
        config/i386/dgux/md.h:1.2->1.3 
        config/i386/freebsd2/md.h:1.6->1.7 
        config/i386/gnu/md.h:1.2->1.3 
        config/i386/linux/md.h:1.5->1.6 
        config/i386/netbsd1/md.h:1.2->1.3 
        config/i386/nextstep3/md.h:1.3->1.4 
        config/i386/openbsd2/md.h:1.3->1.4 
        config/i386/oskit/md.h:1.4->1.5 
        config/i386/qnx/md.h:1.5->1.6 
        config/i386/sco3.2v5/md.h:1.2->1.3 
        config/i386/solaris2/md.h:1.2->1.3 
        config/i386/univel_svr4/md.h:1.4->1.5 
        config/i386/win32/md.h:1.2->1.3 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1804 kaffe/ChangeLog:1.1805
--- kaffe/ChangeLog:1.1804      Thu Dec 11 16:43:29 2003
+++ kaffe/ChangeLog     Thu Dec 11 17:56:17 2003
@@ -1,5 +1,40 @@
 2003-12-11  Dalibor Topic <[EMAIL PROTECTED]>
 
+       * config/i386/sysdepCallMethod.h: New file.
+
+       * config/Makefile.am
+       (EXTRA_DIST) Added config/i386/sysdepCallMethod.h.
+
+        * aclocal.m4,
+        config/Makefile.in:
+       Regenerated.
+
+        * config/i386/common.h:
+       (sysdepCallMethod) Moved into its own file,
+        config/i386/sysdepCallMethod.h.
+
+        * config/i386/bsdi/md.h,
+       config/i386/beos/md.h,
+        config/i386/cygwin32/md.h,
+        config/i386/dgux/md.h,
+        config/i386/freebsd2/md.h,
+        config/i386/gnu/md.h,
+        config/i386/linux/md.h,
+        config/i386/netbsd1/md.h,
+        config/i386/nextstep3/md.h,
+        config/i386/openbsd2/md.h,
+        config/i386/oskit/md.h,
+        config/i386/sco3.2v5/md.h,
+        config/i386/solaris2/md.h,
+        config/i386/univel_svr4/md.h:
+       Include config/i386/sysdepCallMethod.h.
+
+        * config/i386/win32/md.h,
+        config/i386/qnx/md.h:
+       (sysdepCallMethod) Converted macro to inline function.
+
+2003-12-11  Dalibor Topic <[EMAIL PROTECTED]>
+
        * config/arm/sysdepCallMethod.h: New file.
 
        * config/Makefile.am
Index: kaffe/aclocal.m4
diff -u kaffe/aclocal.m4:1.78 kaffe/aclocal.m4:1.79
--- kaffe/aclocal.m4:1.78       Thu Dec 11 16:43:30 2003
+++ kaffe/aclocal.m4    Thu Dec 11 17:56:18 2003
@@ -8723,7 +8723,7 @@
 AU_DEFUN([fp_WITH_DMALLOC], [AM_WITH_DMALLOC])
 
 # ----------------------------------------------------------------------------
-# $Id: aclocal.m4,v 1.78 2003/12/11 16:43:30 dalibor Exp $
+# $Id: aclocal.m4,v 1.79 2003/12/11 17:56:18 dalibor Exp $
 #
 # Copyright (C) 2003 Free Software Foundation, Inc.
 #
@@ -8767,7 +8767,7 @@
 #
 # GNU Crypto m4 macro for use by VM Providers
 #
-# $Revision: 1.78 $
+# $Revision: 1.79 $
 #
 
 # process --with-gnu-crypto configure option.
Index: kaffe/config/Makefile.am
diff -u kaffe/config/Makefile.am:1.29 kaffe/config/Makefile.am:1.30
--- kaffe/config/Makefile.am:1.29       Thu Dec 11 16:43:31 2003
+++ kaffe/config/Makefile.am    Thu Dec 11 17:56:20 2003
@@ -162,6 +162,7 @@
        i386/solaris2/jit-md.h \
        i386/solaris2/md.c \
        i386/solaris2/md.h \
+       i386/sysdepCallMethod.h \
        i386/threads.h \
        i386/trampolines.c \
        i386/univel_svr4/config.frag \
Index: kaffe/config/Makefile.in
diff -u kaffe/config/Makefile.in:1.96 kaffe/config/Makefile.in:1.97
--- kaffe/config/Makefile.in:1.96       Thu Dec 11 16:43:31 2003
+++ kaffe/config/Makefile.in    Thu Dec 11 17:56:20 2003
@@ -404,6 +404,7 @@
        i386/solaris2/jit-md.h \
        i386/solaris2/md.c \
        i386/solaris2/md.h \
+       i386/sysdepCallMethod.h \
        i386/threads.h \
        i386/trampolines.c \
        i386/univel_svr4/config.frag \
Index: kaffe/config/i386/common.h
diff -u kaffe/config/i386/common.h:1.16 kaffe/config/i386/common.h:1.17
--- kaffe/config/i386/common.h:1.16     Sat Oct  4 22:55:23 2003
+++ kaffe/config/i386/common.h  Thu Dec 11 17:56:20 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997, 1998, 1999
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -14,53 +17,6 @@
 
 /* The 386 never aligns to more than a 4 byte boundary. */
 #define        ALIGNMENT_OF_SIZE(S)    ((S) < 4 ? (S) : 4)
-
-/*
- * Make a call to a native or Java (JIT) method.
- *  This assembly code should build a standard C call using the passed
- *  call information.  By its nature this is highly processor specific.
- *  This function is mandatory for both JIT and Interpreter (since stubs
- *  have now been deprecated).
- */
-#if NEED_sysdepCallMethod
-static inline void sysdepCallMethod(callMethodInfo *call) {
-  unsigned args = call->nrargs;
-
-  /* Push all arguments into the stack, in last-to-first order.  This
-     assumes that the second 32bit-word of longs and doubles is
-     available as an additional int argument, as callMethod[AV]() do.  */
-  while (args > 0)
-    asm volatile ("pushl %0" : : "m" (call->args[--args].i) : "sp");
-
-  switch(call->retsize) {
-  case 0:
-    /* Must be void.  */
-    ((void (*)(void))(call->function))();
-    break;
-
-  case 1:
-    if (call->rettype == 'F')
-      call->ret->f = ((jfloat (*)(void))(call->function))();
-    else /* Must be 32-bit or smaller int.  */
-      call->ret->i = ((jint (*)(void))(call->function))();
-    break;
-
-  default:
-    /* It could've been `case 2;', but then we'd get an additional cmp
-     * that we don't really need.  */
-    if (call->rettype == 'D')
-      call->ret->d = ((jdouble (*)(void))(call->function))();
-    else /* Must be jlong.  */
-      call->ret->j = ((jlong (*)(void))(call->function))();
-    break;
-  }
-
-  /* Adjust the stack pointer.  */
-  asm volatile ("addl %0,%%esp" : :
-               "r" (call->argsize * sizeof(jint)) : "cc", "sp");
-}
-#endif /* NEED_sysdepCallMethod */
-
 
 #if defined(__GNUC__)
 #define KAFFE_PROFILER 1
===================================================================
Checking out kaffe/config/i386/sysdepCallMethod.h
RCS:  /home/cvs/kaffe/kaffe/config/i386/sysdepCallMethod.h,v
VERS: 1.1
***************
--- /dev/null   Sun Aug  4 19:57:58 2002
+++ kaffe/config/i386/sysdepCallMethod.h        Thu Dec 11 17:59:20 2003
@@ -0,0 +1,67 @@
+/*
+ * i386/sysdepCallMethod.h
+ * Common i386 sysdepCallMethod.
+ *
+ * Copyright (c) 1996, 1997, 1998, 1999
+ *     Transvirtual Technologies, Inc.  All rights reserved.
+ *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
+ * See the file "license.terms" for information on usage and redistribution 
+ * of this file. 
+ */
+
+#ifndef __i386_sysdepCallMethod_h
+#define __i386_sysdepCallMethod_h
+
+/* Needed for callMethodInfo declaration */
+#include "support.h"
+
+/*
+ * Make a call to a native or Java (JIT) method.
+ *  This assembly code should build a standard C call using the passed
+ *  call information.  By its nature this is highly processor specific.
+ *  This function is mandatory for both JIT and Interpreter (since stubs
+ *  have now been deprecated).
+ */
+#if NEED_sysdepCallMethod
+static inline void sysdepCallMethod(callMethodInfo *call) {
+  unsigned args = call->nrargs;
+
+  /* Push all arguments into the stack, in last-to-first order.  This
+     assumes that the second 32bit-word of longs and doubles is
+     available as an additional int argument, as callMethod[AV]() do.  */
+  while (args > 0)
+    asm volatile ("pushl %0" : : "m" (call->args[--args].i) : "sp");
+
+  switch(call->retsize) {
+  case 0:
+    /* Must be void.  */
+    ((void (*)(void))(call->function))();
+    break;
+
+  case 1:
+    if (call->rettype == 'F')
+      call->ret->f = ((jfloat (*)(void))(call->function))();
+    else /* Must be 32-bit or smaller int.  */
+      call->ret->i = ((jint (*)(void))(call->function))();
+    break;
+
+  default:
+    /* It could've been `case 2;', but then we'd get an additional cmp
+     * that we don't really need.  */
+    if (call->rettype == 'D')
+      call->ret->d = ((jdouble (*)(void))(call->function))();
+    else /* Must be jlong.  */
+      call->ret->j = ((jlong (*)(void))(call->function))();
+    break;
+  }
+
+  /* Adjust the stack pointer.  */
+  asm volatile ("addl %0,%%esp" : :
+               "r" (call->argsize * sizeof(jint)) : "cc", "sp");
+}
+#endif /* NEED_sysdepCallMethod */
+
+#endif /* __i386_sysdepCallMethod_h */
Index: kaffe/config/i386/beos/md.h
diff -u kaffe/config/i386/beos/md.h:1.5 kaffe/config/i386/beos/md.h:1.6
--- kaffe/config/i386/beos/md.h:1.5     Wed Aug 27 07:04:19 2003
+++ kaffe/config/i386/beos/md.h Thu Dec 11 17:56:20 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __i386_beos_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /*
Index: kaffe/config/i386/bsdi/md.h
diff -u kaffe/config/i386/bsdi/md.h:1.3 kaffe/config/i386/bsdi/md.h:1.4
--- kaffe/config/i386/bsdi/md.h:1.3     Wed Aug 27 07:04:19 2003
+++ kaffe/config/i386/bsdi/md.h Thu Dec 11 17:56:21 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __i386_bsdi_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /*
Index: kaffe/config/i386/cygwin32/md.h
diff -u kaffe/config/i386/cygwin32/md.h:1.2 kaffe/config/i386/cygwin32/md.h:1.3
--- kaffe/config/i386/cygwin32/md.h:1.2 Wed Aug 27 07:04:19 2003
+++ kaffe/config/i386/cygwin32/md.h     Thu Dec 11 17:56:21 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -16,6 +19,7 @@
 /* Thread handling */
 /**/
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /* Redefine the stack pointer offset */
Index: kaffe/config/i386/dgux/md.h
diff -u kaffe/config/i386/dgux/md.h:1.2 kaffe/config/i386/dgux/md.h:1.3
--- kaffe/config/i386/dgux/md.h:1.2     Wed Aug 27 07:04:20 2003
+++ kaffe/config/i386/dgux/md.h Thu Dec 11 17:56:21 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __i386_dgux_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /**/
Index: kaffe/config/i386/freebsd2/md.h
diff -u kaffe/config/i386/freebsd2/md.h:1.6 kaffe/config/i386/freebsd2/md.h:1.7
--- kaffe/config/i386/freebsd2/md.h:1.6 Tue Jun 24 19:26:01 2003
+++ kaffe/config/i386/freebsd2/md.h     Thu Dec 11 17:56:22 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __i386_freebsd2_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /*
Index: kaffe/config/i386/gnu/md.h
diff -u kaffe/config/i386/gnu/md.h:1.2 kaffe/config/i386/gnu/md.h:1.3
--- kaffe/config/i386/gnu/md.h:1.2      Wed Aug 27 07:04:21 2003
+++ kaffe/config/i386/gnu/md.h  Thu Dec 11 17:56:22 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __ki386_gnu_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /* Function prototype for signal handlers */
Index: kaffe/config/i386/linux/md.h
diff -u kaffe/config/i386/linux/md.h:1.5 kaffe/config/i386/linux/md.h:1.6
--- kaffe/config/i386/linux/md.h:1.5    Wed Aug 27 07:04:21 2003
+++ kaffe/config/i386/linux/md.h        Thu Dec 11 17:56:22 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __ki386_linux_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /* Linux requires a little initialisation */
Index: kaffe/config/i386/netbsd1/md.h
diff -u kaffe/config/i386/netbsd1/md.h:1.2 kaffe/config/i386/netbsd1/md.h:1.3
--- kaffe/config/i386/netbsd1/md.h:1.2  Thu Aug  7 10:47:14 2003
+++ kaffe/config/i386/netbsd1/md.h      Thu Dec 11 17:56:23 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __i386_netbsd1_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /*
Index: kaffe/config/i386/nextstep3/md.h
diff -u kaffe/config/i386/nextstep3/md.h:1.3 kaffe/config/i386/nextstep3/md.h:1.4
--- kaffe/config/i386/nextstep3/md.h:1.3        Wed Aug 27 07:04:21 2003
+++ kaffe/config/i386/nextstep3/md.h    Thu Dec 11 17:56:23 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __i386_nextstep3_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /*
Index: kaffe/config/i386/openbsd2/md.h
diff -u kaffe/config/i386/openbsd2/md.h:1.3 kaffe/config/i386/openbsd2/md.h:1.4
--- kaffe/config/i386/openbsd2/md.h:1.3 Mon Aug 25 06:14:46 2003
+++ kaffe/config/i386/openbsd2/md.h     Thu Dec 11 17:56:23 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __i386_openbsd2_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /*
Index: kaffe/config/i386/oskit/md.h
diff -u kaffe/config/i386/oskit/md.h:1.4 kaffe/config/i386/oskit/md.h:1.5
--- kaffe/config/i386/oskit/md.h:1.4    Wed Aug 27 07:04:22 2003
+++ kaffe/config/i386/oskit/md.h        Thu Dec 11 17:56:24 2003
@@ -4,6 +4,9 @@
  * See the file "license.terms" for information on usage and redistribution
  * of this file.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * Contributed by the Flux Research Group at the University of Utah.
  * Authors: Godmar Back, Leigh Stoller
  */
@@ -12,6 +15,7 @@
 #define __i386_oskit_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /*
Index: kaffe/config/i386/qnx/md.h
diff -u kaffe/config/i386/qnx/md.h:1.5 kaffe/config/i386/qnx/md.h:1.6
--- kaffe/config/i386/qnx/md.h:1.5      Sat Oct  4 22:55:24 2003
+++ kaffe/config/i386/qnx/md.h  Thu Dec 11 17:56:24 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -22,6 +25,7 @@
 #include "i386/common.h"
 #include "i386/threads.h"
 
+#include "support.h"
 /*
  * Redefine stack pointer offset.
  */
@@ -77,43 +81,44 @@
  * point unit.  We must make some changes to the sysdepCallMethod to
  * handle this.
  */
-#undef sysdepCallMethod
-#define        sysdepCallMethod(CALL)                                          \
-       asm volatile (" \n"                                             \
-"1:                    \n"                                             \
-"              cmpl $0,%0 \n"                                          \
-"              je 3f \n"                                               \
-"              decl %0 \n"                                             \
-"              cmpb $0,(%2,%0) \n"                                     \
-"              je 1b \n"                                               \
-"              cmpb $1,(%2,%0) \n"                                     \
-"              je 2f \n"                                               \
-"              pushl 4(%1,%0,8) \n"                                    \
-"2:            \n"                                                     \
-"              pushl (%1,%0,8) \n"                                     \
-"              jmpl 1b \n"                                             \
-"3:            \n"                                                     \
-"              call *%3 \n"                                            \
-"              movl %5,%%ebx \n"                                       \
-"              movb %4,%%cl \n"                                        \
-"              movl %%eax,(%%ebx) \n"                                  \
-"              cmpb $0x44,%%cl \n"                                     \
-"              je 4f \n"                                               \
-"              cmpb $0x4a,%%cl \n"                                     \
-"              jne 5f \n"                                              \
-"4:            \n"                                                     \
-"              movl %%edx,4(%%ebx) \n"                                 \
-"5:            \n"                                                     \
-"      " :                                                             \
-         : "r" ((CALL)->nrargs),                                       \
-           "r" ((CALL)->args),                                         \
-           "r" ((CALL)->callsize),                                     \
-           "m" ((CALL)->function),                                     \
-           "m" ((CALL)->rettype),                                      \
-           "m" ((CALL)->ret)                                           \
-         : "eax", "ebx", "ecx", "edx", "edi", "esi", "cc", "memory");  \
-       asm volatile (" \n"                                             \
-"              subl %0,%%esp \n"                                       \
-       " : : "r" ((CALL)->argsize * sizeof(jint)) : "cc")
+static inline void sysdepCallMethod(callMethodInfo *call) 
+{
+       asm volatile (" \n"
+"1:                    \n"
+"              cmpl $0,%0 \n"
+"              je 3f \n"
+"              decl %0 \n"
+"              cmpb $0,(%2,%0) \n"
+"              je 1b \n"
+"              cmpb $1,(%2,%0) \n"
+"              je 2f \n"
+"              pushl 4(%1,%0,8) \n"
+"2:            \n"
+"              pushl (%1,%0,8) \n"
+"              jmpl 1b \n"
+"3:            \n"
+"              call *%3 \n"
+"              movl %5,%%ebx \n"
+"              movb %4,%%cl \n"
+"              movl %%eax,(%%ebx) \n"
+"              cmpb $0x44,%%cl \n"
+"              je 4f \n"
+"              cmpb $0x4a,%%cl \n"
+"              jne 5f \n"
+"4:            \n"
+"              movl %%edx,4(%%ebx) \n"
+"5:            \n"
+"      " :
+         : "r" ((call)->nrargs),
+           "r" ((call)->args),
+           "r" ((call)->callsize),
+           "m" ((call)->function),
+           "m" ((call)->rettype),
+           "m" ((call)->ret)
+         : "eax", "ebx", "ecx", "edx", "edi", "esi", "cc", "memory");
+       asm volatile (" \n"
+"              subl %0,%%esp \n"
+"      " : : "r" ((call)->argsize * sizeof(jint)) : "cc");
+}
 
 #endif
Index: kaffe/config/i386/sco3.2v5/md.h
diff -u kaffe/config/i386/sco3.2v5/md.h:1.2 kaffe/config/i386/sco3.2v5/md.h:1.3
--- kaffe/config/i386/sco3.2v5/md.h:1.2 Wed Aug 27 07:04:23 2003
+++ kaffe/config/i386/sco3.2v5/md.h     Thu Dec 11 17:56:24 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __i386_sco3_2v5_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 #define        POSIX_SIGNALS
Index: kaffe/config/i386/solaris2/md.h
diff -u kaffe/config/i386/solaris2/md.h:1.2 kaffe/config/i386/solaris2/md.h:1.3
--- kaffe/config/i386/solaris2/md.h:1.2 Wed Aug 27 07:04:23 2003
+++ kaffe/config/i386/solaris2/md.h     Thu Dec 11 17:56:25 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __i386_solaris2_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 #define        SIGNAL_ARGS(sig, sc) int sig, siginfo_t* sip, ucontext_t* sc
Index: kaffe/config/i386/univel_svr4/md.h
diff -u kaffe/config/i386/univel_svr4/md.h:1.4 kaffe/config/i386/univel_svr4/md.h:1.5
--- kaffe/config/i386/univel_svr4/md.h:1.4      Wed Aug 27 07:04:24 2003
+++ kaffe/config/i386/univel_svr4/md.h  Thu Dec 11 17:56:25 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -13,6 +16,7 @@
 #define __i386_univel_svr4_md_h
 
 #include "i386/common.h"
+#include "i386/sysdepCallMethod.h"
 #include "i386/threads.h"
 
 /* Function prototype for signal handlers */
Index: kaffe/config/i386/win32/md.h
diff -u kaffe/config/i386/win32/md.h:1.2 kaffe/config/i386/win32/md.h:1.3
--- kaffe/config/i386/win32/md.h:1.2    Tue Jul 27 23:30:41 1999
+++ kaffe/config/i386/win32/md.h        Thu Dec 11 17:56:25 2003
@@ -5,6 +5,9 @@
  * Copyright (c) 1996, 1997, 1998
  *     Transvirtual Technologies, Inc.  All rights reserved.
  *
+ * Copyright (c) 2003
+ *      Kaffe.org contributors. See ChangeLog for details.
+ *
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
@@ -17,6 +20,8 @@
 #include "i386/common.h"
 #include "i386/threads.h"
 
+#include "support.h"
+
 #if !defined(EXTERN_C)
 #define EXTERN_C extern
 #endif
@@ -33,8 +38,10 @@
 
 extern void _sysdepCallMethod(void*);
 
-#undef sysdepCallMethod
-#define        sysdepCallMethod(M) _sysdepCallMethod((void*)(M)) /* Provided by 
WIN32-MD.ASM */
+static inline void sysdepCallMethod(callMethodInfo *call) {
+       /* Provided by WIN32-MD.ASM */
+       return _sysdepCallMethod((void*)(call));
+}
 
 extern int _compareAndExchange(void*, void*, void*);
 

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to