Merge pull request #1857 from slluis/fix-assembly-resolver
[mono.git] / mono / mini / mini-ia64.h
index 6720b1af9eda2880708177862ee71b6901176e43..bcb30ead561a6eca9a86a91aacca174989697d5c 100644 (file)
@@ -4,6 +4,7 @@
 #include <glib.h>
 
 #include <mono/arch/ia64/ia64-codegen.h>
+#include <mono/utils/mono-context.h>
 
 #define MONO_ARCH_CPU_SPEC ia64_desc
 
@@ -15,7 +16,7 @@
 /* Parameters used by the register allocator */
 
 /* r8..r11, r14..r29 */
-#define MONO_ARCH_CALLEE_REGS ((regmask_t)(0x700UL) | (regmask_t)(0x3fffc000UL))
+#define MONO_ARCH_CALLEE_REGS ((regmask_t)(0xf00UL) | (regmask_t)(0x3fffc000UL))
 
 /* f6..f15, f34..f127 */
 /* FIXME: Use the upper 64 bits as well */
 
 #define MONO_ARCH_CODE_ALIGNMENT 16
 
-#define MONO_ARCH_RETREG1 IA64_R8
-#define MONO_ARCH_FRETREG1 8
-
 #define MONO_ARCH_SIGNAL_STACK_SIZE SIGSTKSZ
 
 struct MonoLMF {
-       guint64    ebp;
 };
 
-typedef struct MonoContext {
-       unw_cursor_t cursor;
-} MonoContext;
-
 typedef struct MonoCompileArch {
        gint32 stack_alloc_size;
        gint32 lmf_offset;
@@ -75,68 +68,6 @@ typedef struct MonoCompileArch {
        GHashTable *branch_targets;
 } MonoCompileArch;
 
-static inline unw_word_t
-mono_ia64_context_get_ip (MonoContext *ctx)
-{
-       unw_word_t ip;
-       int err;
-
-       err = unw_get_reg (&ctx->cursor, UNW_IA64_IP, &ip);
-       g_assert (err == 0);
-
-       /* Subtrack 1 so ip points into the actual instruction */
-       return ip - 1;
-}
-
-static inline unw_word_t
-mono_ia64_context_get_sp (MonoContext *ctx)
-{
-       unw_word_t sp;
-       int err;
-
-       err = unw_get_reg (&ctx->cursor, UNW_IA64_SP, &sp);
-       g_assert (err == 0);
-
-       return sp;
-}
-
-static inline unw_word_t
-mono_ia64_context_get_fp (MonoContext *ctx)
-{
-       unw_cursor_t new_cursor;
-       unw_word_t fp;
-       int err;
-
-       {
-               unw_word_t ip, sp;
-
-               err = unw_get_reg (&ctx->cursor, UNW_IA64_SP, &sp);
-               g_assert (err == 0);
-
-               err = unw_get_reg (&ctx->cursor, UNW_IA64_IP, &ip);
-               g_assert (err == 0);
-       }
-
-       /* fp is the SP of the parent frame */
-       new_cursor = ctx->cursor;
-
-       err = unw_step (&new_cursor);
-       g_assert (err >= 0);
-
-       err = unw_get_reg (&new_cursor, UNW_IA64_SP, &fp);
-       g_assert (err == 0);
-
-       return fp;
-}
-
-#define MONO_CONTEXT_SET_IP(ctx,eip) do { int err = unw_set_reg (&(ctx)->cursor, UNW_IA64_IP, (unw_word_t)(eip)); g_assert (err == 0); } while (0)
-#define MONO_CONTEXT_SET_BP(ctx,ebp) do { } while (0)
-#define MONO_CONTEXT_SET_SP(ctx,esp) do { int err = unw_set_reg (&(ctx)->cursor, UNW_IA64_SP, (unw_word_t)(esp)); g_assert (err == 0); } while (0)
-
-#define MONO_CONTEXT_GET_IP(ctx) ((gpointer)(mono_ia64_context_get_ip ((ctx))))
-#define MONO_CONTEXT_GET_BP(ctx) ((gpointer)(mono_ia64_context_get_fp ((ctx))))
-#define MONO_CONTEXT_GET_SP(ctx) ((gpointer)(mono_ia64_context_get_sp ((ctx))))
-
 #define MONO_INIT_CONTEXT_FROM_FUNC(ctx,start_func) do {       \
     MONO_INIT_CONTEXT_FROM_CURRENT (ctx); \
 } while (0)
@@ -152,6 +83,8 @@ mono_ia64_context_get_fp (MonoContext *ctx)
 /* This is ia64 only */
 #define MONO_CONTEXT_SET_FUNC(ctx, func) MONO_CONTEXT_SET_IP ((ctx), ((gpointer*)(func))[0])
 
+#define MONO_ARCH_INIT_TOP_LMF_ENTRY(lmf)
+
 #define MONO_ARCH_CONTEXT_DEF unw_context_t unw_ctx;
 
 #define MONO_ARCH_USE_SIGACTION 1
@@ -170,19 +103,12 @@ unw_dyn_region_info_t* mono_ia64_create_unwind_region (Ia64CodegenState *code);
 #define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
 #define MONO_ARCH_EMULATE_FREM           1
 #define MONO_ARCH_EMULATE_MUL_DIV        1
-#define MONO_ARCH_EMULATE_LONG_MUL_OPTS  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
-#define MONO_ARCH_HAVE_CREATE_TRAMPOLINE_FROM_TOKEN 1
-#define MONO_ARCH_HAVE_CREATE_SPECIFIC_TRAMPOLINE 1
 #define MONO_ARCH_HAVE_SAVE_UNWIND_INFO 1
-#define MONO_ARCH_HAVE_CREATE_VARS 1
-#define MONO_ARCH_HAVE_IMT 1
+#define MONO_ARCH_HAVE_GENERALIZED_IMT_THUNK 1
 
 #endif /* __MONO_MINI_IA64_H__ */