Added an "aligned" size field to various objectheaders, to allow for faster garbage...
authorphil <none@none>
Tue, 10 Nov 1998 17:33:40 +0000 (17:33 +0000)
committerphil <none@none>
Tue, 10 Nov 1998 17:33:40 +0000 (17:33 +0000)
builtin.c
global.h
src/vm/builtin.c
src/vm/global.h

index 5ffa051cacee6ecc81b2fdc453ff8c2426001e8a..a1a489bf7df7afe2aeacf63d60d3d0e03c745281 100644 (file)
--- a/builtin.c
+++ b/builtin.c
@@ -335,11 +335,20 @@ s4 builtin_canstore (java_objectarray *a, java_objectheader *o)
                        
 *****************************************************************************/
 
+#define ALIGNMENT 3
+#define align_size(size)       ((size + ((1 << ALIGNMENT) - 1)) & ~((1 << ALIGNMENT) - 1))
+
 java_objectheader *builtin_new (classinfo *c)
 {
        java_objectheader *o;
-       
+
+#ifdef SIZE_FROM_CLASSINFO
+       c->alignedsize = align_size(c->instancesize);
+
+       o = heap_allocate ( c->alignedsize, true, c->finalizer );
+#else
        o = heap_allocate ( c->instancesize, true, c->finalizer );
+#endif
        if (!o) return NULL;
        
        memset (o, 0, c->instancesize);
@@ -362,20 +371,53 @@ java_objectheader *builtin_new (classinfo *c)
 
 *****************************************************************************/
 
+static
+void* __builtin_newarray(s4 base_size,
+                                                s4 size, 
+                                                bool references,
+                                                int elementsize,
+                                                int arraytype)
+{
+       java_arrayheader *a;
+#ifdef SIZE_FROM_CLASSINFO
+       s4 alignedsize = align_size(base_size + (size-1) * elementsize);
+
+       a = heap_allocate ( alignedsize, true, NULL );
+#else  
+       a = heap_allocate ( sizeof(java_objectarray) + (size-1) * elementsize, 
+                           references, 
+                                               NULL);
+#endif
+       if (!a) return NULL;
+
+#if SIZE_FROM_CLASSINFO
+       memset(a, 0, alignedsize);
+#else
+       memset(a, 0, base_size + (size-1) * elementsize);
+#endif 
+
+       a -> objheader.vftbl = class_array -> vftbl;
+       a -> size = size;
+#ifdef SIZE_FROM_CLASSINFO
+       a -> alignedsize = alignedsize;
+#endif
+       a -> arraytype = arraytype;
+
+       return a;
+}
+
+
 java_objectarray *builtin_anewarray (s4 size, classinfo *elementtype)
 {
-       s4 i;
-       java_objectarray *a;
-       
-       a = heap_allocate ( sizeof(java_objectarray) + (size-1) * sizeof(void*), 
-                           true, 0 /* FALSE */ );
+       java_objectarray *a;    
+       a = (java_objectarray*)__builtin_newarray(sizeof(java_objectarray),
+                                                                                         size, 
+                                                                                         true, 
+                                                                                         sizeof(void*), 
+                                                                                         ARRAYTYPE_OBJECT);
        if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_OBJECT;
+
        a -> elementtype = elementtype;
-       for (i=0; i<size; i++) a->data[i] = NULL;
        return a;
 }
 
@@ -395,18 +437,15 @@ java_objectarray *builtin_anewarray (s4 size, classinfo *elementtype)
 java_arrayarray *builtin_newarray_array 
         (s4 size, constant_arraydescriptor *elementdesc)
 {
-       s4 i;
-       java_arrayarray *a;
-       
-       a = heap_allocate ( sizeof(java_arrayarray) + (size-1) * sizeof(void*), 
-                           true, NULL );
+       java_arrayarray *a;     
+       a = (java_arrayarray*)__builtin_newarray(sizeof(java_arrayarray),
+                                                                                        size, 
+                                                                                        true, 
+                                                                                        sizeof(void*), 
+                                                                                        ARRAYTYPE_ARRAY);
        if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_ARRAY;
+
        a -> elementdescriptor = elementdesc;
-       for (i=0; i<size; i++) a->data[i] = NULL;
        return a;
 }
 
@@ -422,17 +461,12 @@ java_arrayarray *builtin_newarray_array
 
 java_booleanarray *builtin_newarray_boolean (s4 size)
 {
-       java_booleanarray *a;
-       
-       a = heap_allocate ( sizeof(java_booleanarray) + (size-1) * sizeof(u1), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_BOOLEAN;
-       memset (a->data, 0, sizeof(u1) * size);
-
+       java_booleanarray *a;   
+       a = (java_booleanarray*)__builtin_newarray(sizeof(java_booleanarray),
+                                                                                          size, 
+                                                                                          false, 
+                                                                                          sizeof(u1), 
+                                                                                          ARRAYTYPE_BOOLEAN);
        return a;
 }
 
@@ -445,17 +479,12 @@ java_booleanarray *builtin_newarray_boolean (s4 size)
 
 java_chararray *builtin_newarray_char (s4 size)
 {
-       java_chararray *a;
-       
-       a = heap_allocate ( sizeof(java_chararray) + (size-1) * sizeof(u2), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_CHAR;
-       memset (a->data, 0, sizeof(u2) * size);
-
+       java_chararray *a;      
+       a = (java_chararray*)__builtin_newarray(sizeof(java_chararray),
+                                                                                       size, 
+                                                                                       false, 
+                                                                                       sizeof(u2), 
+                                                                                       ARRAYTYPE_CHAR);
        return a;
 }
 
@@ -469,17 +498,12 @@ java_chararray *builtin_newarray_char (s4 size)
 
 java_floatarray *builtin_newarray_float (s4 size)
 {
-       s4 i;
-       java_floatarray *a;
-       
-       a = heap_allocate ( sizeof(java_floatarray) + (size-1) * sizeof(float), 
-                           false, NULL );
-       if (!a) return NULL;
-
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_FLOAT;
-       for (i=0; i<size; i++) a->data[i] = 0.0;
+       java_floatarray *a;     
+       a = (java_floatarray*)__builtin_newarray(sizeof(java_floatarray),
+                                                                                        size, 
+                                                                                        false, 
+                                                                                        sizeof(float), 
+                                                                                        ARRAYTYPE_FLOAT);
        return a;
 }
 
@@ -493,17 +517,12 @@ java_floatarray *builtin_newarray_float (s4 size)
 
 java_doublearray *builtin_newarray_double (s4 size)
 {
-       s4 i;
-       java_doublearray *a;
-       
-       a = heap_allocate ( sizeof(java_doublearray) + (size-1) * sizeof(double), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_DOUBLE;
-       for (i=0; i<size; i++) a->data[i] = 0.0;
+       java_doublearray *a;    
+       a = (java_doublearray*)__builtin_newarray(sizeof(java_doublearray),
+                                                                                         size, 
+                                                                                         false, 
+                                                                                         sizeof(double), 
+                                                                                         ARRAYTYPE_DOUBLE);
        return a;
 }
 
@@ -519,16 +538,12 @@ java_doublearray *builtin_newarray_double (s4 size)
 
 java_bytearray *builtin_newarray_byte (s4 size)
 {
-       java_bytearray *a;
-       
-       a = heap_allocate ( sizeof(java_bytearray) + (size-1) * sizeof(s1), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array->vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_BYTE;
-       memset (a->data, 0, sizeof(u1) * size);
+       java_bytearray *a;      
+       a = (java_bytearray*)__builtin_newarray(sizeof(java_bytearray),
+                                                                                       size, 
+                                                                                       false, 
+                                                                                       sizeof(u1), 
+                                                                                       ARRAYTYPE_BYTE);
        return a;
 }
 
@@ -542,16 +557,12 @@ java_bytearray *builtin_newarray_byte (s4 size)
 
 java_shortarray *builtin_newarray_short (s4 size)
 {
-       java_shortarray *a;
-       
-       a = heap_allocate ( sizeof(java_shortarray) + (size-1) * sizeof(s2), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_SHORT;
-       memset (a->data, 0, sizeof(s2) * size);
+       java_shortarray *a;     
+       a = (java_shortarray*)__builtin_newarray(sizeof(java_shortarray),
+                                                                                          size, 
+                                                                                          false, 
+                                                                                          sizeof(s2), 
+                                                                                          ARRAYTYPE_SHORT);
        return a;
 }
 
@@ -565,16 +576,12 @@ java_shortarray *builtin_newarray_short (s4 size)
 
 java_intarray *builtin_newarray_int (s4 size)
 {
-       java_intarray *a;
-       
-       a = heap_allocate ( sizeof(java_intarray) + (size-1) * sizeof(s4), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_INT;
-       memset (a->data, 0, sizeof(s4) * size);
+       java_intarray *a;       
+       a = (java_intarray*)__builtin_newarray(sizeof(java_intarray),
+                                                                                  size, 
+                                                                                  false, 
+                                                                                  sizeof(s4), 
+                                                                                  ARRAYTYPE_INT);
        return a;
 }
 
@@ -588,16 +595,12 @@ java_intarray *builtin_newarray_int (s4 size)
 
 java_longarray *builtin_newarray_long (s4 size)
 {
-       java_longarray *a;
-       
-       a = heap_allocate ( sizeof(java_longarray) + (size-1) * sizeof(s8), 
-                           false, NULL );
-       if (!a) return NULL;
-
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_LONG;
-       memset (a->data, 0, sizeof(s8) * size);
+       java_longarray *a;      
+       a = (java_longarray*)__builtin_newarray(sizeof(java_longarray),
+                                                                                       size, 
+                                                                                       false, 
+                                                                                       sizeof(s8), 
+                                                                                       ARRAYTYPE_LONG);
        return a;
 }
 
index dc791983d4c9915d6e5923262094b6a2635d78f8..fb818435c23a84131bd7bdc0c3c6f03f4911248e 100644 (file)
--- a/global.h
+++ b/global.h
@@ -12,7 +12,7 @@
        Changes: Mark     Probst  (schani)   EMAIL: cacao@complang.tuwien.ac.at
                         Philipp  Tomsich (phil)     EMAIL: cacao@complang.tuwien.ac.at
 
-       Last Change: 1998/10/30
+       Last Change: $Id: global.h 55 1998-11-10 17:33:40Z phil $
 
 *******************************************************************************/
 
 
 #define STATISTICS          /* if enabled collects program statistics         */
 
-/* JIT_MARKER_SUPPORT is the define used to toggle Just-in-time generated
-       marker functions on and off.
-*/
-#undef  JIT_MARKER_SUPPORT  /* phil   */
+/* 
+ * JIT_MARKER_SUPPORT is the define used to toggle Just-in-time generated
+ * marker functions on and off.
+ *
+ * SIZE_FROM_CLASSINFO toggles between the bitmap_based and the new method 
+ * of determining the sizes of objects on the heap.
+ */
+#undef JIT_MARKER_SUPPORT        /* phil */
+#undef SIZE_FROM_CLASSINFO
+//#define SIZE_FROM_CLASSINFO
 
 /* standard includes **********************************************************/
 
@@ -239,6 +245,9 @@ struct java_objectheader {              /* header for all objects             */
 typedef struct java_arrayheader {       /* header for all arrays              */
        java_objectheader objheader;        /* object header                      */
        s4 size;                            /* array size                         */
+#ifdef SIZE_FROM_CLASSINFO
+       s4 alignedsize; /* phil */
+#endif
        s4 arraytype;                       /* array type from previous list      */
 } java_arrayheader;
 
@@ -398,6 +407,10 @@ struct classinfo {                /* class structure                          */
        s4                      index;            /* hierarchy depth (classes) or index
                                         (interfaces)                             */ 
        s4          instancesize;     /* size of an instance of this class        */
+#ifdef SIZE_FROM_CLASSINFO
+       s4          alignedsize;      /* size of an instance, aligned to the 
+                                                                        allocation size on the heap */
+#endif
 
        vftbl      *vftbl;            /* pointer to virtual function table        */
 
index 5ffa051cacee6ecc81b2fdc453ff8c2426001e8a..a1a489bf7df7afe2aeacf63d60d3d0e03c745281 100644 (file)
@@ -335,11 +335,20 @@ s4 builtin_canstore (java_objectarray *a, java_objectheader *o)
                        
 *****************************************************************************/
 
+#define ALIGNMENT 3
+#define align_size(size)       ((size + ((1 << ALIGNMENT) - 1)) & ~((1 << ALIGNMENT) - 1))
+
 java_objectheader *builtin_new (classinfo *c)
 {
        java_objectheader *o;
-       
+
+#ifdef SIZE_FROM_CLASSINFO
+       c->alignedsize = align_size(c->instancesize);
+
+       o = heap_allocate ( c->alignedsize, true, c->finalizer );
+#else
        o = heap_allocate ( c->instancesize, true, c->finalizer );
+#endif
        if (!o) return NULL;
        
        memset (o, 0, c->instancesize);
@@ -362,20 +371,53 @@ java_objectheader *builtin_new (classinfo *c)
 
 *****************************************************************************/
 
+static
+void* __builtin_newarray(s4 base_size,
+                                                s4 size, 
+                                                bool references,
+                                                int elementsize,
+                                                int arraytype)
+{
+       java_arrayheader *a;
+#ifdef SIZE_FROM_CLASSINFO
+       s4 alignedsize = align_size(base_size + (size-1) * elementsize);
+
+       a = heap_allocate ( alignedsize, true, NULL );
+#else  
+       a = heap_allocate ( sizeof(java_objectarray) + (size-1) * elementsize, 
+                           references, 
+                                               NULL);
+#endif
+       if (!a) return NULL;
+
+#if SIZE_FROM_CLASSINFO
+       memset(a, 0, alignedsize);
+#else
+       memset(a, 0, base_size + (size-1) * elementsize);
+#endif 
+
+       a -> objheader.vftbl = class_array -> vftbl;
+       a -> size = size;
+#ifdef SIZE_FROM_CLASSINFO
+       a -> alignedsize = alignedsize;
+#endif
+       a -> arraytype = arraytype;
+
+       return a;
+}
+
+
 java_objectarray *builtin_anewarray (s4 size, classinfo *elementtype)
 {
-       s4 i;
-       java_objectarray *a;
-       
-       a = heap_allocate ( sizeof(java_objectarray) + (size-1) * sizeof(void*), 
-                           true, 0 /* FALSE */ );
+       java_objectarray *a;    
+       a = (java_objectarray*)__builtin_newarray(sizeof(java_objectarray),
+                                                                                         size, 
+                                                                                         true, 
+                                                                                         sizeof(void*), 
+                                                                                         ARRAYTYPE_OBJECT);
        if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_OBJECT;
+
        a -> elementtype = elementtype;
-       for (i=0; i<size; i++) a->data[i] = NULL;
        return a;
 }
 
@@ -395,18 +437,15 @@ java_objectarray *builtin_anewarray (s4 size, classinfo *elementtype)
 java_arrayarray *builtin_newarray_array 
         (s4 size, constant_arraydescriptor *elementdesc)
 {
-       s4 i;
-       java_arrayarray *a;
-       
-       a = heap_allocate ( sizeof(java_arrayarray) + (size-1) * sizeof(void*), 
-                           true, NULL );
+       java_arrayarray *a;     
+       a = (java_arrayarray*)__builtin_newarray(sizeof(java_arrayarray),
+                                                                                        size, 
+                                                                                        true, 
+                                                                                        sizeof(void*), 
+                                                                                        ARRAYTYPE_ARRAY);
        if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_ARRAY;
+
        a -> elementdescriptor = elementdesc;
-       for (i=0; i<size; i++) a->data[i] = NULL;
        return a;
 }
 
@@ -422,17 +461,12 @@ java_arrayarray *builtin_newarray_array
 
 java_booleanarray *builtin_newarray_boolean (s4 size)
 {
-       java_booleanarray *a;
-       
-       a = heap_allocate ( sizeof(java_booleanarray) + (size-1) * sizeof(u1), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_BOOLEAN;
-       memset (a->data, 0, sizeof(u1) * size);
-
+       java_booleanarray *a;   
+       a = (java_booleanarray*)__builtin_newarray(sizeof(java_booleanarray),
+                                                                                          size, 
+                                                                                          false, 
+                                                                                          sizeof(u1), 
+                                                                                          ARRAYTYPE_BOOLEAN);
        return a;
 }
 
@@ -445,17 +479,12 @@ java_booleanarray *builtin_newarray_boolean (s4 size)
 
 java_chararray *builtin_newarray_char (s4 size)
 {
-       java_chararray *a;
-       
-       a = heap_allocate ( sizeof(java_chararray) + (size-1) * sizeof(u2), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_CHAR;
-       memset (a->data, 0, sizeof(u2) * size);
-
+       java_chararray *a;      
+       a = (java_chararray*)__builtin_newarray(sizeof(java_chararray),
+                                                                                       size, 
+                                                                                       false, 
+                                                                                       sizeof(u2), 
+                                                                                       ARRAYTYPE_CHAR);
        return a;
 }
 
@@ -469,17 +498,12 @@ java_chararray *builtin_newarray_char (s4 size)
 
 java_floatarray *builtin_newarray_float (s4 size)
 {
-       s4 i;
-       java_floatarray *a;
-       
-       a = heap_allocate ( sizeof(java_floatarray) + (size-1) * sizeof(float), 
-                           false, NULL );
-       if (!a) return NULL;
-
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_FLOAT;
-       for (i=0; i<size; i++) a->data[i] = 0.0;
+       java_floatarray *a;     
+       a = (java_floatarray*)__builtin_newarray(sizeof(java_floatarray),
+                                                                                        size, 
+                                                                                        false, 
+                                                                                        sizeof(float), 
+                                                                                        ARRAYTYPE_FLOAT);
        return a;
 }
 
@@ -493,17 +517,12 @@ java_floatarray *builtin_newarray_float (s4 size)
 
 java_doublearray *builtin_newarray_double (s4 size)
 {
-       s4 i;
-       java_doublearray *a;
-       
-       a = heap_allocate ( sizeof(java_doublearray) + (size-1) * sizeof(double), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_DOUBLE;
-       for (i=0; i<size; i++) a->data[i] = 0.0;
+       java_doublearray *a;    
+       a = (java_doublearray*)__builtin_newarray(sizeof(java_doublearray),
+                                                                                         size, 
+                                                                                         false, 
+                                                                                         sizeof(double), 
+                                                                                         ARRAYTYPE_DOUBLE);
        return a;
 }
 
@@ -519,16 +538,12 @@ java_doublearray *builtin_newarray_double (s4 size)
 
 java_bytearray *builtin_newarray_byte (s4 size)
 {
-       java_bytearray *a;
-       
-       a = heap_allocate ( sizeof(java_bytearray) + (size-1) * sizeof(s1), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array->vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_BYTE;
-       memset (a->data, 0, sizeof(u1) * size);
+       java_bytearray *a;      
+       a = (java_bytearray*)__builtin_newarray(sizeof(java_bytearray),
+                                                                                       size, 
+                                                                                       false, 
+                                                                                       sizeof(u1), 
+                                                                                       ARRAYTYPE_BYTE);
        return a;
 }
 
@@ -542,16 +557,12 @@ java_bytearray *builtin_newarray_byte (s4 size)
 
 java_shortarray *builtin_newarray_short (s4 size)
 {
-       java_shortarray *a;
-       
-       a = heap_allocate ( sizeof(java_shortarray) + (size-1) * sizeof(s2), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_SHORT;
-       memset (a->data, 0, sizeof(s2) * size);
+       java_shortarray *a;     
+       a = (java_shortarray*)__builtin_newarray(sizeof(java_shortarray),
+                                                                                          size, 
+                                                                                          false, 
+                                                                                          sizeof(s2), 
+                                                                                          ARRAYTYPE_SHORT);
        return a;
 }
 
@@ -565,16 +576,12 @@ java_shortarray *builtin_newarray_short (s4 size)
 
 java_intarray *builtin_newarray_int (s4 size)
 {
-       java_intarray *a;
-       
-       a = heap_allocate ( sizeof(java_intarray) + (size-1) * sizeof(s4), 
-                           false, NULL );
-       if (!a) return NULL;
-       
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_INT;
-       memset (a->data, 0, sizeof(s4) * size);
+       java_intarray *a;       
+       a = (java_intarray*)__builtin_newarray(sizeof(java_intarray),
+                                                                                  size, 
+                                                                                  false, 
+                                                                                  sizeof(s4), 
+                                                                                  ARRAYTYPE_INT);
        return a;
 }
 
@@ -588,16 +595,12 @@ java_intarray *builtin_newarray_int (s4 size)
 
 java_longarray *builtin_newarray_long (s4 size)
 {
-       java_longarray *a;
-       
-       a = heap_allocate ( sizeof(java_longarray) + (size-1) * sizeof(s8), 
-                           false, NULL );
-       if (!a) return NULL;
-
-       a -> header.objheader.vftbl = class_array -> vftbl;
-       a -> header.size = size;
-       a -> header.arraytype = ARRAYTYPE_LONG;
-       memset (a->data, 0, sizeof(s8) * size);
+       java_longarray *a;      
+       a = (java_longarray*)__builtin_newarray(sizeof(java_longarray),
+                                                                                       size, 
+                                                                                       false, 
+                                                                                       sizeof(s8), 
+                                                                                       ARRAYTYPE_LONG);
        return a;
 }
 
index dc791983d4c9915d6e5923262094b6a2635d78f8..fb818435c23a84131bd7bdc0c3c6f03f4911248e 100644 (file)
@@ -12,7 +12,7 @@
        Changes: Mark     Probst  (schani)   EMAIL: cacao@complang.tuwien.ac.at
                         Philipp  Tomsich (phil)     EMAIL: cacao@complang.tuwien.ac.at
 
-       Last Change: 1998/10/30
+       Last Change: $Id: global.h 55 1998-11-10 17:33:40Z phil $
 
 *******************************************************************************/
 
 
 #define STATISTICS          /* if enabled collects program statistics         */
 
-/* JIT_MARKER_SUPPORT is the define used to toggle Just-in-time generated
-       marker functions on and off.
-*/
-#undef  JIT_MARKER_SUPPORT  /* phil   */
+/* 
+ * JIT_MARKER_SUPPORT is the define used to toggle Just-in-time generated
+ * marker functions on and off.
+ *
+ * SIZE_FROM_CLASSINFO toggles between the bitmap_based and the new method 
+ * of determining the sizes of objects on the heap.
+ */
+#undef JIT_MARKER_SUPPORT        /* phil */
+#undef SIZE_FROM_CLASSINFO
+//#define SIZE_FROM_CLASSINFO
 
 /* standard includes **********************************************************/
 
@@ -239,6 +245,9 @@ struct java_objectheader {              /* header for all objects             */
 typedef struct java_arrayheader {       /* header for all arrays              */
        java_objectheader objheader;        /* object header                      */
        s4 size;                            /* array size                         */
+#ifdef SIZE_FROM_CLASSINFO
+       s4 alignedsize; /* phil */
+#endif
        s4 arraytype;                       /* array type from previous list      */
 } java_arrayheader;
 
@@ -398,6 +407,10 @@ struct classinfo {                /* class structure                          */
        s4                      index;            /* hierarchy depth (classes) or index
                                         (interfaces)                             */ 
        s4          instancesize;     /* size of an instance of this class        */
+#ifdef SIZE_FROM_CLASSINFO
+       s4          alignedsize;      /* size of an instance, aligned to the 
+                                                                        allocation size on the heap */
+#endif
 
        vftbl      *vftbl;            /* pointer to virtual function table        */