2005-01-05 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mono / mini / mini-amd64.h
index 16d92d08b332f6202e4af65233e4b2c8bc7b8dc7..a5181efc5f821a4f451f7ae3d34373e42f25a6e5 100644 (file)
@@ -78,7 +78,7 @@ struct sigcontext {
 
 #define MONO_MAX_IREGS 16
 
-#define MONO_MAX_FREGS 6
+#define MONO_MAX_FREGS AMD64_XMM_NREG
 
 #define MONO_ARCH_FRAME_ALIGNMENT 16
 
@@ -143,7 +143,7 @@ typedef struct {
 # define SC_ESP sc_esp
 # define SC_EDI sc_edi
 # define SC_ESI sc_esi
-#elif defined(__x86_64__)
+#else
 # define SC_EAX rax
 # define SC_EBX rbx
 # define SC_ECX rcx
@@ -162,16 +162,7 @@ typedef struct {
 # define SC_R13 r13
 # define SC_R14 r14
 # define SC_R15 r15
-#else
-# define SC_EAX eax
-# define SC_EBX ebx
-# define SC_ECX ecx
-# define SC_EDX edx
-# define SC_EBP ebp
-# define SC_EIP eip
-# define SC_ESP esp
-# define SC_EDI edi
-# define SC_ESI esi
+
 #endif
 
 #define MONO_CONTEXT_SET_IP(ctx,ip) do { (ctx)->rip = (long)(ip); } while (0); 
@@ -182,6 +173,12 @@ typedef struct {
 #define MONO_CONTEXT_GET_BP(ctx) ((gpointer)((ctx)->rbp))
 #define MONO_CONTEXT_GET_SP(ctx) ((gpointer)((ctx)->rsp))
 
+#define MONO_INIT_CONTEXT_FROM_FUNC(ctx,start_func) do {       \
+               mono_arch_flush_register_windows ();    \
+               MONO_CONTEXT_SET_IP ((ctx), (start_func));      \
+               MONO_CONTEXT_SET_BP ((ctx), __builtin_frame_address (0));       \
+       } while (0)
+
 #define MONO_ARCH_USE_SIGACTION 1
 
 /*
@@ -191,8 +188,16 @@ typedef struct {
 #define MONO_ARCH_VARARG_ICALLS 1
 
 #ifndef PLATFORM_WIN32
+
 #ifdef HAVE_WORKING_SIGALTSTACK
-#define MONO_ARCH_SIGSEGV_ON_ALTSTACK
+
+/*
+ * FIXME: For some reason, when sigaltstack is enabled, the uc_mcontext member
+ * in ucontext_t is not at the offset indicated by the definition of ucontext_t.
+ */
+
+//#define MONO_ARCH_SIGSEGV_ON_ALTSTACK
+
 /* NetBSD doesn't define SA_STACK */
 #ifndef SA_STACK
 #define SA_STACK SA_ONSTACK
@@ -201,8 +206,20 @@ typedef struct {
 
 #endif
 
+/* Enables OP_LSHL, OP_LSHL_IMM, OP_LSHR, OP_LSHR_IMM, OP_LSHR_UN, OP_LSHR_UN_IMM */
+#define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS
+
 #define MONO_ARCH_EMULATE_CONV_R8_UN    1
 #define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
+#define MONO_ARCH_EMULATE_FREM 1
+#define MONO_ARCH_NEED_DIV_CHECK 1
+#define MONO_ARCH_HAVE_IS_INT_OVERFLOW 1
+
+#define MONO_ARCH_ENABLE_EMIT_STATE_OPT 1
+#define MONO_ARCH_HAVE_INVALIDATE_METHOD 1
+#define MONO_ARCH_HAVE_THROW_CORLIB_EXCEPTION 1
+
+#define MONO_ARCH_HAVE_PIC_AOT 1
 
 gpointer*
 mono_amd64_get_vcall_slot_addr (guint8* code, guint64 *regs);
@@ -210,6 +227,9 @@ mono_amd64_get_vcall_slot_addr (guint8* code, guint64 *regs);
 void
 mono_amd64_exceptions_init (void);
 
+void
+mono_amd64_tramp_init (void);
+
 /* FIXME: */
 //#define MONO_ARCH_BIGMUL_INTRINS 1