[kaffe] CVS kaffe (hkraemer): fixed support for sysdepCallMethod using libffi

Kaffe CVS cvs-commits at kaffe.org
Fri Aug 27 05:32:05 PDT 2004


PatchSet 5112 
Date: 2004/08/27 12:22:00
Author: hkraemer
Branch: HEAD
Tag: (none) 
Log:
fixed support for sysdepCallMethod using libffi

Members: 
	ChangeLog:1.2668->1.2669 
	config/Makefile.am:1.49->1.50 
	config/Makefile.in:1.155->1.156 
	config/sysdepCallMethod-ffi.h:INITIAL->1.1 
	kaffe/kaffevm/support.c:1.72->1.73 
	kaffe/kaffevm/intrp/methodcalls.c:1.1->1.2 
	kaffe/kaffevm/jit/methodcalls.c:1.2->1.3 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.2668 kaffe/ChangeLog:1.2669
--- kaffe/ChangeLog:1.2668	Fri Aug 27 08:40:51 2004
+++ kaffe/ChangeLog	Fri Aug 27 12:22:00 2004
@@ -1,3 +1,16 @@
+2004-08-27  Helmer Kraemer  <hkraemer at freenet.de>
+
+	* kaffe/kaffevm/support.c: moved libffi related stuff ...
+
+	* config/sysdepCallMethod-ffi.h: ... into this new file
+
+	* kaffe/kaffevm/intrp/methodcalls.c, kaffe/kaffevm/jit/methodcalls.c:
+	include sysdepCallMethod-ffi.h if HAVE_LIBFFI is defined
+
+	* config/Makefile.am (noinst_HEADERS): added sysdepCallMethod-ffi.h
+
+	* config/Makefile.in: regenerated 
+
 2004-08-27  Guilhem Lavaux  <guilhem at kaffe.org>
 
 	* configure.ac: Moved AC_CONFIG_SUBDIRS to make configure
Index: kaffe/config/Makefile.am
diff -u kaffe/config/Makefile.am:1.49 kaffe/config/Makefile.am:1.50
--- kaffe/config/Makefile.am:1.49	Wed Aug 18 14:29:52 2004
+++ kaffe/config/Makefile.am	Fri Aug 27 12:22:03 2004
@@ -46,7 +46,8 @@
 	config-setjmp.h \
 	config-signal.h \
 	config-std.h \
-	kaffe-unix-stack.h
+	kaffe-unix-stack.h \
+	sysdepCallMethod-ffi.h
 
 EXTRA_DIST = \
 	config.alias \
Index: kaffe/config/Makefile.in
diff -u kaffe/config/Makefile.in:1.155 kaffe/config/Makefile.in:1.156
--- kaffe/config/Makefile.in:1.155	Wed Aug 18 14:29:52 2004
+++ kaffe/config/Makefile.in	Fri Aug 27 12:22:03 2004
@@ -371,7 +371,8 @@
 	config-setjmp.h \
 	config-signal.h \
 	config-std.h \
-	kaffe-unix-stack.h
+	kaffe-unix-stack.h \
+	sysdepCallMethod-ffi.h
 
 EXTRA_DIST = \
 	config.alias \
===================================================================
Checking out kaffe/config/sysdepCallMethod-ffi.h
RCS:  /home/cvs/kaffe/kaffe/config/sysdepCallMethod-ffi.h,v
VERS: 1.1
***************
--- /dev/null	Sun Aug  4 19:57:58 2002
+++ kaffe/config/sysdepCallMethod-ffi.h	Fri Aug 27 12:32:04 2004
@@ -0,0 +1,68 @@
+/*
+ * sysdepCallMethod-ffi.h
+ * Implementation of sysdepCallMethod using libffi
+ *
+ * Copyright (c) 2004
+ *      The kaffe.org's developers. See ChangeLog for details.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file.
+ */
+
+#ifndef __sysdepCallMethod_ffi_h__
+#define __sysdepCallMethod_ffi_h__
+
+#include <ffi.h>
+static inline ffi_type *j2ffi(char type)
+{
+        ffi_type *ftype;
+
+        switch (type) {
+        case 'J':
+                ftype = &ffi_type_sint64;
+                break;
+        case 'D':
+                ftype = &ffi_type_double;
+                break;
+        case 'F':
+                ftype = &ffi_type_float;
+                break;
+        default:
+                ftype = &ffi_type_uint;
+        }
+        return ftype;
+}
+
+#define sysdepCallMethod(CALL)                                          \
+do {                                                                    \
+        int i;                                                          \
+        ffi_cif cif;                                                    \
+        ffi_type *rtype;                                                \
+        ffi_type *argtypes[(CALL)->nrargs + 1];                         \
+        void *argvals[(CALL)->nrargs + 1];                              \
+        int fargs = 0;                                                  \
+        for (i = 0; i < (CALL)->nrargs; i++) {                          \
+                switch ((CALL)->callsize[i]) {                          \
+                case 1:                                                 \
+                        argtypes[fargs] = j2ffi((CALL)->calltype[i]);   \
+                        argvals[fargs] = &((CALL)->args[i].i);          \
+                        fargs++;                                        \
+                        break;                                          \
+                case 2:                                                 \
+                        argtypes[fargs] = j2ffi((CALL)->calltype[i]);   \
+                        argvals[fargs] = &((CALL)->args[i].j);          \
+                        fargs++;                                        \
+                default:                                                \
+                        break;                                          \
+                }                                                       \
+        }                                                               \
+        rtype = j2ffi ((CALL)->rettype);                                \
+        if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, fargs,                  \
+            rtype, argtypes) == FFI_OK) {                               \
+                ffi_call(&cif, (CALL)->function, (CALL)->ret, argvals); \
+        }                                                               \
+        else                                                            \
+                ABORT();                                                \
+} while (0);
+
+#endif /* __sysdepCallMethod_ffi_h__ */
Index: kaffe/kaffe/kaffevm/support.c
diff -u kaffe/kaffe/kaffevm/support.c:1.72 kaffe/kaffe/kaffevm/support.c:1.73
--- kaffe/kaffe/kaffevm/support.c:1.72	Thu Aug 19 19:29:02 2004
+++ kaffe/kaffe/kaffevm/support.c	Fri Aug 27 12:22:04 2004
@@ -28,9 +28,6 @@
 #include "exception.h"
 #include "slots.h"
 #include "support.h"
