2006-01-03 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / mini / mini.h
index 4db141cdc38bf256eae3904e72cb6d9e758e0ef0..c61cf21b82339a61a03a66ffa32e529bbb1da42e 100644 (file)
@@ -84,6 +84,11 @@ enum {
                (dest)->inst.opcode = (op);     \
        } while (0)
 
+#define MONO_INST_NEW_CALL_ARG(cfg,dest,op) do {       \
+               (dest) = mono_mempool_alloc0 ((cfg)->mempool, sizeof (MonoCallArgParm));        \
+               (dest)->ins.opcode = (op);      \
+       } while (0)
+
 #define MONO_ADD_INS(b,inst) do {      \
                if ((b)->last_ins) {    \
                        (b)->last_ins->next = (inst);   \
@@ -95,6 +100,7 @@ enum {
 
 typedef struct MonoInst MonoInst;
 typedef struct MonoCallInst MonoCallInst;
+typedef struct MonoCallArgParm MonoCallArgParm;
 typedef struct MonoEdge MonoEdge;
 typedef struct MonoMethodVar MonoMethodVar;
 typedef struct MonoBasicBlock MonoBasicBlock;
@@ -285,6 +291,13 @@ struct MonoCallInst {
 #endif
 };
 
+struct MonoCallArgParm {
+       MonoInst ins;
+       gint32 size;
+       gint32 offset;
+       gint32 offPrm;
+};
+
 /* 
  * flags for MonoInst
  * Note: some of the values overlap, because they can't appear
@@ -498,7 +511,8 @@ enum {
        MONO_OPT_PRECOMP  = 1 << 17,
        MONO_OPT_ABCREM   = 1 << 18,
        MONO_OPT_SSAPRE   = 1 << 19,
-       MONO_OPT_EXCEPTION= 1 << 20
+       MONO_OPT_EXCEPTION= 1 << 20,
+       MONO_OPT_SSA      = 1 << 21
 };
 
 /* Bit-fields in the MonoBasicBlock.region */
@@ -544,6 +558,8 @@ typedef struct {
        MonoMethod      *inlined_method; /* the method which is currently inlined */
        MonoInst        *domainvar; /* a cache for the current domain */
        MonoInst        *got_var; /* Global Offset Table variable */
+       
+       struct MonoAliasingInformation *aliasing_info;
 
        /* A hashtable of region ID-> SP var mappings */
        /* An SP var is a place to store the stack pointer (used by handlers)*/
@@ -634,11 +650,15 @@ extern MonoJitStats mono_jit_stats;
 
 /* values for MonoInst.ssa_op */
 enum {
-       MONO_SSA_NOP,
-       MONO_SSA_LOAD,
-       MONO_SSA_STORE,
-       MONO_SSA_MAYBE_LOAD,
-       MONO_SSA_MAYBE_STORE
+       MONO_SSA_NOP = 0,
+       MONO_SSA_ADDRESS_TAKEN = 1,
+       MONO_SSA_LOAD = 2,
+       MONO_SSA_STORE = 4,
+       MONO_SSA_LOAD_STORE = MONO_SSA_LOAD|MONO_SSA_STORE,
+       MONO_SSA_INDIRECT_LOAD = MONO_SSA_LOAD|MONO_SSA_ADDRESS_TAKEN,
+       MONO_SSA_INDIRECT_STORE = MONO_SSA_STORE|MONO_SSA_ADDRESS_TAKEN,
+       MONO_SSA_INDIRECT_LOAD_STORE =
+       MONO_SSA_LOAD|MONO_SSA_STORE|MONO_SSA_ADDRESS_TAKEN
 };
 
 #define OP_CEQ    (256+CEE_CEQ)
@@ -734,7 +754,6 @@ typedef struct {
 typedef struct {
        gboolean handle_sigint;
        gboolean keep_delegates;
-       gboolean abort_on_sigsegv;
        gboolean collect_pagefault_stats;
 } MonoDebugOptions;
 
@@ -785,6 +804,7 @@ void      mono_print_tree                   (MonoInst *tree);
 void      mono_print_tree_nl                (MonoInst *tree);
 void      mono_print_code                   (MonoCompile *cfg);
 void      mono_print_method_from_ip         (void *ip);
+char     *mono_pmip                         (void *ip);
 void      mono_select_instructions          (MonoCompile *cfg);
 const char* mono_inst_name                  (int op);
 void      mono_inst_foreach                 (MonoInst *tree, MonoInstFunc func, gpointer data);
@@ -933,7 +953,8 @@ gpointer mono_arch_create_specific_trampoline   (gpointer arg1, MonoTrampolineTy
 /* Exception handling */
 gboolean mono_handle_exception                  (MonoContext *ctx, gpointer obj,
                                                 gpointer original_ip, gboolean test_only);
-void      mono_jit_walk_stack                   (MonoStackWalk func, gboolean do_il_offset, gpointer user_data);
+void     mono_handle_native_sigsegv             (void *sigctx);
+void     mono_jit_walk_stack                    (MonoStackWalk func, gboolean do_il_offset, gpointer user_data);
 void     mono_setup_altstack                    (MonoJitTlsData *tls);
 void     mono_free_altstack                     (MonoJitTlsData *tls);
 
@@ -971,7 +992,7 @@ void      mono_debug_add_aot_method             (MonoDomain *domain,
                                                                                                MonoMethod *method, guint8 *code_start, 
                                                                                                guint8 *debug_info, guint32 debug_info_len);
 void      mono_debug_add_icall_wrapper          (MonoMethod *method, MonoJitICallInfo* info);
-
+void      mono_debugger_run_finally             (MonoContext *start_ctx);
 
 /* Tracing */
 MonoTraceSpec *mono_trace_parse_options         (char *options);