2007-10-19 Marek Habersack <mhabersack@novell.com>
[mono.git] / mono / mini / mini-amd64.h
index b9c1611709d01d9277a76715218cc519a7fa1833..a328055b28268d801a064bcb219afea7dcfdcc72 100644 (file)
@@ -47,6 +47,7 @@ LONG CALLBACK seh_handler(EXCEPTION_POINTERS* ep);
 
 #ifdef sun    // Solaris x86
 #  undef SIGSEGV_ON_ALTSTACK
+#  define MONO_ARCH_NOMAP32BIT
 
 struct sigcontext {
         unsigned short gs, __gsh;
@@ -73,7 +74,7 @@ struct sigcontext {
 };
 #endif  // sun, Solaris x86
 
-#define MONO_ARCH_SIGNAL_STACK_SIZE (64 * 1024)
+#define MONO_ARCH_SIGNAL_STACK_SIZE (16 * 1024)
 
 #define MONO_ARCH_CPU_SPEC amd64_desc
 
@@ -81,8 +82,6 @@ struct sigcontext {
 
 #define MONO_MAX_FREGS AMD64_XMM_NREG
 
-#define MONO_ARCH_HAS_XP_LOCAL_REGALLOC
-
 /* xmm15 is reserved for use by some opcodes */
 #define MONO_ARCH_CALLEE_FREGS 0xef
 #define MONO_ARCH_CALLEE_SAVED_FREGS 0
@@ -143,6 +142,8 @@ typedef struct MonoCompileArch {
        gint32 reg_save_area_offset;
        gint32 stack_alloc_size;
        gboolean omit_fp, omit_fp_computed;
+       gpointer cinfo;
+       gint32 async_point_count;
 } MonoCompileArch;
 
 typedef struct {
@@ -182,11 +183,17 @@ typedef struct {
 
 #else
 
+/* 
+ * __builtin_frame_address () is broken on some older gcc versions in the presence of
+ * frame pointer elimination, see bug #82095.
+ */
 #define MONO_INIT_CONTEXT_FROM_FUNC(ctx,start_func) do {       \
+        int tmp; \
+        guint64 stackptr = (guint64)&tmp; \
                mono_arch_flush_register_windows ();    \
                MONO_CONTEXT_SET_IP ((ctx), (start_func));      \
-               MONO_CONTEXT_SET_BP ((ctx), __builtin_frame_address (0));       \
-               MONO_CONTEXT_SET_SP ((ctx), __builtin_frame_address (0));       \
+               MONO_CONTEXT_SET_BP ((ctx), stackptr);  \
+               MONO_CONTEXT_SET_SP ((ctx), stackptr);  \
        } while (0)
 
 #endif
@@ -255,9 +262,17 @@ typedef struct {
 #define MONO_ARCH_HAVE_CREATE_SPECIFIC_TRAMPOLINE 1
 #define MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE 1
 #define MONO_ARCH_HAVE_CREATE_VARS 1
+#define MONO_ARCH_HAVE_IMT 1
+#define MONO_ARCH_IMT_REG AMD64_R11
+#define MONO_ARCH_COMMON_VTABLE_TRAMPOLINE 1
+
+#define MONO_ARCH_AOT_SUPPORTED 1
 
 gboolean
-mono_amd64_is_sse2 (void);
+mono_amd64_is_sse2 (void) MONO_INTERNAL;
+
+void 
+mono_amd64_patch (unsigned char* code, gpointer target) MONO_INTERNAL;
 
 #endif /* __MONO_MINI_AMD64_H__ */