X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-x86.h;h=0ca2bdcec44d54524c13b56004e93c1149bb4c8c;hb=32f2f7c898abd259b447eb318e9664e518ea6807;hp=282c515e4f0c4d4cd8dc4cfcfb9ac043b586a767;hpb=bf2c1737c33914a1a93e12df42af8ea97a559b66;p=mono.git diff --git a/mono/mini/mini-x86.h b/mono/mini/mini-x86.h index 282c515e4f0..0ca2bdcec44 100644 --- a/mono/mini/mini-x86.h +++ b/mono/mini/mini-x86.h @@ -165,6 +165,9 @@ typedef struct { gboolean need_stack_frame_inited; gboolean need_stack_frame; int sp_fp_offset, param_area_size; + gpointer cinfo; + gpointer ss_tramp_var; + gpointer bp_tramp_var; } MonoCompileArch; #define MONO_CONTEXT_SET_LLVM_EXC_REG(ctx, exc) do { (ctx)->eax = (gsize)exc; } while (0) @@ -232,12 +235,9 @@ typedef struct { #define MONO_ARCH_AOT_SUPPORTED 1 #define MONO_ARCH_GSHARED_SUPPORTED 1 -#define MONO_ARCH_HAVE_LLVM_IMT_TRAMPOLINE 1 #define MONO_ARCH_LLVM_SUPPORTED 1 -#if defined(MONO_ARCH_USE_SIGACTION) || defined(TARGET_WIN32) #define MONO_ARCH_SOFT_DEBUG_SUPPORTED 1 -#endif #define MONO_ARCH_HAVE_EXCEPTIONS_INIT 1 #define MONO_ARCH_HAVE_HANDLER_BLOCK_GUARD 1 @@ -252,6 +252,7 @@ typedef struct { #define MONO_ARCH_HAVE_TRANSLATE_TLS_OFFSET 1 #define MONO_ARCH_HAVE_TLS_GET_REG 1 #define MONO_ARCH_HAVE_DUMMY_INIT 1 +#define MONO_ARCH_HAVE_SDB_TRAMPOLINES 1 #define MONO_ARCH_HAVE_PATCH_CODE_NEW 1 /* Used for optimization, not complete */ @@ -267,13 +268,6 @@ typedef struct { MONO_EMIT_NEW_COND_EXC (cfg, LE_UN, "IndexOutOfRangeException"); \ } while (0) -typedef struct { - guint8 *address; - guint8 saved_byte; -} MonoBreakpointInfo; - -extern MonoBreakpointInfo mono_breakpoint_info [MONO_BREAKPOINT_ARRAY_SIZE]; - /* Return value marshalling for calls between gsharedvt and normal code */ typedef enum { GSHAREDVT_RET_NONE = 0, @@ -307,6 +301,49 @@ typedef struct { int map [MONO_ZERO_LEN_ARRAY]; } GSharedVtCallInfo; +typedef enum { + ArgInIReg, + ArgInFloatSSEReg, + ArgInDoubleSSEReg, + ArgOnStack, + ArgValuetypeInReg, + ArgOnFloatFpStack, + ArgOnDoubleFpStack, + /* gsharedvt argument passed by addr */ + ArgGSharedVt, + ArgNone +} ArgStorage; + +typedef struct { + gint16 offset; + gint8 reg; + ArgStorage storage; + int nslots; + gboolean is_pair; + + /* Only if storage == ArgValuetypeInReg */ + ArgStorage pair_storage [2]; + gint8 pair_regs [2]; +} ArgInfo; + +typedef struct { + int nargs; + guint32 stack_usage; + guint32 reg_usage; + guint32 freg_usage; + gboolean need_stack_align; + guint32 stack_align_amount; + gboolean vtype_retaddr; + /* The index of the vret arg in the argument list */ + int vret_arg_index; + int vret_arg_offset; + /* Argument space popped by the callee */ + int callee_stack_pop; + ArgInfo ret; + ArgInfo sig_cookie; + ArgInfo args [1]; +} CallInfo; + guint8* mono_x86_emit_tls_get (guint8* code, int dreg, int tls_offset); @@ -333,5 +370,8 @@ mono_x86_patch (unsigned char* code, gpointer target); gpointer mono_x86_start_gsharedvt_call (GSharedVtCallInfo *info, gpointer *caller, gpointer *callee, gpointer mrgctx_reg); +CallInfo* +mono_arch_get_call_info (MonoMemPool *mp, MonoMethodSignature *sig); + #endif /* __MONO_MINI_X86_H__ */