X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-amd64.h;h=3907fc83bfc01855bcb80dae675292b7b5cda9a4;hb=3dd824a7c5306569fbbe08e0f3e54f36619822d6;hp=420cdae079059c35260623311cc703758fb046b2;hpb=cf0b04d341051df0d01c9bb5bf0691cb5a8ca532;p=mono.git diff --git a/mono/mini/mini-amd64.h b/mono/mini/mini-amd64.h index 420cdae0790..3907fc83bfc 100644 --- a/mono/mini/mini-amd64.h +++ b/mono/mini/mini-amd64.h @@ -142,7 +142,7 @@ typedef struct MonoCompileArch { gint32 localloc_offset; gint32 reg_save_area_offset; gint32 stack_alloc_size; - gboolean omit_fp, omit_fp_computed; + gboolean omit_fp, omit_fp_computed, no_pushes; gpointer cinfo; gint32 async_point_count; gpointer vret_addr_loc; @@ -221,9 +221,35 @@ typedef struct { #endif +#ifdef __OpenBSD__ +#undef MONO_ARCH_USE_SIGACTION +#endif + #endif /* PLATFORM_WIN32 */ -#ifdef __FreeBSD__ +#if defined (__NetBSD__) + +#define REG_RAX 14 +#define REG_RCX 3 +#define REG_RDX 2 +#define REG_RBX 13 +#define REG_RSP 24 +#define REG_RBP 12 +#define REG_RSI 1 +#define REG_RDI 0 +#define REG_R8 4 +#define REG_R9 5 +#define REG_R10 6 +#define REG_R11 7 +#define REG_R12 8 +#define REG_R13 9 +#define REG_R14 10 +#define REG_R15 11 +#define REG_RIP 21 + +#define MONO_ARCH_NOMAP32BIT + +#elif defined (__FreeBSD__) || defined (__OpenBSD__) #define REG_RAX 7 #define REG_RCX 4 @@ -266,16 +292,14 @@ typedef struct { #define MONO_ARCH_EMULATE_FREM 1 #define MONO_ARCH_HAVE_IS_INT_OVERFLOW 1 -#define MONO_ARCH_ENABLE_EMIT_STATE_OPT 1 #define MONO_ARCH_ENABLE_REGALLOC_IN_EH_BLOCKS 1 #define MONO_ARCH_ENABLE_MONO_LMF_VAR 1 #define MONO_ARCH_HAVE_INVALIDATE_METHOD 1 #define MONO_ARCH_HAVE_THROW_CORLIB_EXCEPTION 1 -#define MONO_ARCH_HAVE_CREATE_TRAMPOLINE_FROM_TOKEN 1 #define MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE 1 #define MONO_ARCH_HAVE_ATOMIC_ADD 1 #define MONO_ARCH_HAVE_ATOMIC_EXCHANGE 1 -#define MONO_ARCH_HAVE_ATOMIC_CAS_IMM 1 +#define MONO_ARCH_HAVE_ATOMIC_CAS 1 #define MONO_ARCH_HAVE_FULL_AOT_TRAMPOLINES 1 #define MONO_ARCH_HAVE_IMT 1 #define MONO_ARCH_HAVE_TLS_GET 1 @@ -287,19 +311,35 @@ typedef struct { * clobbered across method call boundaries. */ #define MONO_ARCH_RGCTX_REG AMD64_R10 -#define MONO_ARCH_COMMON_VTABLE_TRAMPOLINE 1 #define MONO_ARCH_HAVE_CMOV_OPS 1 #define MONO_ARCH_HAVE_NOTIFY_PENDING_EXC 1 -#define MONO_ARCH_ENABLE_NORMALIZE_OPCODES 1 +#define MONO_ARCH_HAVE_EXCEPTIONS_INIT 1 #define MONO_ARCH_ENABLE_GLOBAL_RA 1 #define MONO_ARCH_HAVE_GENERALIZED_IMT_THUNK 1 +#define MONO_ARCH_HAVE_LIVERANGE_OPS 1 +#define MONO_ARCH_HAVE_XP_UNWIND 1 +#define MONO_ARCH_HAVE_SIGCTX_TO_MONOCTX 1 +#if !defined(PLATFORM_WIN32) && !defined(HAVE_MOVING_COLLECTOR) +#define MONO_ARCH_MONITOR_OBJECT_REG AMD64_RDI +#endif +#define MONO_ARCH_HAVE_STATIC_RGCTX_TRAMPOLINE 1 #define MONO_ARCH_AOT_SUPPORTED 1 -#if defined(__linux__) || defined(__sun) +#if !defined(PLATFORM_WIN32) || defined(__sun) #define MONO_ARCH_ENABLE_MONITOR_IL_FASTPATH 1 #endif +#define MONO_ARCH_SUPPORT_TASKLETS 1 + +#ifndef PLATFORM_WIN32 +#define MONO_AMD64_NO_PUSHES 1 +#endif + +#define MONO_ARCH_GSHARED_SUPPORTED 1 + +#define MONO_ARCH_USE_OP_TAIL_CALL(caller_sig, callee_sig) mono_metadata_signature_equal ((caller_sig), (callee_sig)) + /* Used for optimization, not complete */ #define MONO_ARCH_IS_OP_MEMBASE(opcode) ((opcode) == OP_X86_PUSH_MEMBASE) @@ -325,6 +365,12 @@ mono_amd64_throw_exception (guint64 dummy1, guint64 dummy2, guint64 dummy3, guin guint64 rax, guint64 rcx, guint64 rdx, guint64 rethrow); +guint64 +mono_amd64_get_original_ip (void) MONO_INTERNAL; + +guint8* +mono_amd64_emit_tls_get (guint8* code, int dreg, int tls_offset) MONO_INTERNAL; + typedef struct { guint8 *address; guint8 saved_byte;