X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-arm.h;h=1994ba0a6abf5d77addee2dc77a8730b3f0df1ff;hb=66e33aa2ee25b9de6ff80e41aa7036b9a8352479;hp=87efa8cd9549828acbd0bb96026e87abfe9df720;hpb=7e8b4615eee6fa14f7b294b5d0c9303f74a6219e;p=mono.git diff --git a/mono/mini/mini-arm.h b/mono/mini/mini-arm.h index 87efa8cd954..1994ba0a6ab 100644 --- a/mono/mini/mini-arm.h +++ b/mono/mini/mini-arm.h @@ -41,7 +41,7 @@ #define MONO_ARCH_ARCHITECTURE ARM_ARCHITECTURE "," ARM_FP_MODEL -#define MONO_ARCH_CPU_SPEC arm_cpu_desc +#define MONO_ARCH_CPU_SPEC mono_arm_cpu_desc #if G_BYTE_ORDER == G_LITTLE_ENDIAN #define ARM_LSW_REG ARMREG_R0 @@ -118,12 +118,19 @@ #define MONO_ARCH_INST_REGPAIR_REG2(desc,hreg1) ((desc) == 'l' || (desc) == 'f' || (desc) == 'g' ? ARM_MSW_REG : -1) +#ifdef TARGET_WATCHOS +#define MONO_ARCH_FRAME_ALIGNMENT 16 +#else #define MONO_ARCH_FRAME_ALIGNMENT 8 +#endif /* fixme: align to 16byte instead of 32byte (we align to 32byte to get * reproduceable results for benchmarks */ #define MONO_ARCH_CODE_ALIGNMENT 32 +/* This needs to hold both a 32 bit int and a 64 bit double */ +#define mono_unwind_reg_t guint64 + /* Argument marshallings for calls between gsharedvt and normal code */ typedef enum { GSHAREDVT_ARG_NONE = 0, @@ -176,7 +183,7 @@ typedef struct { #define PARAM_REGS 4 -#define DYN_CALL_STACK_ARGS 6 +#define DYN_CALL_STACK_ARGS 10 typedef struct { mgreg_t regs [PARAM_REGS + DYN_CALL_STACK_ARGS]; @@ -226,7 +233,7 @@ struct MonoLMF { typedef struct MonoCompileArch { gpointer seq_point_info_var, ss_trigger_page_var; - gpointer seq_point_read_var, seq_point_ss_method_var; + gpointer seq_point_ss_method_var; gpointer seq_point_bp_method_var; gpointer vret_addr_loc; gboolean omit_fp, omit_fp_computed; @@ -251,13 +258,12 @@ typedef struct MonoCompileArch { #define MONO_ARCH_USE_SIGACTION 1 -#if defined(__native_client__) +#if defined(__native_client__) || defined(HOST_WATCHOS) #undef MONO_ARCH_USE_SIGACTION #endif #define MONO_ARCH_NEED_DIV_CHECK 1 -#define MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE #define MONO_ARCH_HAVE_GENERALIZED_IMT_THUNK 1 #define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1 @@ -268,7 +274,7 @@ typedef struct MonoCompileArch { #define MONO_ARCH_GSHARED_SUPPORTED 1 #define MONO_ARCH_DYN_CALL_SUPPORTED 1 -#define MONO_ARCH_DYN_CALL_PARAM_AREA 24 +#define MONO_ARCH_DYN_CALL_PARAM_AREA (DYN_CALL_STACK_ARGS * sizeof (mgreg_t)) #ifndef MONO_CROSS_COMPILE #define MONO_ARCH_SOFT_DEBUG_SUPPORTED 1 @@ -287,12 +293,11 @@ typedef struct MonoCompileArch { #define MONO_ARCH_HAVE_GENERAL_RGCTX_LAZY_FETCH_TRAMPOLINE 1 #define MONO_ARCH_HAVE_OPCODE_NEEDS_EMULATION 1 #define MONO_ARCH_HAVE_OBJC_GET_SELECTOR 1 -#ifdef __linux__ #define MONO_ARCH_HAVE_OP_TAIL_CALL 1 -#endif #define MONO_ARCH_HAVE_DUMMY_INIT 1 #define MONO_ARCH_HAVE_SDB_TRAMPOLINES 1 #define MONO_ARCH_HAVE_PATCH_CODE_NEW 1 +#define MONO_ARCH_HAVE_OP_GENERIC_CLASS_INIT 1 #if defined(__native_client__) #undef MONO_ARCH_SOFT_DEBUG_SUPPORTED @@ -300,10 +305,8 @@ typedef struct MonoCompileArch { #undef MONO_ARCH_HAVE_CONTEXT_SET_INT_REG #endif -/* Matches the HAVE_AEABI_READ_TP define in mini-arm.c */ -#if defined(__ARM_EABI__) && defined(__linux__) && !defined(TARGET_ANDROID) && !defined(__native_client__) -#define MONO_ARCH_HAVE_TLS_GET 1 -#endif +#define MONO_ARCH_HAVE_TLS_GET (mono_arm_have_tls_get ()) +// #define MONO_ARCH_HAVE_TLS_GET_REG 1 /* ARM doesn't have too many registers, so we have to use a callee saved one */ #define MONO_ARCH_RGCTX_REG ARMREG_V5 @@ -357,4 +360,10 @@ mono_arm_load_jumptable_entry (guint8 *code, gpointer *jte, ARMReg reg); gboolean mono_arm_is_hard_float (void); +gboolean +mono_arm_have_tls_get (void); + +void +mono_arm_unaligned_stack (MonoMethod *method); + #endif /* __MONO_MINI_ARM_H__ */