X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fglobal.h;h=e761d76eb3a0af8d705ee15dad35f10247856d93;hb=fa8651a5a680d2f25e03d6df5fd275e70d5cc696;hp=ab6165cd98c154c05ed7047c705323d9208a6387;hpb=1ecd5afb7596bf8234f4f26f2111b029af4462de;p=cacao.git diff --git a/src/vm/global.h b/src/vm/global.h index ab6165cd9..e761d76eb 100644 --- a/src/vm/global.h +++ b/src/vm/global.h @@ -1,9 +1,7 @@ /* src/vm/global.h - global definitions - Copyright (C) 1996-2005, 2007, 2006 R. Grafl, A. Krall, C. Kruegel, - C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, - E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, - J. Wenninger, Institut f. Computersprachen - TU Wien + Copyright (C) 1996-2005, 2006, 2007, 2008, 2010 + CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO This file is part of CACAO. @@ -22,8 +20,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: global.h 8210 2007-07-18 12:51:00Z twisti $ - */ @@ -31,21 +27,18 @@ #define _GLOBAL_H #include "config.h" + +#include +#include + #include "vm/types.h" /* additional data types ******************************************************/ -typedef void *voidptr; /* generic pointer */ typedef void (*functionptr) (void); /* generic function pointer */ typedef u1* methodptr; -typedef unsigned int bool; /* boolean data type */ - -#define true 1 -#define false 0 - - #if defined(ENABLE_SSA) /* immediate to get an addidional target Local Var Index */ /* for IINC in Combination with SSA */ @@ -79,10 +72,40 @@ typedef union { #define ALIGN_2(a) ALIGN_EVEN(a) +/* printf format defines ******************************************************/ + +/* Define printf formats which change size between 32- and 64-bit. */ + +#if SIZEOF_VOID_P == 8 +# define PRINTF_FORMAT_INTPTR_T "0x%016lx" +# define PRINTF_FORMAT_INT64_T "%ld" +#else +# define PRINTF_FORMAT_INTPTR_T "0x%08lx" +# define PRINTF_FORMAT_INT64_T "%lld" +#endif + + +/* convenience macros *********************************************************/ + +/* Makes a string of the argument (which is not macro-expanded). */ + +#define STR(a) #a + +/* There are multiple definitions of MIN out there, but we cannot be sure. */ + +#ifndef MIN +# define MIN(a,b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef MAX +# define MAX(a,b) (((a) > (b)) ? (a) : (b)) +#endif + + /* forward typedefs ***********************************************************/ -typedef struct java_objectheader java_objectheader; -typedef struct java_objectarray java_objectarray; +typedef struct java_object_t java_object_t; +typedef struct java_objectarray_t java_objectarray_t; #define MAX_ALIGN 8 /* most generic alignment for JavaVM values */ @@ -177,14 +200,16 @@ typedef struct java_objectarray java_objectarray; #define ACC_CLASS_REFLECT_MASK 0x0000ffff/* flags reported by reflection */ -#define ACC_CLASS_PRIMITIVE 0x00010000/* class is a primitive class */ +#define ACC_CLASS_PRIMITIVE 0x00010000 +#define ACC_CLASS_MEMBER 0x00020000 +#define ACC_CLASS_ANONYMOUS 0x00040000 -#define ACC_CLASS_HAS_POINTERS 0x00020000/* instance contains pointers */ +#define ACC_CLASS_HAS_POINTERS 0x00080000/* instance contains pointers */ -#define ACC_CLASS_REFERENCE_MASK 0x001c0000 -#define ACC_CLASS_REFERENCE_SOFT 0x00040000 -#define ACC_CLASS_REFERENCE_WEAK 0x00080000 -#define ACC_CLASS_REFERENCE_PHANTOM 0x00100000 +#define ACC_CLASS_REFERENCE_MASK 0x00700000 +#define ACC_CLASS_REFERENCE_SOFT 0x00100000 +#define ACC_CLASS_REFERENCE_WEAK 0x00200000 +#define ACC_CLASS_REFERENCE_PHANTOM 0x00400000 /* special flags used in methodinfo *******************************************/ @@ -192,11 +217,16 @@ typedef struct java_objectarray java_objectarray; #define ACC_METHOD_BUILTIN 0x00010000 /* use for descriptor parsing */ #define ACC_METHOD_IMPLEMENTED 0x00020000 /* there is an implementation */ #define ACC_METHOD_MONOMORPHIC 0x00040000 /* currently monomorphic method */ +#define ACC_METHOD_EA 0x00080000 /* method being escape analyzed */ +#define ACC_METHOD_MONOMORPHY_USED \ + 0x00100000 +#define ACC_METHOD_PARENT_MONOMORPHY_USED \ + 0x00200000 /* data structures of the runtime system **************************************/ -/* java_objectheader *********************************************************** +/* java_object_t *************************************************************** All objects (and arrays) which resides on the heap need the following header at the beginning of the data structure. @@ -205,15 +235,27 @@ typedef struct java_objectarray java_objectarray; *******************************************************************************/ -#define HDRFLAG_FLC 0x01 +#define HDRFLAG_MARK1 0x02 +#define HDRFLAG_MARK2 0x04 +#define HDRFLAG_UNCOLLECTABLE 0x08 +#define HDRFLAG_HASH_TAKEN 0x10 +#define HDRFLAG_HASH_ATTACHED 0x20 +#define HDRFLAG_REFERENCING 0x40 + +#include "threads/lockword.hpp" -struct java_objectheader { /* header for all objects */ - struct _vftbl *vftbl; /* pointer to virtual function table */ +struct java_object_t { /* header for all objects */ + struct _vftbl *vftbl; /* pointer to virtual function table */ #if defined(ENABLE_THREADS) - struct lock_record_t *monitorPtr; + uintptr_t lockword; #endif -#if defined(ENABLE_THREADS) || defined(ENABLE_GC_CACAO) - ptrint hdrflags; /* word containing the FLC and GC bits */ +#if defined(ENABLE_GC_CACAO) + uintptr_t hdrflags; /* word containing the GC bits */ +#endif +#if defined(ENABLE_ESCAPE_CHECK) + void *method; + void *thread; + uintptr_t escape; #endif }; @@ -226,10 +268,10 @@ struct java_objectheader { /* header for all objects */ which is referenced by the vftbl. */ -typedef struct java_arrayheader { /* header for all arrays */ - java_objectheader objheader; /* object header */ +typedef struct java_array_t { /* header for all arrays */ + java_object_t objheader; /* object header */ s4 size; /* array size */ -} java_arrayheader; +} java_array_t; @@ -238,55 +280,74 @@ typedef struct java_arrayheader { /* header for all arrays */ /* booleanarray and bytearray need identical memory layout (access methods use the same machine code */ -typedef struct java_booleanarray { - java_arrayheader header; +typedef struct java_booleanarray_t { + java_array_t header; u1 data[1]; -} java_booleanarray; +} java_booleanarray_t; -typedef struct java_bytearray { - java_arrayheader header; +typedef struct java_bytearray_t { + java_array_t header; s1 data[1]; -} java_bytearray; +} java_bytearray_t; -typedef struct java_chararray { - java_arrayheader header; +typedef struct java_chararray_t { + java_array_t header; u2 data[1]; -} java_chararray; +} java_chararray_t; -typedef struct java_shortarray { - java_arrayheader header; +typedef struct java_shortarray_t { + java_array_t header; s2 data[1]; -} java_shortarray; +} java_shortarray_t; -typedef struct java_intarray { - java_arrayheader header; +typedef struct java_intarray_t { + java_array_t header; s4 data[1]; -} java_intarray; +} java_intarray_t; -typedef struct java_longarray { - java_arrayheader header; +typedef struct java_longarray_t { + java_array_t header; s8 data[1]; -} java_longarray; +} java_longarray_t; -typedef struct java_floatarray { - java_arrayheader header; +typedef struct java_floatarray_t { + java_array_t header; float data[1]; -} java_floatarray; +} java_floatarray_t; -typedef struct java_doublearray { - java_arrayheader header; +typedef struct java_doublearray_t { + java_array_t header; double data[1]; -} java_doublearray; +} java_doublearray_t; /* objectarray and arrayarray need identical memory layout (access methods use the same machine code */ -struct java_objectarray { - java_arrayheader header; - java_objectheader *data[1]; +struct java_objectarray_t { + java_array_t header; + java_object_t *data[1]; }; +/* java_handle_t *************************************************************** + + TODO: document me! + +*******************************************************************************/ + +typedef java_object_t java_handle_t; +typedef java_handle_t java_handle_array_t; +typedef java_handle_array_t java_handle_objectarray_t; +typedef java_handle_array_t java_handle_booleanarray_t; +typedef java_handle_array_t java_handle_bytearray_t; +typedef java_handle_array_t java_handle_chararray_t; +typedef java_handle_array_t java_handle_shortarray_t; +typedef java_handle_array_t java_handle_intarray_t; +typedef java_handle_array_t java_handle_longarray_t; +typedef java_handle_array_t java_handle_floatarray_t; +typedef java_handle_array_t java_handle_doublearray_t; + + /* global constants related to the verifier ***********************************/ /* The verifier needs additional variables in the variable array. Since these */