X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fglobal.h;h=e761d76eb3a0af8d705ee15dad35f10247856d93;hb=fa8651a5a680d2f25e03d6df5fd275e70d5cc696;hp=7445b750d1295cc932f285672508eb65070d8584;hpb=2bd27cc7f7b22a44366b8b0c0df6ffaf5f2cf929;p=cacao.git diff --git a/src/vm/global.h b/src/vm/global.h index 7445b750d..e761d76eb 100644 --- a/src/vm/global.h +++ b/src/vm/global.h @@ -1,6 +1,6 @@ /* src/vm/global.h - global definitions - Copyright (C) 1996-2005, 2006, 2007, 2008 + Copyright (C) 1996-2005, 2006, 2007, 2008, 2010 CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO This file is part of CACAO. @@ -28,6 +28,7 @@ #include "config.h" +#include #include #include "vm/types.h" @@ -35,15 +36,9 @@ /* 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 */ @@ -82,12 +77,31 @@ typedef union { /* 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_object_t java_object_t; @@ -203,6 +217,11 @@ typedef struct java_objectarray_t java_objectarray_t; #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 **************************************/ @@ -223,6 +242,8 @@ typedef struct java_objectarray_t java_objectarray_t; #define HDRFLAG_HASH_ATTACHED 0x20 #define HDRFLAG_REFERENCING 0x40 +#include "threads/lockword.hpp" + struct java_object_t { /* header for all objects */ struct _vftbl *vftbl; /* pointer to virtual function table */ #if defined(ENABLE_THREADS) @@ -231,6 +252,11 @@ struct java_object_t { /* header for all objects */ #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 }; @@ -309,32 +335,17 @@ struct java_objectarray_t { *******************************************************************************/ -#if defined(ENABLE_HANDLES) -typedef struct java_handle_t { - java_object_t *heap_object; -} java_handle_t; - -typedef struct java_handle_objectarray_t { java_objectarray_t *heap_object; } java_handle_objectarray_t; -typedef struct java_handle_booleanarray_t { java_booleanarray_t *heap_object; } java_handle_booleanarray_t; -typedef struct java_handle_bytearray_t { java_bytearray_t *heap_object; } java_handle_bytearray_t; -typedef struct java_handle_chararray_t { java_chararray_t *heap_object; } java_handle_chararray_t; -typedef struct java_handle_shortarray_t { java_shortarray_t *heap_object; } java_handle_shortarray_t; -typedef struct java_handle_intarray_t { java_intarray_t *heap_object; } java_handle_intarray_t; -typedef struct java_handle_longarray_t { java_longarray_t *heap_object; } java_handle_longarray_t; -typedef struct java_handle_floatarray_t { java_floatarray_t *heap_object; } java_handle_floatarray_t; -typedef struct java_handle_doublearray_t { java_doublearray_t *heap_object; } java_handle_doublearray_t; -#else typedef java_object_t java_handle_t; -typedef java_objectarray_t java_handle_objectarray_t; -typedef java_booleanarray_t java_handle_booleanarray_t; -typedef java_bytearray_t java_handle_bytearray_t; -typedef java_chararray_t java_handle_chararray_t; -typedef java_shortarray_t java_handle_shortarray_t; -typedef java_intarray_t java_handle_intarray_t; -typedef java_longarray_t java_handle_longarray_t; -typedef java_floatarray_t java_handle_floatarray_t; -typedef java_doublearray_t java_handle_doublearray_t; -#endif +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 ***********************************/