X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-amd64.h;h=11fc30a435f28b08366bd6cae009fe21602147d4;hb=68be3904cf770be9f98a6ce0e8d71899cb94f189;hp=c22c9be0fd0007b3969fc7beec42ac686e66e0d9;hpb=0fa33056a6742b2ee02604596b355d661d9bdc41;p=mono.git diff --git a/mono/mini/mini-amd64.h b/mono/mini/mini-amd64.h index c22c9be0fd0..11fc30a435f 100644 --- a/mono/mini/mini-amd64.h +++ b/mono/mini/mini-amd64.h @@ -6,26 +6,6 @@ #include #include -#ifdef __native_client_codegen__ -#define kNaClAlignmentAMD64 32 -#define kNaClAlignmentMaskAMD64 (kNaClAlignmentAMD64 - 1) - -/* TODO: use kamd64NaClLengthOfCallImm */ -/* temporarily using kNaClAlignmentAMD64 so padding in */ -/* image-writer.c doesn't happen */ -#define kNaClLengthOfCallImm kNaClAlignmentAMD64 - -int is_nacl_call_reg_sequence (guint8* code); -void amd64_nacl_clear_legacy_prefix_tag (); -void amd64_nacl_tag_legacy_prefix (guint8* code); -void amd64_nacl_tag_rex (guint8* code); -guint8* amd64_nacl_get_legacy_prefix_tag (); -guint8* amd64_nacl_get_rex_tag (); -void amd64_nacl_instruction_pre (); -void amd64_nacl_instruction_post (guint8 **start, guint8 **end); -void amd64_nacl_membase_handler (guint8** code, gint8 basereg, gint32 offset, gint8 dreg); -#endif - #ifdef HOST_WIN32 #include /* use SIG* defines if possible */ @@ -175,13 +155,7 @@ struct MonoLMF { * the 'rbp' field is not valid. */ gpointer previous_lmf; -#if defined(__default_codegen__) || defined(HOST_WIN32) guint64 rip; -#elif defined(__native_client_codegen__) - /* On 64-bit compilers, default alignment is 8 for this field, */ - /* this allows the structure to match for 32-bit compilers. */ - guint64 rip __attribute__ ((aligned(8))); -#endif guint64 rbp; guint64 rsp; }; @@ -256,8 +230,10 @@ typedef struct { gpointer bp_addrs [MONO_ZERO_LEN_ARRAY]; } SeqPointInfo; +#define DYN_CALL_STACK_ARGS 6 + typedef struct { - mgreg_t regs [PARAM_REGS]; + mgreg_t regs [PARAM_REGS + DYN_CALL_STACK_ARGS]; mgreg_t res; guint8 *ret; double fregs [8]; @@ -275,6 +251,8 @@ typedef enum { /* gsharedvt argument passed by addr */ ArgGSharedVtInReg, ArgGSharedVtOnStack, + /* Variable sized gsharedvt argument passed/returned by addr */ + ArgGsharedvtVariableInReg, ArgNone /* only in pair_storage */ } ArgStorage; @@ -282,7 +260,6 @@ typedef struct { gint16 offset; gint8 reg; ArgStorage storage : 8; - gboolean is_gsharedvt_return_value : 1; /* Only if storage == ArgValuetypeInReg */ ArgStorage pair_storage [2]; @@ -292,6 +269,7 @@ typedef struct { int nregs; /* Only if storage == ArgOnStack */ int arg_size; // Bytes, will always be rounded up/aligned to 8 byte boundary + gboolean pass_empty_struct; // Set in scenarios when empty structs needs to be represented as argument. } ArgInfo; typedef struct { @@ -300,6 +278,7 @@ typedef struct { 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; @@ -347,7 +326,7 @@ typedef struct { */ #define MONO_ARCH_VARARG_ICALLS 1 -#if (!defined( HOST_WIN32 ) && !defined(__native_client__) && !defined(__native_client_codegen__)) && defined (HAVE_SIGACTION) +#if !defined( HOST_WIN32 ) && defined (HAVE_SIGACTION) #define MONO_ARCH_USE_SIGACTION 1 @@ -357,7 +336,7 @@ typedef struct { #endif -#endif /* !HOST_WIN32 && !__native_client__ */ +#endif /* !HOST_WIN32 */ #if !defined(__linux__) #define MONO_ARCH_NOMAP32BIT 1 @@ -404,15 +383,13 @@ typedef struct { #define MONO_ARCH_HAVE_GET_TRAMPOLINES 1 #define MONO_ARCH_AOT_SUPPORTED 1 -#if !defined( __native_client__ ) #define MONO_ARCH_SOFT_DEBUG_SUPPORTED 1 -#endif #define MONO_ARCH_SUPPORT_TASKLETS 1 #define MONO_ARCH_GSHARED_SUPPORTED 1 #define MONO_ARCH_DYN_CALL_SUPPORTED 1 -#define MONO_ARCH_DYN_CALL_PARAM_AREA 0 +#define MONO_ARCH_DYN_CALL_PARAM_AREA (DYN_CALL_STACK_ARGS * 8) #define MONO_ARCH_LLVM_SUPPORTED 1 #define MONO_ARCH_HAVE_HANDLER_BLOCK_GUARD 1 @@ -428,18 +405,17 @@ typedef struct { #define MONO_ARCH_HAVE_SDB_TRAMPOLINES 1 #define MONO_ARCH_HAVE_PATCH_CODE_NEW 1 #define MONO_ARCH_HAVE_OP_GENERIC_CLASS_INIT 1 +#define MONO_ARCH_HAVE_GENERAL_RGCTX_LAZY_FETCH_TRAMPOLINE 1 #if defined(TARGET_OSX) || defined(__linux__) #define MONO_ARCH_HAVE_UNWIND_BACKTRACE 1 #endif -#if defined(TARGET_OSX) || defined(__linux__) +#if defined(TARGET_OSX) || defined(__linux__) || defined(TARGET_WIN32) #define MONO_ARCH_HAVE_TLS_GET_REG 1 #endif -#if !defined (TARGET_WIN32) #define MONO_ARCH_GSHAREDVT_SUPPORTED 1 -#endif #if defined(TARGET_APPLETVOS)