/*-------------------------------------------*/
/* Parameters used by the register allocator */
/*-------------------------------------------*/
-#define MONO_ARCH_HAS_XP_LOCAL_REGALLOC 1
#define MONO_EMIT_NEW_MOVE(cfg,dest,offset,src,imm,size) do { \
MonoInst *inst; \
switch (size) { \
case 0: \
MONO_EMIT_NEW_ICONST(cfg, reg, 0); \
- mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); \
+ mono_call_inst_add_outarg_reg(cfg, call, reg, dr, FALSE); \
break; \
case 1: \
MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOADU1_MEMBASE, \
reg, sr, so); \
- mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); \
+ mono_call_inst_add_outarg_reg(cfg, call, reg, dr, FALSE); \
break; \
case 2: \
MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOADU2_MEMBASE, \
reg, sr, so); \
- mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); \
+ mono_call_inst_add_outarg_reg(cfg, call, reg, dr, FALSE); \
break; \
case 4: \
MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOAD_MEMBASE, \
reg, sr, so); \
- mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); \
+ mono_call_inst_add_outarg_reg(cfg, call, reg, dr, FALSE); \
break; \
case 8: \
MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOAD_MEMBASE, \
reg, sr, so); \
- mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); \
- dr++; so += sizeof(guint32); \
+ mono_call_inst_add_outarg_reg(cfg, call, reg, dr, FALSE); \
reg = mono_regstate_next_int (cfg->rs); \
MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOAD_MEMBASE, \
- reg, sr, so); \
- mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); \
+ reg, sr, so + sizeof (guint32)); \
+ mono_call_inst_add_outarg_reg(cfg, call, reg, dr + 1, FALSE); \
break; \
} \
} while (0)
typedef struct ucontext MonoContext;
typedef struct MonoCompileArch {
+ int bkchain_reg;
} MonoCompileArch;
typedef struct
#define MONO_ARCH_EMULATE_LMUL 1
#define MONO_ARCH_HAVE_IS_INT_OVERFLOW 1
#define MONO_ARCH_NEED_DIV_CHECK 1
+#define MONO_ARCH_HAVE_ATOMIC_ADD 1
+#define MONO_ARCH_HAVE_ATOMIC_EXCHANGE 1
+#define MONO_ARCH_ENABLE_NORMALIZE_OPCODES 1
+#define MONO_ARCH_HAVE_DECOMPOSE_OPTS 1
+#define MONO_ARCH_HAVE_DECOMPOSE_LONG_OPTS 1
// #define MONO_ARCH_SIGSEGV_ON_ALTSTACK 1
// #define MONO_ARCH_SIGNAL_STACK_SIZE 65536
// #define MONO_ARCH_HAVE_THROW_CORLIB_EXCEPTION 1
/* Definitions used by mini-codegen.c */
/*===============================================*/
-/*--------------------------------------------*/
-/* use s390_r2-s390_r6 as parm registers */
-/* s390_r0, s390_r1, s390_r13 used internally */
-/* s390_r15 is the stack pointer */
-/*--------------------------------------------*/
-#define MONO_ARCH_CALLEE_REGS (0x1ffc)
+/*-----------------------------------------------------*/
+/* use s390_r2-s390_r6 as parm registers */
+/* s390_r0, s390_r1, s390_r12, s390_r13 used internally*/
+/* s390_r8..s390_r11 are used for global regalloc */
+/* s390_r15 is the stack pointer */
+/*-----------------------------------------------------*/
+#define MONO_ARCH_CALLEE_REGS (0xfc)
#define MONO_ARCH_CALLEE_SAVED_REGS 0xff80
#define MONO_ARCH_BASEREG s390_r15
#define MONO_ARCH_RETREG1 s390_r2
-#define MONO_SPARC_STACK_BIAS 0
-
/*-----------------------------------------------*/
/* Macros used to generate instructions */
/*-----------------------------------------------*/