2009-05-12 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / mini / mini-sparc.h
index 935f4c33529a9fabdf75300c0089b553c85360b3..89aa41f5c8e2bc06a539b47f460b64a0d0f79f54 100644 (file)
 
 /* Parameters used by the register allocator */
 
-#define MONO_ARCH_HAS_XP_LOCAL_REGALLOC
-
 /* 
  * Use %o0..%o5 as local registers, plus %l7 since we need an extra register for
  * holding the sreg1 in call instructions.
  */
 #define MONO_ARCH_CALLEE_REGS ((1 << sparc_o0) | (1 << sparc_o1) | (1 << sparc_o2) | (1 << sparc_o3) | (1 << sparc_o4) | (1 << sparc_o5) | (1 << sparc_l7))
 
-#define MONO_ARCH_CALLEE_SAVED_REGS (~MONO_ARCH_CALLEE_REGS)
+#define MONO_ARCH_CALLEE_SAVED_REGS ((~MONO_ARCH_CALLEE_REGS) & ~(1 << sparc_g1))
 
 #ifdef SPARCV9
 /* Use %d34..%d62 as the double precision floating point local registers */
@@ -58,7 +56,6 @@
 
 #define MONO_ARCH_CODE_ALIGNMENT 32
 
-#define MONO_ARCH_BASEREG sparc_fp
 #define MONO_ARCH_RETREG1 sparc_i0
 
 #ifdef SPARCV9
@@ -85,6 +82,7 @@ typedef struct MonoContext {
 typedef struct MonoCompileArch {
        gint32 lmf_offset;
        gint32 localloc_offset;
+       gint32 float_spill_slot_offset;
 } MonoCompileArch;
 
 #define MONO_CONTEXT_SET_IP(ctx,eip) do { (ctx)->ip = (gpointer)(eip); } while (0); 
@@ -99,6 +97,7 @@ typedef struct MonoCompileArch {
                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));       \
        } while (0)
 
 #ifndef __linux__
@@ -111,7 +110,7 @@ typedef struct MonoCompileArch {
 #endif
 
 #ifdef HAVE_WORKING_SIGALTSTACK
-#define MONO_ARCH_SIGSEGV_ON_ALTSTACK
+/*#define MONO_ARCH_SIGSEGV_ON_ALTSTACK*/
 #endif
 
 #define MONO_ARCH_EMULATE_FCONV_TO_I8   1
@@ -121,10 +120,10 @@ typedef struct MonoCompileArch {
 #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_ENABLE_EMIT_STATE_OPT 1
 #define MONO_ARCH_HAVE_THROW_CORLIB_EXCEPTION 1
-#define MONO_ARCH_HAVE_CREATE_TRAMPOLINE_FROM_TOKEN 1
-#define MONO_ARCH_HAVE_CREATE_SPECIFIC_TRAMPOLINE 1
+#define MONO_ARCH_HAVE_IMT 1
+#define MONO_ARCH_IMT_REG sparc_g1
+#define MONO_ARCH_HAVE_DECOMPOSE_LONG_OPTS 1
 
 #ifdef SPARCV9
 #define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS