Mon Jul 30 17:29:56 CEST 2007 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / mini / mini.h
index b8608717298723c23dc2ca8dfe33bfd0a82e1c8b..1fc3c4786867136927bee83a6906b20fb919767b 100644 (file)
@@ -50,7 +50,7 @@
 #endif
 
 /* Version number of the AOT file format */
-#define MONO_AOT_FILE_VERSION "29"
+#define MONO_AOT_FILE_VERSION "32"
 
 #if 0
 #define mono_bitset_foreach_bit(set,b,n) \
@@ -105,6 +105,12 @@ enum {
                }       \
        } while (0)
 
+#define NULLIFY_INS(ins) do { \
+        (ins)->opcode = OP_NOP; \
+        (ins)->dreg = (ins)->sreg1 = (ins)->sreg2 = -1; \
+               (ins)->ssa_op = MONO_SSA_NOP; \
+    } while (0)
+
 typedef struct MonoInst MonoInst;
 typedef struct MonoCallInst MonoCallInst;
 typedef struct MonoCallArgParm MonoCallArgParm;
@@ -124,7 +130,15 @@ extern int mono_exc_esp_offset;
 #else
 extern gboolean mono_compile_aot;
 #endif
-extern gboolean mono_use_security_manager;
+
+typedef enum {
+       MONO_SECURITY_MODE_NONE,
+       MONO_SECURITY_MODE_CORE_CLR,
+       MONO_SECURITY_MODE_CAS,
+       MONO_SECURITY_MODE_SMCS_HACK
+} MonoSecurityMode;
+
+extern MonoSecurityMode mono_security_mode;
 
 struct MonoEdge {
        MonoEdge *next;
@@ -133,9 +147,6 @@ struct MonoEdge {
 };
 
 struct MonoSpillInfo {
-#ifndef MONO_ARCH_HAS_XP_REGALLOC
-       MonoSpillInfo *next;
-#endif
        int offset;
 };
 
@@ -204,7 +215,7 @@ struct MonoBasicBlock {
        MonoBitSet *dominators;
        MonoBitSet *dfrontier;
        MonoBasicBlock *idom;
-       GList *dominated;
+       GSList *dominated;
        /* fast dominator algorithm */
        MonoBasicBlock *df_parent, *ancestor, *child, *label;
        MonoEdge *bucket;
@@ -254,7 +265,7 @@ struct MonoBasicBlock {
         guint region;
 
        /* The current symbolic register number, used in local register allocation. */
-       guint32 max_ireg, max_freg;
+       guint32 max_vreg;
 };
 
 /* BBlock flags */
@@ -281,6 +292,7 @@ struct MonoInst {
                        MonoType *vtype;
                        MonoClass *klass;
                        int *phi_args;
+                       MonoCallInst *call_inst;
                } op [2];
                gint64 i8const;
                double r8const;
@@ -291,7 +303,16 @@ struct MonoInst {
        guint8  flags  : 5;
        
        /* used by the register allocator */
-       gint32 dreg, sreg1, sreg2, unused;
+       gint32 dreg, sreg1, sreg2;
+       /* used mostly by the backend to store additional info it may need */
+       union {
+               gint32 reg3;
+               gint32 arg_info;
+               gint32 size; /* in OP_MEMSET and OP_MEMCPY */
+               gint shift_amount;
+               gboolean is_pinvoke; /* for variables in the unmanaged marshal format */
+               gpointer data;
+       } backend;
        
        MonoInst *next;
        MonoClass *klass;
@@ -309,10 +330,8 @@ struct MonoCallInst {
        gboolean virtual;
        regmask_t used_iregs;
        regmask_t used_fregs;
-#if defined(MONO_ARCH_HAS_XP_LOCAL_REGALLOC)
        GSList *out_ireg_args;
        GSList *out_freg_args;
-#endif
 };
 
 struct MonoCallArgParm {
@@ -371,6 +390,7 @@ enum {
 #define inst_destbasereg dreg
 #define inst_offset data.op[0].const_val
 #define inst_imm    data.op[1].const_val
+#define inst_call   data.op[1].call_inst
 
 #define inst_phi_args   data.op[1].phi_args
 
@@ -379,12 +399,14 @@ enum {
        MONO_INST_DEST,
        MONO_INST_SRC1,
        MONO_INST_SRC2,
-       MONO_INST_FLAGS,
+       MONO_INST_LEN,
        MONO_INST_CLOB,
+       /* Unused, commented out to reduce the size of the mdesc tables
+       MONO_INST_FLAGS,
        MONO_INST_COST,
        MONO_INST_DELAY,
        MONO_INST_RES,
-       MONO_INST_LEN,
+       */
        MONO_INST_MAX
 };
 
@@ -420,7 +442,9 @@ struct MonoMethodVar {
 typedef struct {
        gpointer          end_of_stack;
        guint32           stack_size;
+#if !defined(HAVE_KW_THREAD) || !defined(MONO_ARCH_ENABLE_MONO_LMF_VAR)
        MonoLMF          *lmf;
+#endif
        MonoLMF          *first_lmf;
        gpointer         signal_stack;
        guint32          signal_stack_size;
@@ -428,37 +452,10 @@ typedef struct {
 } MonoJitTlsData;
 
 typedef enum {
-       MONO_PATCH_INFO_BB,
-       MONO_PATCH_INFO_ABS,
-       MONO_PATCH_INFO_LABEL,
-       MONO_PATCH_INFO_METHOD,
-       MONO_PATCH_INFO_METHOD_JUMP,
-       MONO_PATCH_INFO_METHOD_REL,
-       MONO_PATCH_INFO_METHODCONST,
-       MONO_PATCH_INFO_INTERNAL_METHOD,
-       MONO_PATCH_INFO_SWITCH,
-       MONO_PATCH_INFO_EXC,
-       MONO_PATCH_INFO_EXC_NAME,
-       MONO_PATCH_INFO_CLASS,
-       MONO_PATCH_INFO_IMAGE,
-       MONO_PATCH_INFO_FIELD,
-       MONO_PATCH_INFO_VTABLE,
-       MONO_PATCH_INFO_CLASS_INIT,
-       MONO_PATCH_INFO_SFLDA,
-       MONO_PATCH_INFO_LDSTR,
-       MONO_PATCH_INFO_LDTOKEN,
-       MONO_PATCH_INFO_TYPE_FROM_HANDLE,
-       MONO_PATCH_INFO_R4,
-       MONO_PATCH_INFO_R8,
-       MONO_PATCH_INFO_IP,
-       MONO_PATCH_INFO_IID,
-       MONO_PATCH_INFO_ADJUSTED_IID,
-       MONO_PATCH_INFO_BB_OVF,
-       MONO_PATCH_INFO_EXC_OVF,
-       MONO_PATCH_INFO_WRAPPER,
-       MONO_PATCH_INFO_GOT_OFFSET,
-       MONO_PATCH_INFO_DECLSEC,
-       MONO_PATCH_INFO_NONE
+#define PATCH_INFO(a,b) MONO_PATCH_INFO_ ## a,
+#include "patch-info.h"
+#undef PATCH_INFO
+       MONO_PATCH_INFO_NUM
 } MonoJumpInfoType;
 
 /*
@@ -516,31 +513,11 @@ typedef enum {
        MONO_TRAMPOLINE_NUM
 } MonoTrampolineType;
 
-/* optimization flags: keep up to date with the name array in driver.c */
+/* optimization flags */
+#define OPTFLAG(id,shift,name,descr) MONO_OPT_ ## id = 1 << shift,
 enum {
-       MONO_OPT_PEEPHOLE = 1 << 0,
-       MONO_OPT_BRANCH   = 1 << 1,
-       MONO_OPT_INLINE   = 1 << 2,
-       MONO_OPT_CFOLD    = 1 << 3,
-       MONO_OPT_CONSPROP = 1 << 4,
-       MONO_OPT_COPYPROP = 1 << 5,
-       MONO_OPT_DEADCE   = 1 << 6,
-       MONO_OPT_LINEARS  = 1 << 7,
-       MONO_OPT_CMOV     = 1 << 8,
-       MONO_OPT_SHARED   = 1 << 9,
-       MONO_OPT_SCHED    = 1 << 10,
-       MONO_OPT_INTRINS  = 1 << 11,
-       MONO_OPT_TAILC    = 1 << 12,
-       MONO_OPT_LOOP     = 1 << 13,
-       MONO_OPT_FCMOV    = 1 << 14,
-       MONO_OPT_LEAF     = 1 << 15,
-       MONO_OPT_AOT      = 1 << 16,
-       MONO_OPT_PRECOMP  = 1 << 17,
-       MONO_OPT_ABCREM   = 1 << 18,
-       MONO_OPT_SSAPRE   = 1 << 19,
-       MONO_OPT_EXCEPTION= 1 << 20,
-       MONO_OPT_SSA      = 1 << 21,
-       MONO_OPT_TREEPROP = 1 << 22
+#include "optflags-def.h"
+       MONO_OPT_LAST
 };
 
 /* Bit-fields in the MonoBasicBlock.region */
@@ -565,7 +542,7 @@ typedef struct {
        MonoBasicBlock  *bb_exit;
        MonoBasicBlock  *bb_init;
        MonoBasicBlock **bblocks;
-       GHashTable      *bb_hash;
+       MonoBasicBlock **cil_offset_to_bb;
        MonoMemPool     *state_pool; /* used by instruction selection */
        MonoBasicBlock  *cbb;        /* used by instruction selection */
        MonoInst        *prev_ins;   /* in decompose */
@@ -578,6 +555,7 @@ typedef struct {
        guint            varinfo_count; /* total storage in varinfo */
        gint             stack_offset;
        gint             max_ireg;
+       gint             cil_offset_to_bb_len;
        MonoRegState    *rs;
        MonoSpillInfo   *spill_info; /* machine register spills */
        MonoSpillInfo   *spill_info_float; /* fp register spills */
@@ -587,6 +565,7 @@ 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 */
+       MonoInst        **args;
        
        struct MonoAliasingInformation *aliasing_info;
 
@@ -602,6 +581,7 @@ typedef struct {
        
        MonoDomain      *domain;
 
+       unsigned char   *cil_start;
        unsigned char   *native_code;
        guint            code_size;
        guint            code_len;
@@ -631,10 +611,12 @@ typedef struct {
        guint32          lmf_offset;
        guint16          *intvars;
        MonoProfileCoverageInfo *coverage_info;
+       GHashTable       *token_info_hash;
        MonoCompileArch  arch;
        guint32          exception_type;        /* MONO_EXCEPTION_* */
        guint32          exception_data;
        char*            exception_message;
+       gpointer         exception_ptr;
 
        /* Fields used by the local reg allocator */
        void*            reginfo;
@@ -671,12 +653,14 @@ typedef struct {
        gulong inlined_methods;
        gulong basic_blocks;
        gulong max_basic_blocks;
+       gulong locals_stack_size;
        gulong cas_declsec_check;
        gulong cas_linkdemand_icall;
        gulong cas_linkdemand_pinvoke;
        gulong cas_linkdemand_aptc;
        gulong cas_linkdemand;
        gulong cas_demand_generation;
+       gulong generic_virtual_invocations;
        MonoMethod *max_ratio_method;
        MonoMethod *biggest_method;
        gboolean enabled;
@@ -710,7 +694,7 @@ enum {
 #endif
 #define MINI_OP(a,b) a,
 enum {
-       OP_START = MONO_CEE_LAST,
+       OP_START = MONO_CEE_LAST - 1,
 #include "mini-ops.h"
        OP_LAST
 };
@@ -767,6 +751,12 @@ extern const guint8 mono_burg_arity [];
 extern guint8 mono_burg_arity [];
 #endif
 
+extern const char MONO_ARCH_CPU_SPEC [] MONO_INTERNAL;
+#define MONO_ARCH_CPU_SPEC_IDX_COMBINE(a) a ## _idx
+#define MONO_ARCH_CPU_SPEC_IDX(a) MONO_ARCH_CPU_SPEC_IDX_COMBINE(a)
+extern const guint16 MONO_ARCH_CPU_SPEC_IDX(MONO_ARCH_CPU_SPEC) [] MONO_INTERNAL;
+#define ins_get_spec(op) ((const char*)&MONO_ARCH_CPU_SPEC + MONO_ARCH_CPU_SPEC_IDX(MONO_ARCH_CPU_SPEC)[(op)])
+
 enum {
        MONO_COMP_DOM = 1,
        MONO_COMP_IDOM = 2,
@@ -806,6 +796,25 @@ enum {
        BRANCH_UNDEF
 };
 
+typedef enum {
+       CMP_EQ,
+       CMP_NE,
+       CMP_LE,
+       CMP_GE,
+       CMP_LT,
+       CMP_GT,
+       CMP_LE_UN,
+       CMP_GE_UN,
+       CMP_LT_UN,
+       CMP_GT_UN
+} CompRelation;
+
+typedef enum {
+       CMP_TYPE_L,
+       CMP_TYPE_I,
+       CMP_TYPE_F
+} CompType;
+
 /* Implicit exceptions */
 enum {
        MONO_EXC_INDEX_OUT_OF_RANGE,
@@ -823,149 +832,157 @@ typedef void (*MonoInstFunc) (MonoInst *tree, gpointer data);
 /* main function */
 int         mono_main                      (int argc, char* argv[]);
 void        mono_set_defaults              (int verbose_level, guint32 opts);
-MonoDomain* mini_init                      (const char *filename);
-void        mini_cleanup                   (MonoDomain *domain);
+MonoDomain* mini_init                      (const char *filename, const char *runtime_version) MONO_INTERNAL;
+void        mini_cleanup                   (MonoDomain *domain) MONO_INTERNAL;
 
 /* helper methods */
-MonoJumpInfoToken * mono_jump_info_token_new (MonoMemPool *mp, MonoImage *image, guint32 token);
-MonoInst* mono_find_spvar_for_region        (MonoCompile *cfg, int region);
-void      mono_precompile_assemblies        (void);
+MonoJumpInfoToken * mono_jump_info_token_new (MonoMemPool *mp, MonoImage *image, guint32 token) MONO_INTERNAL;
+MonoInst* mono_find_spvar_for_region        (MonoCompile *cfg, int region) MONO_INTERNAL;
+void      mono_precompile_assemblies        (void) MONO_INTERNAL;
 int       mono_parse_default_optimizations  (const char* p);
-void      mono_bblock_add_inst              (MonoBasicBlock *bb, MonoInst *inst);
-void      mono_constant_fold                (MonoCompile *cfg);
-void      mono_constant_fold_inst           (MonoInst *inst, gpointer data);
-int       mono_eval_cond_branch             (MonoInst *branch);
-int       mono_is_power_of_two              (guint32 val);
-void      mono_cprop_local                  (MonoCompile *cfg, MonoBasicBlock *bb, MonoInst **acp, int acp_size);
-MonoInst* mono_compile_create_var           (MonoCompile *cfg, MonoType *type, int opcode);
-void      mono_compile_make_var_load        (MonoCompile *cfg, MonoInst *dest, gssize var_index);
-MonoInst* mono_compile_create_var_load      (MonoCompile *cfg, gssize var_index);
-MonoInst* mono_compile_create_var_store     (MonoCompile *cfg, gssize var_index, MonoInst *value);
-MonoType* mono_type_from_stack_type         (MonoInst *ins);
-void      mono_blockset_print               (MonoCompile *cfg, MonoBitSet *set, const char *name, guint idom);
-void      mono_print_tree                   (MonoInst *tree);
-void      mono_print_tree_nl                (MonoInst *tree);
-void      mono_print_code                   (MonoCompile *cfg);
+void      mono_bblock_add_inst              (MonoBasicBlock *bb, MonoInst *inst) MONO_INTERNAL;
+void      mono_constant_fold                (MonoCompile *cfg) MONO_INTERNAL;
+void      mono_constant_fold_inst           (MonoInst *inst, gpointer data) MONO_INTERNAL;
+int       mono_eval_cond_branch             (MonoInst *branch) MONO_INTERNAL;
+int       mono_is_power_of_two              (guint32 val) MONO_INTERNAL;
+void      mono_cprop_local                  (MonoCompile *cfg, MonoBasicBlock *bb, MonoInst **acp, int acp_size) MONO_INTERNAL;
+MonoInst* mono_compile_create_var           (MonoCompile *cfg, MonoType *type, int opcode) MONO_INTERNAL;
+void      mono_compile_make_var_load        (MonoCompile *cfg, MonoInst *dest, gssize var_index) MONO_INTERNAL;
+MonoInst* mono_compile_create_var_load      (MonoCompile *cfg, gssize var_index) MONO_INTERNAL;
+MonoInst* mono_compile_create_var_store     (MonoCompile *cfg, gssize var_index, MonoInst *value) MONO_INTERNAL;
+MonoType* mono_type_from_stack_type         (MonoInst *ins) MONO_INTERNAL;
+void      mono_blockset_print               (MonoCompile *cfg, MonoBitSet *set, const char *name, guint idom) MONO_INTERNAL;
+void      mono_print_tree                   (MonoInst *tree) MONO_INTERNAL;
+void      mono_print_tree_nl                (MonoInst *tree) MONO_INTERNAL;
+void      mono_print_code                   (MonoCompile *cfg) MONO_INTERNAL;
 void      mono_print_method_from_ip         (void *ip);
 char     *mono_pmip                         (void *ip);
-void      mono_select_instructions          (MonoCompile *cfg);
+void      mono_select_instructions          (MonoCompile *cfg) MONO_INTERNAL;
 const char* mono_inst_name                  (int op);
-void      mono_inst_foreach                 (MonoInst *tree, MonoInstFunc func, gpointer data);
-void      mono_disassemble_code             (MonoCompile *cfg, guint8 *code, int size, char *id);
-void      mono_add_patch_info               (MonoCompile *cfg, int ip, MonoJumpInfoType type, gconstpointer target);
-void      mono_remove_patch_info            (MonoCompile *cfg, int ip);
-MonoJumpInfo* mono_patch_info_dup_mp        (MonoMemPool *mp, MonoJumpInfo *patch_info);
-guint     mono_patch_info_hash (gconstpointer data);
-gint      mono_patch_info_equal (gconstpointer ka, gconstpointer kb);
-gpointer  mono_resolve_patch_target         (MonoMethod *method, MonoDomain *domain, guint8 *code, MonoJumpInfo *patch_info, gboolean run_cctors);
-MonoLMF** mono_get_lmf_addr                 (void);
+void      mono_inst_foreach                 (MonoInst *tree, MonoInstFunc func, gpointer data) MONO_INTERNAL;
+void      mono_disassemble_code             (MonoCompile *cfg, guint8 *code, int size, char *id) MONO_INTERNAL;
+void      mono_add_patch_info               (MonoCompile *cfg, int ip, MonoJumpInfoType type, gconstpointer target) MONO_INTERNAL;
+void      mono_remove_patch_info            (MonoCompile *cfg, int ip) MONO_INTERNAL;
+MonoJumpInfo* mono_patch_info_dup_mp        (MonoMemPool *mp, MonoJumpInfo *patch_info) MONO_INTERNAL;
+guint     mono_patch_info_hash (gconstpointer data) MONO_INTERNAL;
+gint      mono_patch_info_equal (gconstpointer ka, gconstpointer kb) MONO_INTERNAL;
+gpointer  mono_resolve_patch_target         (MonoMethod *method, MonoDomain *domain, guint8 *code, MonoJumpInfo *patch_info, gboolean run_cctors) MONO_INTERNAL;
+MonoLMF * mono_get_lmf                      (void) MONO_INTERNAL;
+MonoLMF** mono_get_lmf_addr                 (void) MONO_INTERNAL;
 void      mono_jit_thread_attach            (MonoDomain *domain);
-guint32   mono_get_jit_tls_key              (void);
-gint32    mono_get_lmf_tls_offset           (void);
-GList    *mono_varlist_insert_sorted        (MonoCompile *cfg, GList *list, MonoMethodVar *mv, gboolean sort_end);
-GList    *mono_varlist_sort                 (MonoCompile *cfg, GList *list, int sort_type);
-void      mono_analyze_liveness             (MonoCompile *cfg);
-void      mono_linear_scan                  (MonoCompile *cfg, GList *vars, GList *regs, regmask_t *used_mask);
-void      mono_create_jump_table            (MonoCompile *cfg, MonoInst *label, MonoBasicBlock **bbs, int num_blocks);
-int       mono_compile_assembly             (MonoAssembly *ass, guint32 opts, const char *aot_options);
-MonoCompile *mini_method_compile            (MonoMethod *method, guint32 opts, MonoDomain *domain, gboolean run_cctors, gboolean compile_aot, int parts);
-void      mono_destroy_compile              (MonoCompile *cfg);
-MonoJitICallInfo *mono_find_jit_opcode_emulation (int opcode);
-
-
-void      mono_aot_init                     (void);
-MonoJitInfo*  mono_aot_get_method           (MonoDomain *domain,
-                                                                                        MonoMethod *method);
-gpointer  mono_aot_get_method_from_token    (MonoDomain *domain, MonoImage *image, guint32 token);
-gboolean  mono_aot_is_got_entry             (guint8 *code, guint8 *addr);
-guint8*   mono_aot_get_plt_entry            (guint8 *code);
-gboolean  mono_aot_init_vtable              (MonoVTable *vtable);
-gboolean  mono_aot_get_cached_class_info    (MonoClass *klass, MonoCachedClassInfo *res);
-gboolean  mono_aot_get_class_from_name      (MonoImage *image, const char *name_space, const char *name, MonoClass **klass);
-MonoJitInfo* mono_aot_find_jit_info         (MonoDomain *domain, MonoImage *image, gpointer addr);
-void mono_aot_set_make_unreadable           (gboolean unreadable);
-gboolean mono_aot_is_pagefault              (void *ptr);
-void mono_aot_handle_pagefault              (void *ptr);
-guint32 mono_aot_get_n_pagefaults           (void);
-gpointer mono_aot_plt_resolve               (gpointer aot_module, guint32 plt_info_offset, guint8 *code);
-
-gboolean  mono_method_blittable             (MonoMethod *method);
-gboolean  mono_method_same_domain           (MonoJitInfo *caller, MonoJitInfo *callee);
-
-void      mono_register_opcode_emulation    (int opcode, const char* name, const char *sigstr, gpointer func, gboolean no_throw);
-void      mono_draw_graph                   (MonoCompile *cfg, MonoGraphOptions draw_options);
-void      mono_add_varcopy_to_end           (MonoCompile *cfg, MonoBasicBlock *bb, int src, int dest);
-void      mono_add_ins_to_end               (MonoBasicBlock *bb, MonoInst *inst);
-gpointer  mono_create_ftnptr                (MonoDomain *domain, gpointer addr);
-
-int               mono_find_method_opcode      (MonoMethod *method);
-MonoJitICallInfo *mono_find_jit_icall_by_name  (const char *name);
-MonoJitICallInfo *mono_find_jit_icall_by_addr  (gconstpointer addr);
-MonoJitICallInfo *mono_register_jit_icall      (gconstpointer func, const char *name, MonoMethodSignature *sig, gboolean is_save);
-gconstpointer     mono_icall_get_wrapper       (MonoJitICallInfo* callinfo);
-
-guint8 *          mono_get_trampoline_code (MonoTrampolineType tramp_type);
+guint32   mono_get_jit_tls_key              (void) MONO_INTERNAL;
+gint32    mono_get_lmf_tls_offset           (void) MONO_INTERNAL;
+gint32    mono_get_lmf_addr_tls_offset      (void) MONO_INTERNAL;
+GList    *mono_varlist_insert_sorted        (MonoCompile *cfg, GList *list, MonoMethodVar *mv, gboolean sort_end) MONO_INTERNAL;
+GList    *mono_varlist_sort                 (MonoCompile *cfg, GList *list, int sort_type) MONO_INTERNAL;
+void      mono_analyze_liveness             (MonoCompile *cfg) MONO_INTERNAL;
+void      mono_liveness_handle_exception_clauses (MonoCompile *cfg) MONO_INTERNAL;
+void      mono_linear_scan                  (MonoCompile *cfg, GList *vars, GList *regs, regmask_t *used_mask) MONO_INTERNAL;
+void      mono_create_jump_table            (MonoCompile *cfg, MonoInst *label, MonoBasicBlock **bbs, int num_blocks) MONO_INTERNAL;
+int       mono_compile_assembly             (MonoAssembly *ass, guint32 opts, const char *aot_options) MONO_INTERNAL;
+MonoCompile *mini_method_compile            (MonoMethod *method, guint32 opts, MonoDomain *domain, gboolean run_cctors, gboolean compile_aot, int parts) MONO_INTERNAL;
+void      mono_destroy_compile              (MonoCompile *cfg) MONO_INTERNAL;
+MonoJitICallInfo *mono_find_jit_opcode_emulation (int opcode) MONO_INTERNAL;
+void     mono_print_ins (int i, MonoInst *ins) MONO_INTERNAL;
+
+void      mono_aot_init                     (void) MONO_INTERNAL;
+gpointer  mono_aot_get_method               (MonoDomain *domain,
+                                                                                        MonoMethod *method) MONO_INTERNAL;
+gpointer  mono_aot_get_method_from_token    (MonoDomain *domain, MonoImage *image, guint32 token) MONO_INTERNAL;
+gboolean  mono_aot_is_got_entry             (guint8 *code, guint8 *addr) MONO_INTERNAL;
+guint8*   mono_aot_get_plt_entry            (guint8 *code) MONO_INTERNAL;
+gboolean  mono_aot_init_vtable              (MonoVTable *vtable) MONO_INTERNAL;
+gboolean  mono_aot_get_cached_class_info    (MonoClass *klass, MonoCachedClassInfo *res) MONO_INTERNAL;
+gboolean  mono_aot_get_class_from_name      (MonoImage *image, const char *name_space, const char *name, MonoClass **klass) MONO_INTERNAL;
+MonoJitInfo* mono_aot_find_jit_info         (MonoDomain *domain, MonoImage *image, gpointer addr) MONO_INTERNAL;
+void mono_aot_set_make_unreadable           (gboolean unreadable) MONO_INTERNAL;
+gboolean mono_aot_is_pagefault              (void *ptr) MONO_INTERNAL;
+void mono_aot_handle_pagefault              (void *ptr) MONO_INTERNAL;
+guint32 mono_aot_get_n_pagefaults           (void) MONO_INTERNAL;
+gpointer mono_aot_plt_resolve               (gpointer aot_module, guint32 plt_info_offset, guint8 *code) MONO_INTERNAL;
+
+gboolean  mono_method_blittable             (MonoMethod *method) MONO_INTERNAL;
+gboolean  mono_method_same_domain           (MonoJitInfo *caller, MonoJitInfo *callee) MONO_INTERNAL;
+
+void      mono_register_opcode_emulation    (int opcode, const char* name, const char *sigstr, gpointer func, gboolean no_throw) MONO_INTERNAL;
+void      mono_draw_graph                   (MonoCompile *cfg, MonoGraphOptions draw_options) MONO_INTERNAL;
+void      mono_add_varcopy_to_end           (MonoCompile *cfg, MonoBasicBlock *bb, int src, int dest) MONO_INTERNAL;
+void      mono_add_ins_to_end               (MonoBasicBlock *bb, MonoInst *inst) MONO_INTERNAL;
+gpointer  mono_create_ftnptr                (MonoDomain *domain, gpointer addr) MONO_INTERNAL;
+
+int               mono_find_method_opcode      (MonoMethod *method) MONO_INTERNAL;
+MonoJitICallInfo *mono_find_jit_icall_by_name  (const char *name) MONO_INTERNAL;
+MonoJitICallInfo *mono_find_jit_icall_by_addr  (gconstpointer addr) MONO_INTERNAL;
+MonoJitICallInfo *mono_register_jit_icall      (gconstpointer func, const char *name, MonoMethodSignature *sig, gboolean is_save) MONO_INTERNAL;
+gconstpointer     mono_icall_get_wrapper       (MonoJitICallInfo* callinfo) MONO_INTERNAL;
+
+guint8 *          mono_get_trampoline_code (MonoTrampolineType tramp_type) MONO_INTERNAL;
 gpointer          mono_create_jump_trampoline (MonoDomain *domain, 
                                                                                           MonoMethod *method, 
-                                                                                          gboolean add_sync_wrapper);
-gpointer          mono_create_class_init_trampoline (MonoVTable *vtable);
-gpointer          mono_create_jit_trampoline (MonoMethod *method);
-gpointer          mono_create_jit_trampoline_from_token (MonoImage *image, guint32 token);
-MonoVTable*       mono_find_class_init_trampoline_by_addr (gconstpointer addr);
-gpointer          mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp);
-gpointer          mono_delegate_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp);
+                                                                                          gboolean add_sync_wrapper) MONO_INTERNAL;
+gpointer          mono_create_class_init_trampoline (MonoVTable *vtable) MONO_INTERNAL;
+gpointer          mono_create_jit_trampoline (MonoMethod *method) MONO_INTERNAL;
+gpointer          mono_create_jit_trampoline_from_token (MonoImage *image, guint32 token) MONO_INTERNAL;
+MonoVTable*       mono_find_class_init_trampoline_by_addr (gconstpointer addr) MONO_INTERNAL;
+gpointer          mono_magic_trampoline (gssize *regs, guint8 *code, MonoMethod *m, guint8* tramp) MONO_INTERNAL;
+gpointer          mono_delegate_trampoline (gssize *regs, guint8 *code, MonoClass *klass, guint8* tramp) MONO_INTERNAL;
 gpointer          mono_aot_trampoline (gssize *regs, guint8 *code, guint8 *token_info, 
-                                                                          guint8* tramp);
+                                                                          guint8* tramp) MONO_INTERNAL;
 gpointer          mono_aot_plt_trampoline (gssize *regs, guint8 *code, guint8 *token_info, 
-                                                                                  guint8* tramp);
-void              mono_class_init_trampoline (gssize *regs, guint8 *code, MonoVTable *vtable, guint8 *tramp);
-
-gboolean          mono_running_on_valgrind (void);
-void*             mono_global_codeman_reserve (int size);
-const char       *mono_regname_full (int reg, gboolean fp);
-gint32*           mono_allocate_stack_slots_full (MonoCompile *cfg, gboolean backward, guint32 *stack_size, guint32 *stack_align);
-gint32*           mono_allocate_stack_slots (MonoCompile *cfg, guint32 *stack_size, guint32 *stack_align);
-void              mono_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb);
-MonoInst         *mono_branch_optimize_exception_target (MonoCompile *cfg, MonoBasicBlock *bb, const char * exname);             
+                                                                                  guint8* tramp) MONO_INTERNAL;
+void              mono_class_init_trampoline (gssize *regs, guint8 *code, MonoVTable *vtable, guint8 *tramp) MONO_INTERNAL;
+gpointer          mono_debugger_create_notification_function (void) MONO_INTERNAL;
+
+
+gboolean          mono_running_on_valgrind (void) MONO_INTERNAL;
+void*             mono_global_codeman_reserve (int size) MONO_INTERNAL;
+const char       *mono_regname_full (int reg, gboolean fp) MONO_INTERNAL;
+gint32*           mono_allocate_stack_slots_full (MonoCompile *cfg, gboolean backward, guint32 *stack_size, guint32 *stack_align) MONO_INTERNAL;
+gint32*           mono_allocate_stack_slots (MonoCompile *cfg, guint32 *stack_size, guint32 *stack_align) MONO_INTERNAL;
+void              mono_local_regalloc (MonoCompile *cfg, MonoBasicBlock *bb) MONO_INTERNAL;
+MonoInst         *mono_branch_optimize_exception_target (MonoCompile *cfg, MonoBasicBlock *bb, const char * exname) MONO_INTERNAL;
+gboolean          mono_is_regsize_var (MonoType *t) MONO_INTERNAL;
+CompRelation      mono_opcode_to_cond (int opcode) MONO_INTERNAL;
+CompType          mono_opcode_to_type (int opcode, int cmp_opcode) MONO_INTERNAL;
 
 /* methods that must be provided by the arch-specific port */
-void      mono_arch_cpu_init                    (void);
-guint32   mono_arch_cpu_optimizazions           (guint32 *exclude_mask);
-void      mono_arch_instrument_mem_needs        (MonoMethod *method, int *stack, int *code);
-void     *mono_arch_instrument_prolog           (MonoCompile *cfg, void *func, void *p, gboolean enable_arguments);
-void     *mono_arch_instrument_epilog           (MonoCompile *cfg, void *func, void *p, gboolean enable_arguments);
-MonoCallInst *mono_arch_call_opcode             (MonoCompile *cfg, MonoBasicBlock* bb, MonoCallInst *call, int is_virtual);
-MonoInst *mono_arch_get_inst_for_method         (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **args);
-void      mono_codegen                          (MonoCompile *cfg);
-void      mono_call_inst_add_outarg_reg         (MonoCompile *cfg, MonoCallInst *call, int vreg, int hreg, gboolean fp);
-const char *mono_arch_regname                   (int reg);
-const char *mono_arch_fregname                  (int reg);
-gpointer  mono_arch_get_throw_exception         (void);
-gpointer  mono_arch_get_rethrow_exception       (void);
-gpointer  mono_arch_get_throw_exception_by_name (void);
-gpointer  mono_arch_get_throw_corlib_exception  (void);
-guchar*   mono_arch_create_trampoline_code      (MonoTrampolineType tramp_type);
-gpointer  mono_arch_create_jit_trampoline       (MonoMethod *method);
-MonoJitInfo *mono_arch_create_jump_trampoline      (MonoMethod *method);
-gpointer  mono_arch_create_class_init_trampoline(MonoVTable *vtable);
-GList    *mono_arch_get_allocatable_int_vars    (MonoCompile *cfg);
-GList    *mono_arch_get_global_int_regs         (MonoCompile *cfg);
-guint32   mono_arch_regalloc_cost               (MonoCompile *cfg, MonoMethodVar *vmv);
-void      mono_arch_patch_code                  (MonoMethod *method, MonoDomain *domain, guint8 *code, MonoJumpInfo *ji, gboolean run_cctors);
-void      mono_arch_flush_icache                (guint8 *code, gint size);
-int       mono_arch_max_epilog_size             (MonoCompile *cfg);
-guint8   *mono_arch_emit_prolog                 (MonoCompile *cfg);
-void      mono_arch_emit_epilog                 (MonoCompile *cfg);
-void      mono_arch_emit_exceptions             (MonoCompile *cfg);
-void      mono_arch_local_regalloc              (MonoCompile *cfg, MonoBasicBlock *bb);
-void      mono_arch_output_basic_block          (MonoCompile *cfg, MonoBasicBlock *bb);
-gboolean  mono_arch_has_unwind_info             (gconstpointer addr);
-void      mono_arch_setup_jit_tls_data          (MonoJitTlsData *tls);
-void      mono_arch_free_jit_tls_data           (MonoJitTlsData *tls);
-void      mono_arch_emit_this_vret_args         (MonoCompile *cfg, MonoCallInst *inst, int this_reg, int this_type, int vt_reg);
-void      mono_arch_allocate_vars               (MonoCompile *m);
-int       mono_arch_get_argument_info           (MonoMethodSignature *csig, int param_count, MonoJitArgumentInfo *arg_info);
-gboolean  mono_arch_print_tree                 (MonoInst *tree, int arity);
+void      mono_arch_cpu_init                    (void) MONO_INTERNAL;
+guint32   mono_arch_cpu_optimizazions           (guint32 *exclude_mask) MONO_INTERNAL;
+void      mono_arch_instrument_mem_needs        (MonoMethod *method, int *stack, int *code) MONO_INTERNAL;
+void     *mono_arch_instrument_prolog           (MonoCompile *cfg, void *func, void *p, gboolean enable_arguments) MONO_INTERNAL;
+void     *mono_arch_instrument_epilog           (MonoCompile *cfg, void *func, void *p, gboolean enable_arguments) MONO_INTERNAL;
+MonoCallInst *mono_arch_call_opcode             (MonoCompile *cfg, MonoBasicBlock* bb, MonoCallInst *call, int is_virtual) MONO_INTERNAL;
+MonoInst *mono_arch_get_inst_for_method         (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **args) MONO_INTERNAL;
+void      mono_codegen                          (MonoCompile *cfg) MONO_INTERNAL;
+void      mono_call_inst_add_outarg_reg         (MonoCompile *cfg, MonoCallInst *call, int vreg, int hreg, gboolean fp) MONO_INTERNAL;
+const char *mono_arch_regname                   (int reg) MONO_INTERNAL;
+const char *mono_arch_fregname                  (int reg) MONO_INTERNAL;
+gpointer  mono_arch_get_throw_exception         (void) MONO_INTERNAL;
+gpointer  mono_arch_get_rethrow_exception       (void) MONO_INTERNAL;
+gpointer  mono_arch_get_throw_exception_by_name (void) MONO_INTERNAL;
+gpointer  mono_arch_get_throw_corlib_exception  (void) MONO_INTERNAL;
+guchar*   mono_arch_create_trampoline_code      (MonoTrampolineType tramp_type) MONO_INTERNAL;
+gpointer  mono_arch_create_jit_trampoline       (MonoMethod *method) MONO_INTERNAL;
+MonoJitInfo *mono_arch_create_jump_trampoline      (MonoMethod *method) MONO_INTERNAL;
+gpointer  mono_arch_create_class_init_trampoline(MonoVTable *vtable) MONO_INTERNAL;
+GList    *mono_arch_get_allocatable_int_vars    (MonoCompile *cfg) MONO_INTERNAL;
+GList    *mono_arch_get_global_int_regs         (MonoCompile *cfg) MONO_INTERNAL;
+guint32   mono_arch_regalloc_cost               (MonoCompile *cfg, MonoMethodVar *vmv) MONO_INTERNAL;
+void      mono_arch_patch_code                  (MonoMethod *method, MonoDomain *domain, guint8 *code, MonoJumpInfo *ji, gboolean run_cctors) MONO_INTERNAL;
+void      mono_arch_flush_icache                (guint8 *code, gint size) MONO_INTERNAL;
+int       mono_arch_max_epilog_size             (MonoCompile *cfg) MONO_INTERNAL;
+guint8   *mono_arch_emit_prolog                 (MonoCompile *cfg) MONO_INTERNAL;
+void      mono_arch_emit_epilog                 (MonoCompile *cfg) MONO_INTERNAL;
+void      mono_arch_emit_exceptions             (MonoCompile *cfg) MONO_INTERNAL;
+void      mono_arch_local_regalloc              (MonoCompile *cfg, MonoBasicBlock *bb) MONO_INTERNAL;
+void      mono_arch_output_basic_block          (MonoCompile *cfg, MonoBasicBlock *bb) MONO_INTERNAL;
+gboolean  mono_arch_has_unwind_info             (gconstpointer addr) MONO_INTERNAL;
+void      mono_arch_setup_jit_tls_data          (MonoJitTlsData *tls) MONO_INTERNAL;
+void      mono_arch_free_jit_tls_data           (MonoJitTlsData *tls) MONO_INTERNAL;
+void      mono_arch_emit_this_vret_args         (MonoCompile *cfg, MonoCallInst *inst, int this_reg, int this_type, int vt_reg) MONO_INTERNAL;
+void      mono_arch_allocate_vars               (MonoCompile *m) MONO_INTERNAL;
+int       mono_arch_get_argument_info           (MonoMethodSignature *csig, int param_count, MonoJitArgumentInfo *arg_info) MONO_INTERNAL;
+gboolean  mono_arch_print_tree                 (MonoInst *tree, int arity) MONO_INTERNAL;
 MonoJitInfo *mono_arch_find_jit_info            (MonoDomain *domain, 
                                                 MonoJitTlsData *jit_tls, 
                                                 MonoJitInfo *res, 
@@ -975,77 +992,85 @@ MonoJitInfo *mono_arch_find_jit_info            (MonoDomain *domain,
                                                 char **trace, 
                                                 MonoLMF **lmf, 
                                                 int *native_offset,
-                                                gboolean *managed);
-gpointer mono_arch_get_call_filter              (void);
-gpointer mono_arch_get_restore_context          (void);
-gboolean mono_arch_handle_exception             (void *sigctx, gpointer obj, gboolean test_only);
-gpointer mono_arch_ip_from_context              (void *sigctx);
-void     mono_arch_sigctx_to_monoctx            (void *sigctx, MonoContext *ctx);
-void     mono_arch_monoctx_to_sigctx            (MonoContext *mctx, void *ctx);
-void     mono_arch_flush_register_windows       (void);
-gboolean mono_arch_is_inst_imm                  (gint64 imm);
-MonoInst* mono_arch_get_domain_intrinsic        (MonoCompile* cfg);
-MonoInst* mono_arch_get_thread_intrinsic        (MonoCompile* cfg);
-gboolean mono_arch_is_int_overflow              (void *sigctx, void *info);
-void     mono_arch_invalidate_method            (MonoJitInfo *ji, void *func, gpointer func_arg);
-guint32  mono_arch_get_patch_offset             (guint8 *code);
-gpointer*mono_arch_get_vcall_slot_addr          (guint8* code, gpointer *regs);
-gpointer*mono_arch_get_delegate_method_ptr_addr (guint8* code, gpointer *regs);
-void     mono_arch_create_vars                  (MonoCompile *cfg);
-void     mono_arch_save_unwind_info             (MonoCompile *cfg);
-void     mono_arch_register_lowlevel_calls      (void);
-gpointer mono_arch_get_unbox_trampoline         (MonoMethod *m, gpointer addr);
-void     mono_arch_patch_callsite               (guint8 *code, guint8 *addr);
-void     mono_arch_patch_plt_entry              (guint8 *code, guint8 *addr);
-void     mono_arch_nullify_class_init_trampoline(guint8 *code, gssize *regs);
-void     mono_arch_nullify_plt_entry            (guint8 *code);
-void     mono_arch_patch_delegate_trampoline    (guint8 *code, guint8 *tramp, gssize *regs, guint8 *addr);
-gpointer mono_arch_create_specific_trampoline   (gpointer arg1, MonoTrampolineType tramp_type, MonoDomain *domain, guint32 *code_len);
+                                                gboolean *managed) MONO_INTERNAL;
+gpointer mono_arch_get_call_filter              (void) MONO_INTERNAL;
+gpointer mono_arch_get_restore_context          (void) MONO_INTERNAL;
+gboolean mono_arch_handle_exception             (void *sigctx, gpointer obj, gboolean test_only) MONO_INTERNAL;
+void     mono_arch_handle_altstack_exception    (void *sigctx, gpointer fault_addr, gboolean stack_ovf) MONO_INTERNAL;
+gpointer mono_arch_ip_from_context              (void *sigctx) MONO_INTERNAL;
+void     mono_arch_sigctx_to_monoctx            (void *sigctx, MonoContext *ctx) MONO_INTERNAL;
+void     mono_arch_monoctx_to_sigctx            (MonoContext *mctx, void *ctx) MONO_INTERNAL;
+void     mono_arch_flush_register_windows       (void) MONO_INTERNAL;
+gboolean mono_arch_is_inst_imm                  (gint64 imm) MONO_INTERNAL;
+MonoInst* mono_arch_get_domain_intrinsic        (MonoCompile* cfg) MONO_INTERNAL;
+MonoInst* mono_arch_get_thread_intrinsic        (MonoCompile* cfg) MONO_INTERNAL;
+gboolean mono_arch_is_int_overflow              (void *sigctx, void *info) MONO_INTERNAL;
+void     mono_arch_invalidate_method            (MonoJitInfo *ji, void *func, gpointer func_arg) MONO_INTERNAL;
+guint32  mono_arch_get_patch_offset             (guint8 *code) MONO_INTERNAL;
+gpointer*mono_arch_get_vcall_slot_addr          (guint8* code, gpointer *regs) MONO_INTERNAL;
+gpointer*mono_arch_get_delegate_method_ptr_addr (guint8* code, gpointer *regs) MONO_INTERNAL;
+void     mono_arch_create_vars                  (MonoCompile *cfg) MONO_INTERNAL;
+void     mono_arch_save_unwind_info             (MonoCompile *cfg) MONO_INTERNAL;
+void     mono_arch_register_lowlevel_calls      (void) MONO_INTERNAL;
+gpointer mono_arch_get_unbox_trampoline         (MonoMethod *m, gpointer addr) MONO_INTERNAL;
+void     mono_arch_patch_callsite               (guint8 *code, guint8 *addr) MONO_INTERNAL;
+void     mono_arch_patch_plt_entry              (guint8 *code, guint8 *addr) MONO_INTERNAL;
+void     mono_arch_nullify_class_init_trampoline(guint8 *code, gssize *regs) MONO_INTERNAL;
+void     mono_arch_nullify_plt_entry            (guint8 *code) MONO_INTERNAL;
+void     mono_arch_patch_delegate_trampoline    (guint8 *code, guint8 *tramp, gssize *regs, guint8 *addr) MONO_INTERNAL;
+gpointer mono_arch_get_this_arg_from_call       (MonoMethodSignature *sig, gssize *regs, guint8 *code);
+gpointer mono_arch_get_delegate_invoke_impl     (MonoMethodSignature *sig, gboolean has_target);
+gpointer mono_arch_create_specific_trampoline   (gpointer arg1, MonoTrampolineType tramp_type, MonoDomain *domain, guint32 *code_len) MONO_INTERNAL;
+void        mono_arch_emit_imt_argument         (MonoCompile *cfg, MonoCallInst *call) MONO_INTERNAL;
+MonoMethod* mono_arch_find_imt_method           (gpointer *regs, guint8 *code) MONO_INTERNAL;
+MonoObject* mono_arch_find_this_argument        (gpointer *regs, MonoMethod *method) MONO_INTERNAL;
+gpointer    mono_arch_build_imt_thunk           (MonoVTable *vtable, MonoDomain *domain, MonoIMTCheckItem **imt_entries, int count) MONO_INTERNAL;
 
 /* Exception handling */
 gboolean mono_handle_exception                  (MonoContext *ctx, gpointer obj,
-                                                gpointer original_ip, gboolean test_only);
-void     mono_handle_native_sigsegv             (int signal, void *sigctx);
+                                                gpointer original_ip, gboolean test_only) MONO_INTERNAL;
+void     mono_handle_native_sigsegv             (int signal, void *sigctx) MONO_INTERNAL;
 void     mono_print_thread_dump                 (void *sigctx);
-void     mono_jit_walk_stack                    (MonoStackWalk func, gboolean do_il_offset, gpointer user_data);
-void     mono_jit_walk_stack_from_ctx           (MonoStackWalk func, MonoContext *ctx, gboolean do_il_offset, gpointer user_data);
-void     mono_setup_altstack                    (MonoJitTlsData *tls);
-void     mono_free_altstack                     (MonoJitTlsData *tls);
+void     mono_jit_walk_stack                    (MonoStackWalk func, gboolean do_il_offset, gpointer user_data) MONO_INTERNAL;
+void     mono_jit_walk_stack_from_ctx           (MonoStackWalk func, MonoContext *ctx, gboolean do_il_offset, gpointer user_data) MONO_INTERNAL;
+void     mono_setup_altstack                    (MonoJitTlsData *tls) MONO_INTERNAL;
+void     mono_free_altstack                     (MonoJitTlsData *tls) MONO_INTERNAL;
 
 /* the new function to do stack walks */
 typedef gboolean (*MonoStackFrameWalk)          (MonoDomain *domain, MonoContext *ctx, MonoJitInfo *ji, gpointer data);
 void      mono_walk_stack                       (MonoDomain *domain, MonoJitTlsData *jit_tls, MonoContext *start_ctx, MonoStackFrameWalk func, gpointer user_data);
 
-MonoArray *ves_icall_get_trace                  (MonoException *exc, gint32 skip, MonoBoolean need_file_info);
+MonoArray *ves_icall_get_trace                  (MonoException *exc, gint32 skip, MonoBoolean need_file_info) MONO_INTERNAL;
 MonoBoolean ves_icall_get_frame_info            (gint32 skip, MonoBoolean need_file_info, 
                                                 MonoReflectionMethod **method, 
                                                 gint32 *iloffset, gint32 *native_offset,
-                                                MonoString **file, gint32 *line, gint32 *column);
-MonoString *ves_icall_System_Exception_get_trace (MonoException *exc);
+                                                MonoString **file, gint32 *line, gint32 *column) MONO_INTERNAL;
+MonoString *ves_icall_System_Exception_get_trace (MonoException *exc) MONO_INTERNAL;
 
 /* Dominator/SSA methods */
-void        mono_compile_dominator_info         (MonoCompile *cfg, int dom_flags);
-void        mono_compute_natural_loops          (MonoCompile *cfg);
-MonoBitSet* mono_compile_iterated_dfrontier     (MonoCompile *cfg, MonoBitSet *set);
-void        mono_ssa_compute                    (MonoCompile *cfg);
-void        mono_ssa_remove                     (MonoCompile *cfg);
-void        mono_ssa_cprop                      (MonoCompile *cfg);
-void        mono_ssa_deadce                     (MonoCompile *cfg);
-void        mono_ssa_strength_reduction         (MonoCompile *cfg);
-void        mono_free_loop_info                 (MonoCompile *cfg);
+void        mono_compile_dominator_info         (MonoCompile *cfg, int dom_flags) MONO_INTERNAL;
+void        mono_compute_natural_loops          (MonoCompile *cfg) MONO_INTERNAL;
+MonoBitSet* mono_compile_iterated_dfrontier     (MonoCompile *cfg, MonoBitSet *set) MONO_INTERNAL;
+void        mono_ssa_compute                    (MonoCompile *cfg) MONO_INTERNAL;
+void        mono_ssa_remove                     (MonoCompile *cfg) MONO_INTERNAL;
+void        mono_ssa_cprop                      (MonoCompile *cfg) MONO_INTERNAL;
+void        mono_ssa_deadce                     (MonoCompile *cfg) MONO_INTERNAL;
+void        mono_ssa_strength_reduction         (MonoCompile *cfg) MONO_INTERNAL;
+void        mono_free_loop_info                 (MonoCompile *cfg) MONO_INTERNAL;
 
 /* debugging support */
 void      mono_debug_init_method                (MonoCompile *cfg, MonoBasicBlock *start_block,
-                                                guint32 breakpoint_id);
-void      mono_debug_open_method                (MonoCompile *cfg);
-void      mono_debug_close_method               (MonoCompile *cfg);
-void      mono_debug_open_block                 (MonoCompile *cfg, MonoBasicBlock *bb, guint32 address);
-void      mono_debug_record_line_number         (MonoCompile *cfg, MonoInst *ins, guint32 address);
-void      mono_debug_serialize_debug_info       (MonoCompile *cfg, guint8 **out_buf, guint32 *buf_len);
+                                                guint32 breakpoint_id) MONO_INTERNAL;
+void      mono_debug_open_method                (MonoCompile *cfg) MONO_INTERNAL;
+void      mono_debug_close_method               (MonoCompile *cfg) MONO_INTERNAL;
+void      mono_debug_open_block                 (MonoCompile *cfg, MonoBasicBlock *bb, guint32 address) MONO_INTERNAL;
+void      mono_debug_record_line_number         (MonoCompile *cfg, MonoInst *ins, guint32 address) MONO_INTERNAL;
+void      mono_debug_serialize_debug_info       (MonoCompile *cfg, guint8 **out_buf, guint32 *buf_len) MONO_INTERNAL;
 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);
+                                                guint8 *debug_info, guint32 debug_info_len) MONO_INTERNAL;
+void      mono_debug_add_icall_wrapper          (MonoMethod *method, MonoJitICallInfo* info) MONO_INTERNAL;
+void      mono_debug_print_vars                 (gpointer ip, gboolean only_arguments);
 void      mono_debugger_run_finally             (MonoContext *start_ctx);
 
 /* Mono Debugger support */
@@ -1054,19 +1079,23 @@ int       mono_debugger_main                    (MonoDomain *domain, MonoAssembl
 
 
 /* Tracing */
-MonoTraceSpec *mono_trace_parse_options         (char *options);
-void           mono_trace_set_assembly          (MonoAssembly *assembly);
-gboolean       mono_trace_eval                  (MonoMethod *method);
+MonoTraceSpec *mono_trace_parse_options         (char *options) MONO_INTERNAL;
+void           mono_trace_set_assembly          (MonoAssembly *assembly) MONO_INTERNAL;
+gboolean       mono_trace_eval                  (MonoMethod *method) MONO_INTERNAL;
 
 extern void
-mono_perform_abc_removal (MonoCompile *cfg);
+mono_perform_abc_removal (MonoCompile *cfg) MONO_INTERNAL;
 extern void
-mono_perform_ssapre (MonoCompile *cfg);
+mono_perform_ssapre (MonoCompile *cfg) MONO_INTERNAL;
 extern void
-mono_local_cprop (MonoCompile *cfg);
+mono_local_cprop (MonoCompile *cfg) MONO_INTERNAL;
 
 /* CAS - stack walk */
-MonoSecurityFrame* ves_icall_System_Security_SecurityFrame_GetSecurityFrame (gint32 skip);
-MonoArray* ves_icall_System_Security_SecurityFrame_GetSecurityStack (gint32 skip);
+MonoSecurityFrame* ves_icall_System_Security_SecurityFrame_GetSecurityFrame (gint32 skip) MONO_INTERNAL;
+MonoArray* ves_icall_System_Security_SecurityFrame_GetSecurityStack (gint32 skip) MONO_INTERNAL;
+
+int mini_wapi_hps     (int argc, char **argv);
+int mini_wapi_semdel  (int argc, char **argv);
+int mini_wapi_seminfo (int argc, char **argv);
 
 #endif /* __MONO_MINI_H__ */