* src/vm/jit/alpha/emit.c [ENABLE_THREADS] (threads/native/lock.h):
[cacao.git] / src / vm / jit / jit.h
index 9449b95fa710ba6c28549760de18b07a5c451e15..7bc76e02e63dce97d5c7e12771e0274db9034a3f 100644 (file)
@@ -30,7 +30,7 @@
    Changes: Christian Thalinger
                        Edwin Steiner
 
-   $Id: jit.h 5210 2006-08-07 11:10:01Z twisti $
+   $Id: jit.h 5262 2006-08-22 19:53:56Z twisti $
 
 */
 
@@ -70,10 +70,15 @@ typedef struct insinfo_inline insinfo_inline;
 #if defined(ENABLE_LOOP)
 # include "vm/jit/loop/loop.h"
 #endif
+#if defined(ENABLE_SSA) 
+# include "vm/jit/optimizing/lsra.h"
+#endif
+#if defined(ENABLE_LSRA)
+# include "vm/jit/allocator/lsra.h"
+#endif
 
 #include "vm/jit/verify/typeinfo.h"
 
-
 /* common jit/codegen macros **************************************************/
 
 #if defined(ENABLE_STATISTICS)
@@ -95,9 +100,13 @@ struct jitdata {
 #if defined(ENABLE_LOOP)
        loopdata        *ld;
 #endif
+#if defined(ENABLE_SSA) || defined(ENABLE_LSRA)
+       lsradata     *ls;
+#endif
 
        u4               flags;             /* contains JIT compiler flags        */
        bool             isleafmethod;      /* does method call subroutines       */
+       s4               stackframesize;    /* size of the current stackframe     */
 
        new_instruction *new_instructions;
        basicblock      *new_basicblocks;
@@ -337,6 +346,15 @@ struct instruction {
 #define INSTRUCTION_IS_UNRESOLVED(iptr) \
        ((ptrint)(iptr)->target & 0x01) /* XXX target used temporarily as flag */
 
+#define NEW_INSTRUCTION_IS_RESOLVED(iptr) \
+       (!((iptr)->flags.bits & INS_FLAG_UNRESOLVED))
+
+#define NEW_INSTRUCTION_IS_UNRESOLVED(iptr) \
+       ((iptr)->flags.bits & INS_FLAG_UNRESOLVED)
+
+#define NEW_INSTRUCTION_MUST_CHECK(iptr) \
+       (!((iptr)->flags.bits & INS_FLAG_NOCHECK))
+
 #define NEW_INSTRUCTION_GET_FIELDREF(iptr,fref) \
        do { \
                if (iptr->flags.bits & INS_FLAG_UNRESOLVED) \
@@ -477,7 +495,7 @@ struct insinfo_inline {
 /* the others by using bitfields.                                             */
 
 struct basicblock {
-       s4            debug_nr;     /* basic block number                         */
+       s4            nr;           /* basic block number                         */
        s4            flags;        /* used during stack analysis, init with -1   */
        s4            bitflags;     /* OR of BBFLAG_... constants, init with 0    */
        s4            type;         /* basic block type (std, xhandler, subroutine*/
@@ -509,13 +527,13 @@ struct basicblock {
 /* Macro for initializing newly allocated basic block's. It does not
    need to zero fields, as we zero out the whole basic block array. */
 
-#define BASICBLOCK_INIT(bptr,m)                            \
-       do {                                                   \
-               bptr->mpc        = -1;                             \
-               bptr->flags      = -1;                             \
-               bptr->type       = BBTYPE_STD;                     \
-               bptr->method     = (m);                            \
-               bptr->debug_nr   = (m)->c_debug_nr++;              \
+#define BASICBLOCK_INIT(bptr,m)                        \
+       do {                                               \
+               bptr->mpc    = -1;                             \
+               bptr->flags  = -1;                             \
+               bptr->type   = BBTYPE_STD;                     \
+               bptr->method = (m);                            \
+               bptr->nr     = (m)->c_debug_nr++;              \
        } while (0)
                        
 
@@ -1201,7 +1219,14 @@ extern int jcommandsize[256];
 /***************************** register info block ****************************/
 
 extern int stackreq[256];
-
+/* extern int op_needs_saved[256];  */
+/* extern int op_is_pei[256];       */
+#define NEEDS_SAVED  0
+#define PEI          1
+#define OP_DATA_SIZE 2
+extern int op_data[256][OP_DATA_SIZE]; 
+/* [0..255][NEEDS_SAVED] ... if ICMD needs a SAVEDVAR         */
+/* [0..255][PEI]         ... if ICMD could throw an exception */
 
 /* function prototypes ********************************************************/