Joseph Wenninger
Christian Thalinger
- $Id: global.h 5021 2006-06-07 12:19:27Z twisti $
+ $Id: global.h 6030 2006-11-20 14:18:12Z michi $
*/
#define false 0
+#if defined(ENABLE_SSA)
+/* immediate to get an addidional target Local Var Index */
+/* for IINC in Combination with SSA */
+struct imm {
+ s4 i;
+ s4 op1_t;
+};
+#endif
+
/* immediate data union */
typedef union {
void *a;
functionptr fp;
u1 b[8];
+#if defined(ENABLE_SSA)
+ struct imm _i;
+#endif
} imm_union;
typedef struct java_objectarray java_objectarray;
-/* define some CACAO paths ****************************************************/
-
-#define CLASSPATH_LIBRARY_PATH CLASSPATH_LIBDIR "/classpath"
-
-
#define MAX_ALIGN 8 /* most generic alignment for JavaVM values */
/* basic data types ***********************************************************/
-/* CAUTION: jit/jit.h relies on these numerical values! */
-#define TYPE_INT 0 /* the JavaVM types must numbered in the */
-#define TYPE_LONG 1 /* same order as the ICMD_Ixxx to ICMD_Axxx */
-#define TYPE_FLOAT 2 /* instructions (LOAD and STORE) */
-#define TYPE_DOUBLE 3 /* integer, long, float, double, address */
-#define TYPE_ADDRESS 4 /* all other types can be numbered arbitrarly */
+/* The JavaVM types must numbered in the same order as the ICMD_Ixxx
+ to ICMD_Axxx instructions (LOAD and STORE). All other types can be
+ numbered arbitrarily. */
+
+#define TYPE_INT 0
+#define TYPE_LNG 1
+#define TYPE_FLT 2
+#define TYPE_DBL 3
+#define TYPE_ADR 4
+
+#define TYPE_RET 8 /* must not share bits with TYPE_FLT or TYPE_LNG */
#define TYPE_VOID 10
+
+#define IS_INT_LNG_TYPE(a) (!((a) & TYPE_FLT))
+#define IS_FLT_DBL_TYPE(a) ((a) & TYPE_FLT)
+#define IS_2_WORD_TYPE(a) ((a) & TYPE_LNG)
+
+#define IS_INT_TYPE(a) ((a) == TYPE_INT)
+#define IS_LNG_TYPE(a) ((a) == TYPE_LNG)
+#define IS_FLT_TYPE(a) ((a) == TYPE_FLT)
+#define IS_DBL_TYPE(a) ((a) == TYPE_DBL)
+#define IS_ADR_TYPE(a) ((a) == TYPE_ADR)
+
+#define IS_VOID_TYPE(a) ((a) == TYPE_VOID)
+
+
/* primitive data types *******************************************************/
/* These values are used in parsed descriptors and in some other
used as indices into the primitive type table. */
#define PRIMITIVETYPE_INT TYPE_INT
-#define PRIMITIVETYPE_LONG TYPE_LONG
-#define PRIMITIVETYPE_FLOAT TYPE_FLOAT
-#define PRIMITIVETYPE_DOUBLE TYPE_DOUBLE
+#define PRIMITIVETYPE_LONG TYPE_LNG
+#define PRIMITIVETYPE_FLOAT TYPE_FLT
+#define PRIMITIVETYPE_DOUBLE TYPE_DBL
#define PRIMITIVETYPE_DUMMY1 TYPE_ADR /* not used! */
#define PRIMITIVETYPE_BYTE 5
#define PRIMITIVETYPE_CHAR 6
#define ACC_CLASS_REFLECT_MASK 0x0000ffff /* flags reported by reflection */
#define ACC_CLASS_HAS_POINTERS 0x00010000 /* instance contains pointers */
+/* special flags used in methodinfo *******************************************/
+
+#define ACC_METHOD_IMPLEMENTED 0x00010000 /* there is an implementation */
+#define ACC_METHOD_MONOMORPHIC 0x00020000 /* currently monomorphic method */
+
/* data structures of the runtime system **************************************/
All objects (and arrays) which resides on the heap need the
following header at the beginning of the data structure.
+ TODO: Include detailed description from the Wiki (ObjectHeader) here.
+
*******************************************************************************/
-struct java_objectheader { /* header for all objects */
- struct _vftbl *vftbl; /* pointer to virtual function table */
+#define HDRFLAG_FLC 0x01
+
+struct java_objectheader { /* header for all objects */
+ struct _vftbl *vftbl; /* pointer to virtual function table */
#if defined(ENABLE_THREADS)
struct lock_record_t *monitorPtr;
- ptrint flcword; /* word containing the FLC bit */
+#endif
+#if defined(ENABLE_THREADS) || defined(ENABLE_GC_CACAO)
+ ptrint hdrflags; /* word containing the FLC and GC bits */
#endif
};
void compiler_unlock();
#endif
+
+/* global constants related to the verifier ***********************************/
+
+/* The verifier needs additional variables in the variable array. Since these */
+/* must be reserved and set by parse.c and stack.c, we define these numbers */
+/* here to avoid mysterious hard-coded constants. */
+/* stack.c needs an extra variable if the verifier is disabled. */
+
+#if defined(ENABLE_VERIFIER)
+# define VERIFIER_EXTRA_LOCALS 1
+# define VERIFIER_EXTRA_VARS 1
+# define STACK_EXTRA_VARS 0
+#else
+# define VERIFIER_EXTRA_LOCALS 0
+# define VERIFIER_EXTRA_VARS 0
+# define STACK_EXTRA_VARS 1
+#endif
+
#endif /* _GLOBAL_H */