-#if !defined(HAVE_LIBFFI)
-# define NEED_sysdepCallMethod 1
-#endif /* HAVE_LIBFFI */
 #include "classMethod.h"
 #include "machine.h"
 #include "md.h"
@@ -52,61 +49,6 @@
 
 /* Anchor point for user defined properties */
 userProperty* userProperties = NULL;
-
-#if defined(HAVE_LIBFFI)
-#include <ffi.h>
-static inline ffi_type *j2ffi(char type)
-{
-	ffi_type *ftype;
-
-	switch (type) {
-	case 'J':
-		ftype = &ffi_type_sint64;
-		break;
-	case 'D':
-		ftype = &ffi_type_double;
-		break;
-	case 'F':
-		ftype = &ffi_type_float;
-		break;
-	default:
-		ftype = &ffi_type_uint;
-	}
-	return ftype;
-}
-
-#define sysdepCallMethod(CALL)						\
-do {									\
-	int i;								\
-	ffi_cif cif;							\
-	ffi_type *rtype;						\
-	ffi_type *argtypes[(CALL)->nrargs + 1];				\
-	void *argvals[(CALL)->nrargs + 1];				\
-	int fargs = 0;							\
-	for (i = 0; i < (CALL)->nrargs; i++) {				\
-		switch ((CALL)->callsize[i]) {				\
-		case 1:							\
-			argtypes[fargs] = j2ffi((CALL)->calltype[i]);	\
-			argvals[fargs] = &((CALL)->args[i].i);		\
-			fargs++;					\
-			break;						\
-		case 2:							\
-			argtypes[fargs] = j2ffi((CALL)->calltype[i]);	\
-			argvals[fargs] = &((CALL)->args[i].j);		\
-			fargs++;					\
-		default:						\
-			break;						\
-		}							\
-	}								\
-	rtype = j2ffi ((CALL)->rettype);				\
-	if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, fargs,			\
-	    rtype, argtypes) == FFI_OK) {				\
-		ffi_call(&cif, (CALL)->function, (CALL)->ret, argvals);	\
-	}								\
-	else								\
-		ABORT();						\
-} while (0);
-#endif /* HAVE_LIBFFI */
 
 /**
  * Call a Java method from native code.
Index: kaffe/kaffe/kaffevm/intrp/methodcalls.c
diff -u kaffe/kaffe/kaffevm/intrp/methodcalls.c:1.1 kaffe/kaffe/kaffevm/intrp/methodcalls.c:1.2
--- kaffe/kaffe/kaffevm/intrp/methodcalls.c:1.1	Thu Aug 19 19:29:03 2004
+++ kaffe/kaffe/kaffevm/intrp/methodcalls.c	Fri Aug 27 12:22:05 2004
@@ -11,8 +11,12 @@
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
-
+#include "config.h"
+#if defined(HAVE_LIBFFI)
+#include "sysdepCallMethod-ffi.h"
+#else
 #define NEED_sysdepCallMethod 1
+#endif
 #include "methodcalls.h"
 #include "thread.h"
 #include "slots.h"
Index: kaffe/kaffe/kaffevm/jit/methodcalls.c
diff -u kaffe/kaffe/kaffevm/jit/methodcalls.c:1.2 kaffe/kaffe/kaffevm/jit/methodcalls.c:1.3
--- kaffe/kaffe/kaffevm/jit/methodcalls.c:1.2	Sat Aug 21 14:53:32 2004
+++ kaffe/kaffe/kaffevm/jit/methodcalls.c	Fri Aug 27 12:22:05 2004
@@ -11,8 +11,13 @@
  * See the file "license.terms" for information on usage and redistribution 
  * of this file. 
  */
-
+#include "config.h"
+#if defined(HAVE_LIBFFI)
+#include "sysdepCallMethod-ffi.h"
+#else
 #define NEED_sysdepCallMethod 1
+#endif
+
 #include "methodcalls.h"
 
 #define TDBG(s)



More information about the kaffe mailing list