Merged with tip.
[cacao.git] / src / vm / global.h
index 94e04cf3f126cf39c72681645a9476a923805751..c0fe462a21d6ecd52c6f96c0b7ec65e1d86e1ded 100644 (file)
@@ -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
+   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 8245 2007-07-31 09:55:04Z michi $
-
 */
 
 
@@ -31,6 +27,9 @@
 #define _GLOBAL_H
 
 #include "config.h"
+
+#include <stdint.h>
+
 #include "vm/types.h"
 
 
@@ -45,7 +44,6 @@ 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 +77,28 @@ 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_INT64_T    "%ld"
+#else
+# define PRINTF_FORMAT_INT64_T    "%lld"
+#endif
+
+
+/* convenience macros *********************************************************/
+
+/* Makes a string of the argument (which is not macro-expanded). */
+
+#define STR(a)  #a
+
+
 /* 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 +193,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 *******************************************/
@@ -196,7 +214,7 @@ typedef struct java_objectarray java_objectarray;
 
 /* 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,7 +223,6 @@ typedef struct java_objectarray java_objectarray;
 
 *******************************************************************************/
 
-#define HDRFLAG_FLC           0x01
 #define HDRFLAG_MARK1         0x02
 #define HDRFLAG_MARK2         0x04
 #define HDRFLAG_UNCOLLECTABLE 0x08
@@ -213,13 +230,13 @@ typedef struct java_objectarray java_objectarray;
 #define HDRFLAG_HASH_ATTACHED 0x20
 #define HDRFLAG_REFERENCING   0x40
 
-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
 };
 
@@ -232,10 +249,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;
 
 
 
@@ -244,55 +261,89 @@ 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!
+
+*******************************************************************************/
+
+#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
+
+
 /* global constants related to the verifier ***********************************/
 
 /* The verifier needs additional variables in the variable array. Since these */