Merged r5476 from trunk:
[cacao.git] / src / vm / global.h
index 4bd72b1695c1d9aa599fea79f7472239e672595d..dd52df35d675a6cf9c2627a5f8d0708d3c03419a 100644 (file)
@@ -33,7 +33,7 @@
             Joseph Wenninger
             Christian Thalinger
 
-   $Id: global.h 4529 2006-02-20 23:35:08Z twisti $
+   $Id: global.h 5493 2006-09-14 18:36:20Z edwin $
 
 */
 
@@ -42,7 +42,7 @@
 #define _GLOBAL_H
 
 #include "config.h"
-#include "types.h"
+#include "vm/types.h"
 
 
 /* additional data types ******************************************************/
@@ -51,12 +51,21 @@ typedef void *voidptr;                  /* generic pointer                    */
 typedef void (*functionptr) (void);     /* generic function pointer           */
 typedef u1* methodptr;
 
-typedef int   bool;                     /* boolean data type                  */
+typedef unsigned int bool;              /* boolean data type                  */
 
-#define true  1
-#define false 0
+#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 */
+struct imm {
+       s4 i;
+       s4 op1_t;
+};
+#endif
+
 /* immediate data union */
 
 typedef union {
@@ -67,6 +76,9 @@ typedef union {
        void       *a;
        functionptr fp;
        u1          b[8];
+#if defined(ENABLE_SSA)
+       struct imm  _i;
+#endif
 } imm_union;
 
 
@@ -78,64 +90,57 @@ typedef struct java_objectarray java_objectarray;
 
 /* define some CACAO paths ****************************************************/
 
-#if defined(ENABLE_ZLIB)
-# define CACAO_VM_ZIP_PATH          CACAO_PREFIX "/share/cacao/" VM_ZIP_STRING
-#else
-# define CACAO_VM_ZIP_PATH          CACAO_PREFIX "/share/cacao/"
-#endif
-
-#define CLASSPATH_GLIBJ_ZIP_PATH    CLASSPATH_PREFIX "/share/classpath/" GLIBJ_ZIP_STRING
 #define CLASSPATH_LIBRARY_PATH      CLASSPATH_LIBDIR "/classpath"
 
 
-/*
- * ENABLE_VERIFIER activates bytecode verification and other checks
- */
-#define ENABLE_VERIFIER
+#define MAX_ALIGN 8             /* most generic alignment for JavaVM values   */
 
-/*
- * TYPECHECK_STACK_COMPCAT activates full checking of computational
- * categories for stack manipulations (POP,POP2,SWAP,DUP,DUP2,DUP_X1,
- * DUP2_X1,DUP_X2,DUP2_X2).
- */
-#define TYPECHECK_STACK_COMPCAT
 
-/* if we have threads disabled this one is not defined ************************/
+/* basic data types ***********************************************************/
 
-#if !defined(USE_THREADS)
-#define THREADSPECIFIC
-#endif
+/* 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 MAX_ALIGN 8             /* most generic alignment for JavaVM values   */
+#define TYPE_RET     8   /* must not share bits with TYPE_FLT or TYPE_LNG */
+
+#define TYPE_VOID    10
 
 
-/* basic data types ***********************************************************/
+#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)
 
-/* 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 */
+#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)
 
-#define TYPE_VOID    10
 
 /* primitive data types *******************************************************/
 
-/* These values are used in parsed descriptors and in some other places       */
-/* were the different types handled internally as TYPE_INT have to be         */
-/* distinguished.                                                             */
+/* These values are used in parsed descriptors and in some other
+   places were the different types handled internally as TYPE_INT have
+   to be distinguished. */
 
 #define PRIMITIVETYPE_COUNT  11  /* number of primitive types (+ dummies)     */
 
 /* CAUTION: Don't change the numerical values! These constants are
- * used as indices into the primitive type table.
- */
+   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
@@ -197,16 +202,12 @@ typedef struct java_objectarray java_objectarray;
 #define ACC_SYNTHETIC       0x1000
 #define ACC_ANNOTATION      0x2000
 #define ACC_ENUM            0x4000
+#define ACC_MIRANDA         0x8000
 
+/* special flags used in classinfo ********************************************/
 
-/* data structure for calls from c code to java methods */
-
-struct jni_callblock {
-       u8 itemtype;
-       u8 item;
-};
-
-typedef struct jni_callblock jni_callblock;
+#define ACC_CLASS_REFLECT_MASK 0x0000ffff     /* flags reported by reflection */
+#define ACC_CLASS_HAS_POINTERS 0x00010000     /* instance contains pointers   */
 
 
 /* data structures of the runtime system **************************************/
@@ -219,9 +220,10 @@ typedef struct jni_callblock jni_callblock;
 *******************************************************************************/
 
 struct java_objectheader {              /* header for all objects             */
-       struct _vftbl *vftbl;               /* pointer to virtual function table  */
-#if defined(USE_THREADS) && defined(NATIVE_THREADS)
-       void          *monitorPtr;
+       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
 };
 
@@ -309,41 +311,26 @@ struct java_objectarray {
 };
 
 
-#define VFTBLINTERFACETABLE(v,i)       (v)->interfacetable[-i]
-
-
-/* flag variables *************************************************************/
-
-extern bool cacao_initializing;
-
-
 /* Synchronization ************************************************************/
 
-#if defined(USE_THREADS) && defined(NATIVE_THREADS)
-void cast_lock();
-void cast_unlock();
+#if defined(ENABLE_THREADS)
 void compiler_lock();
 void compiler_unlock();
 #endif
 
 
-/**** Methods: called directly by cacao, which defines the callpath ***/
-#define MAINCLASS mainstring
-#define MAINMETH "main"
-#define MAINDESC "([Ljava/lang/String;)V"
+/* global constants related to the verifier ***********************************/
 
-#define EXITCLASS "java/lang/System"
-#define EXITMETH  "exit"
-#define EXITDESC  "(I)V"
+/* 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.                             */
 
-#if defined(USE_THREADS)
- #define THREADCLASS "java/lang/Thread"
- #define THREADMETH  "<init>"
- #define THREADDESC  "(Ljava/lang/VMThread;Ljava/lang/String;IZ)V"
-
- #define THREADGROUPCLASS "java/lang/ThreadGroup"
- #define THREADGROUPMETH  "addThread"
- #define THREADGROUPDESC  "(Ljava/lang/Thread;)V"
+#if defined(ENABLE_VERIFIER)
+#    define VERIFIER_EXTRA_LOCALS  1
+#    define VERIFIER_EXTRA_VARS    1
+#else
+#    define VERIFIER_EXTRA_LOCALS  0
+#    define VERIFIER_EXTRA_VARS    0
 #endif
 
 #endif /* _GLOBAL_H */
@@ -360,4 +347,5 @@ void compiler_unlock();
  * c-basic-offset: 4
  * tab-width: 4
  * End:
+ * vim:noexpandtab:sw=4:ts=4:
  */