[kaffe] CVS kaffe (robilad): doc fixes for support.h

Kaffe CVS cvs-commits at kaffe.org
Sun Jul 3 19:05:33 PDT 2005


PatchSet 6694 
Date: 2005/07/04 01:59:01
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
doc fixes for support.h
2005-07-04  Michael Franz  <mvfranz at gmail.com>

        * kaffe/kaffevm/support.h (callMethodInfo): Improved and fixed docs.

Members: 
	ChangeLog:1.4218->1.4219 
	kaffe/kaffevm/support.h:INITIAL->1.41 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4218 kaffe/ChangeLog:1.4219
--- kaffe/ChangeLog:1.4218	Mon Jul  4 01:12:32 2005
+++ kaffe/ChangeLog	Mon Jul  4 01:59:01 2005
@@ -1,3 +1,7 @@
+2005-07-04  Michael Franz  <mvfranz at gmail.com>
+
+	* kaffe/kaffevm/support.h (callMethodInfo): Improved and fixed docs.
+
 2005-07-04  Riccardo Mottola  <rmottola at users.sf.net>
 
 	* config/powerpc/netbsd1/jit3-md.h
===================================================================
Checking out kaffe/kaffe/kaffevm/support.h
RCS:  /home/cvs/kaffe/kaffe/kaffe/kaffevm/support.h,v
VERS: 1.41
***************
--- /dev/null	Sun Aug  4 19:57:58 2002
+++ kaffe/kaffe/kaffevm/support.h	Mon Jul  4 02:05:33 2005
@@ -0,0 +1,181 @@
+/*
+ * support.h
+ * Various support routines.
+ *
+ * Copyright (c) 1996, 1997
+ *	Transvirtual Technologies, Inc.  All rights reserved.
+ *
+ * See the file "license.terms" for information on usage and redistribution 
+ * of this file. 
+ */
+
+#ifndef __support_h
+#define	__support_h
+
+#include "config-std.h"
+#include "gtypes.h"
+#include <stdarg.h>
+
+#define KTHREAD(function)	jthread_ ## function
+#define KSIGNAL(function)	jsignal_ ## function
+#define KSEM(function)		ksem_ ## function
+#define KMUTEX(function)	jmutex_ ## function
+#define KCONDVAR(function)	jcondvar_ ## function
+
+/* For user defined properties */
+typedef struct _userProperty {
+        char*                   key;
+        char*                   value;
+        struct _userProperty*   next;
+} userProperty;
+
+typedef struct _nativeFunction {
+	char*			name;
+	void*			func;
+} nativeFunction;
+
+#define	NATIVE_FUNC_INCREMENT	(256)
+
+extern nativeFunction* native_funcs;
+
+extern userProperty* userProperties;
+
+struct _methods;
+struct _errorInfo;
+
+/* 64 should put us on the safe side */
+#define	MAXMARGS		64
+
+/*
+ * The callMethodInfo structure describes the information necessary to 
+ * invoke a native or just-in-time compiled method.
+ *
+ * It is the task of the sysdepCallMethod macro, usually defined in 
+ * config/$arch/sysdepCallMethod.h, to generate a procedure call that 
+ * conforms to the calling convention of a particular architecture or 
+ * set of build tools.
+ *
+ * The sysdepCallMethod macro takes a single argument of type callMethodInfo *
+ * that describes where the parameters are, where the return value should
+ * go and what the signature of the method is.
+ *
+ * `jvalue' is a union defined in include/jni.h.  It corresponds
+ * to an entry on the Java stack. 
+ * The suffixes i,j,b,c,s,l,f,d access the corresponding element of
+ * (Java) type int, long, boolean, char, short, ref, float, and double.
+ *
+ * `args' is an array containing the arguments passed to the function.
+ * It corresponds to the Java stack and has `nrargs' valid entries with 
+ * the following property:
+ *
+ * If two adjacent slots on the Java stack are combined to a 64bit value,
+ * it will also use two array entries, and not one.  However, the first 
+ * entry will contain the 64bit value (in j or d, depending on the type), 
+ * and the second entry will be undefined.  This allows for easier access, 
+ * while preserving indexing.  Thus, some array entries will have 0, some
+ * 32 and some 64 bits of valid data in them.  The callsize array says
+ * which one it is.  
+ *
+ * callsize[i] may be 0, 1, or 2, depending on the number of valid bits
+ * in args[i].  Similarly, calltype[i] contains the signature type of the
+ * argument in args[i] ('J', 'F', etc.)
+ *
+ * To simplify 32 bit assembly code, we copy the last 32 bits of a 64
+ * bit arg into the next slot.  This allows you to treat args as an
+ * array of 32 bit values.  This simplification also makes a C version
+ * of sysdepCallMethod more viable, and such a function is defined in
+ * mi.c.
+ *
+ * Note that "callsize[i] == 2 iff callsize[i+1] == 0" -- this 
+ * property can also be exploited by a sysdepCallMethod macros. 
+ *
+ * `function' is a pointer to the method to be invoked.
+ *
+ * `retsize' and `rettype' have the same value ranges as callsize[i] and 
+ * calltype[i],  except they correspond to the return value.  The 
+ * sysdepCallMethod must store the return value in the proper type at *ret.
+ */
+typedef struct {
+	void*			function;  /* method information */
+	jvalue*			args; /* treated as an array of method arguments */
+	jvalue*			ret;
+	int			nrargs; /* number of arguments in args */
+	int			argsize;
+	char			retsize;
+	char			rettype;
+	char			*callsize;
+	char			*calltype;
+} callMethodInfo;
+
+struct Hjava_lang_String;
+struct Hjava_lang_Class;
+struct Hjava_lang_Object;
+struct Hjava_lang_Throwable;
+struct Hjava_lang_ClassLoader;
+
+extern const char*		getEngine(void);
+extern void initEngine(void);
+extern void		do_execute_java_method(jvalue *retval, void*, const char*, const char*, struct _methods*, int, ...);
+extern void		do_execute_java_method_v(jvalue *retval, void*, const char*, const char*, struct _methods*, int, va_list);
+extern void		do_execute_java_class_method(jvalue *retval, const char*, struct Hjava_lang_ClassLoader*, const char*, const char*, ...);
+extern void		do_execute_java_class_method_v(jvalue *retval, const char*, struct Hjava_lang_ClassLoader*, const char*, const char*, va_list);
+
+extern struct Hjava_lang_Object* execute_java_constructor(const char*, struct Hjava_lang_ClassLoader*, struct Hjava_lang_Class*, const char*, ...);
+extern struct Hjava_lang_Object* execute_java_constructor_v(const char*, struct Hjava_lang_ClassLoader*, struct Hjava_lang_Class*, const char*, va_list);
+extern jlong		currentTime(void);
+
+extern void	KaffeVM_callMethodA(struct _methods*, void*, void*, jvalue*, jvalue*, int);
+extern void	KaffeVM_callMethodV(struct _methods*, void*, void*, va_list, jvalue*);
+extern void     KaffeVM_safeCallMethodA(struct _methods*, void*, void*, jvalue*, jvalue*, int);
+extern void     KaffeVM_safeCallMethodV(struct _methods*, void*, void*, va_list, jvalue*);
+extern struct _methods*	lookupClassMethod(struct Hjava_lang_Class*, const char*, const char*, struct _errorInfo*);
+extern struct _methods*	lookupObjectMethod(struct Hjava_lang_Object*, const char*, const char*, struct _errorInfo*);
+
+struct _strconst;
+extern void SignalError(const char *, const char *);
+extern void SignalErrorf(const char *, const char *, ...) PRINTFFORMAT(2,3);
+extern void unimp(const char*);
+extern void kprintf(FILE*, const char*, ...) PRINTFFORMAT(2,3);
+extern int addClasspath(const char*);
+extern int prependClasspath(const char*);
+
+void classname2pathname(const char* from, char* to);
+void pathname2classname(const char* from, char* to);
+int bitCount(int bits);
+
+/*
+ * Macros to manipulate bit arrays.  
+ */
+#define BITMAP_BPI	(sizeof(int) * 8)
+
+/* compute the number of bytes needed to hold 'b' bits. */
+#define BITMAP_BYTE_SIZE(b) (((b) + BITMAP_BPI - 1) / BITMAP_BPI)
+
+/* create a new bitmap for b bits */
+#define BITMAP_NEW(b, gctype)	\
+    (int *)gc_calloc(BITMAP_BYTE_SIZE(b), sizeof(int), (gctype))
+
+/* set nth bit, counting from MSB to the right */
+#define BITMAP_SET(m, n) \
+    (m[(n) / BITMAP_BPI] |= (1 << (BITMAP_BPI - 1 - (n) % BITMAP_BPI)))
+
+/* clear the nth bit, counting from MSB to the right */
+#define BITMAP_CLEAR(m, n) \
+    (m[(n) / BITMAP_BPI] &= ~(1 << (BITMAP_BPI - 1 - (n) % BITMAP_BPI)))
+
+/* test nth bit, counting from MSB to the right */
+#define BITMAP_ISSET(m, n) \
+    (m[(n) / BITMAP_BPI] & (1 << (BITMAP_BPI - 1 - (n) % BITMAP_BPI)))
+
+/* copy nbits from bitmap src to bitmap dst */
+#define BITMAP_COPY(dst, src, nbits) \
+    memcpy(dst, src, ((nbits + BITMAP_BPI - 1)/BITMAP_BPI) * sizeof(int))
+
+/* dump a bitmap for debugging */
+#define BITMAP_DUMP(m, N) { int n; \
+    for (n = 0; n < N; n++) \
+	if (m[(n) / BITMAP_BPI] &  \
+		(1 << (BITMAP_BPI - 1 - (n) % BITMAP_BPI))) \
+	    dprintf("1"); else dprintf("0"); }
+
+#endif



More information about the kaffe mailing list