X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-amd64.h;h=1d04234c1785f7d5eb0045764bc3212a81cdfc42;hb=dfac8517b91687f11479801fa0a2191585b1ad4c;hp=343a42f8d99133d552f91face897c30d6e91dadf;hpb=df9c98dda18083ec63171490267e08342621ef45;p=mono.git diff --git a/mono/mini/mini-amd64.h b/mono/mini/mini-amd64.h index 343a42f8d99..1d04234c178 100644 --- a/mono/mini/mini-amd64.h +++ b/mono/mini/mini-amd64.h @@ -265,6 +265,51 @@ typedef struct { guint8 buffer [256]; } DynCallArgs; +typedef enum { + ArgInIReg, + ArgInFloatSSEReg, + ArgInDoubleSSEReg, + ArgOnStack, + ArgValuetypeInReg, + ArgValuetypeAddrInIReg, + /* gsharedvt argument passed by addr */ + ArgGSharedVtInReg, + ArgGSharedVtOnStack, + /* Variable sized gsharedvt argument passed/returned by addr */ + ArgGsharedvtVariableInReg, + ArgNone /* only in pair_storage */ +} ArgStorage; + +typedef struct { + gint16 offset; + gint8 reg; + ArgStorage storage : 8; + + /* Only if storage == ArgValuetypeInReg */ + ArgStorage pair_storage [2]; + gint8 pair_regs [2]; + /* The size of each pair (bytes) */ + int pair_size [2]; + int nregs; + /* Only if storage == ArgOnStack */ + int arg_size; // Bytes, will always be rounded up/aligned to 8 byte boundary +} ArgInfo; + +typedef struct { + int nargs; + guint32 stack_usage; + guint32 reg_usage; + guint32 freg_usage; + gboolean need_stack_align; + gboolean gsharedvt; + /* The index of the vret arg in the argument list */ + int vret_arg_index; + ArgInfo ret; + ArgInfo sig_cookie; + ArgInfo args [1]; +} CallInfo; + + #define MONO_CONTEXT_SET_LLVM_EXC_REG(ctx, exc) do { (ctx)->gregs [AMD64_RAX] = (gsize)exc; } while (0) #define MONO_CONTEXT_SET_LLVM_EH_SELECTOR_REG(ctx, sel) do { (ctx)->gregs [AMD64_RDX] = (gsize)(sel); } while (0) @@ -379,7 +424,6 @@ typedef struct { #define MONO_ARCH_HAVE_CONTEXT_SET_INT_REG 1 #define MONO_ARCH_HAVE_SETUP_ASYNC_CALLBACK 1 #define MONO_ARCH_HAVE_CREATE_LLVM_NATIVE_THUNK 1 -#define MONO_ARCH_GSHAREDVT_SUPPORTED 1 #define MONO_ARCH_HAVE_OP_TAIL_CALL 1 #define MONO_ARCH_HAVE_TRANSLATE_TLS_OFFSET 1 #define MONO_ARCH_HAVE_DUMMY_INIT 1 @@ -395,6 +439,11 @@ typedef struct { #define MONO_ARCH_HAVE_TLS_GET_REG 1 #endif +#if !defined (TARGET_WIN32) +#define MONO_ARCH_GSHAREDVT_SUPPORTED 1 +#endif + + #if defined(TARGET_APPLETVOS) /* No signals */ #define MONO_ARCH_NEED_DIV_CHECK 1 @@ -460,5 +509,7 @@ void mono_arch_unwindinfo_install_unwind_info (gpointer* monoui, gpointer code, #define MONO_ARCH_HAVE_UNWIND_TABLE 1 #endif +CallInfo* mono_arch_get_call_info (MonoMemPool *mp, MonoMethodSignature *sig); + #endif /* __MONO_MINI_AMD64_H__ */