Wed Feb 24 15:47:16 CET 2010 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / mini / mini-mips.h
index d3a159f4e1e992ba24557faf009f9f21ea0e6516..0ec362d8048a80639a3afebfda63aebecb99d2ea 100644 (file)
@@ -282,6 +282,7 @@ typedef struct MonoCompileArch {
 #define MONO_ARCH_HAVE_DECOMPOSE_LONG_OPTS 1
 
 #define MONO_ARCH_HAVE_GENERALIZED_IMT_THUNK 1
+#define MONO_ARCH_HAVE_THROW_CORLIB_EXCEPTION 1
 
 /* XXX - a mystery, but it works */
 #define MONO_GET_CONTEXT \
@@ -365,153 +366,6 @@ typedef struct {
 
 #define MONO_ZERO_REG          mips_zero
 
-#define        MONO_EMIT_NEW_BRANCH_UNREG_LABEL(cfg,op,sr1,label) do { \
-                MonoInst *inst; \
-               inst = mono_mempool_alloc0 ((cfg)->mempool, sizeof (MonoInst)); \
-               inst->opcode = op;      \
-               inst->sreg1 = sr1;      \
-               inst->inst_i0 = label;  \
-               inst->flags = MONO_INST_BRLABEL;        \
-               mono_bblock_add_inst ((cfg)->cbb, inst); \
-       } while (0)
-
-#define        MONO_EMIT_NEW_BRANCH_BIREG_LABEL(cfg,op,sr1,sr2,label) do {     \
-                MonoInst *inst; \
-               inst = mono_mempool_alloc0 ((cfg)->mempool, sizeof (MonoInst)); \
-               inst->opcode = op;      \
-               inst->sreg1 = sr1;      \
-               inst->sreg2 = sr2;      \
-               inst->inst_i0 = label;  \
-               inst->flags = MONO_INST_BRLABEL;        \
-               mono_bblock_add_inst ((cfg)->cbb, inst); \
-       } while (0)
-
-#define        MONO_EMIT_NEW_BRANCH_NONZERO_LABEL(cfg,op,sr1,targetbb) do {    \
-                MonoInst *inst; \
-               MonoInst *target_label; \
-               target_label = mono_mempool_alloc0 ((cfg)->mempool, sizeof (MonoInst)); \
-               target_label->opcode = OP_LABEL;        \
-               target_label->next = (targetbb)->code; \
-               target_label->inst_c0 = (targetbb)->native_offset; \
-               (targetbb)->code = target_label; \
-               inst = mono_mempool_alloc0 ((cfg)->mempool, sizeof (MonoInst)); \
-               inst->opcode = op;      \
-                (inst)->sreg1 = sr1; \
-                (inst)->sreg2 = sr2; \
-               inst->inst_i0 = target_label;   \
-               inst->flags = MONO_INST_BRLABEL;        \
-               mono_bblock_add_inst ((cfg)->cbb, inst); \
-       } while (0)
-
-#define        MONO_EMIT_NEW_COMPARE_BRANCH_BLOCK(cfg,op,sr1,sr2,targetbb) do {        \
-                MonoInst *inst; \
-               MonoInst *target_label; \
-               target_label = mono_mempool_alloc0 ((cfg)->mempool, sizeof (MonoInst)); \
-               target_label->opcode = OP_LABEL;        \
-               target_label->next = (targetbb)->code; \
-               target_label->inst_c0 = (targetbb)->native_offset; \
-               (targetbb)->code = target_label; \
-               inst = mono_mempool_alloc0 ((cfg)->mempool, sizeof (MonoInst)); \
-               inst->opcode = op;      \
-                (inst)->sreg1 = sr1; \
-                (inst)->sreg2 = sr2; \
-               inst->inst_i0 = target_label;   \
-               inst->flags = MONO_INST_BRLABEL;        \
-               mono_bblock_add_inst ((cfg)->cbb, inst); \
-       } while (0)
-
-#ifndef MONO_EMIT_NEW_COMPARE_BRANCH_LABEL
-#define MONO_EMIT_NEW_COMPARE_BRANCH_LABEL(cfg, cmp_op, sreg1, sreg2, label) \
-       do { \
-               switch (cmp_op) { \
-               case CEE_BEQ: \
-                       MONO_EMIT_NEW_BRANCH_BIREG_LABEL(cfg, OP_MIPS_BEQ, sreg1, sreg2, label); \
-                       break; \
-               case CEE_BNE_UN: \
-                       MONO_EMIT_NEW_BRANCH_BIREG_LABEL(cfg, OP_MIPS_BNE, sreg1, sreg2, label); \
-                       break; \
-               case CEE_BGE: \
-                       MONO_EMIT_NEW_BIALU (cfg, OP_MIPS_SLT, mips_at, sreg1, sreg2); \
-                       MONO_EMIT_NEW_BIALU_IMM (s, OP_IXOR, mips_at, mips_at, 1); \
-                       MONO_EMIT_NEW_BRANCH_BIREG_LABEL(cfg, OP_MIPS_BNE, mips_at, mips_zero, label); \
-                       break; \
-               case CEE_BGE_UN: \
-                       MONO_EMIT_NEW_BIALU (cfg, OP_MIPS_SLTU, mips_at, sreg1, sreg2); \
-                       MONO_EMIT_NEW_BIALU_IMM (s, OP_IXOR, mips_at, mips_at, 1); \
-                       MONO_EMIT_NEW_BRANCH_BIREG_LABEL(cfg, OP_MIPS_BNE, mips_at, mips_zero, label); \
-                       break; \
-               case CEE_BGT: \
-                       MONO_EMIT_NEW_BIALU (cfg, OP_MIPS_SLT, mips_at, sreg2, sreg1); \
-                       MONO_EMIT_NEW_BRANCH_BIREG_LABEL(cfg, OP_MIPS_BNE, mips_at, mips_zero, label); \
-                       break; \
-               case CEE_BGT_UN: \
-                       MONO_EMIT_NEW_BIALU (cfg, OP_MIPS_SLTU, mips_at, sreg2, sreg1); \
-                       MONO_EMIT_NEW_BRANCH_BIREG_LABEL(cfg, OP_MIPS_BNE, mips_at, mips_zero, label); \
-                       break; \
-               case CEE_BLT: \
-                       MONO_EMIT_NEW_BIALU (cfg, OP_MIPS_SLT, mips_at, sreg1, sreg2); \
-                       MONO_EMIT_NEW_BRANCH_BIREG_LABEL(cfg, OP_MIPS_BNE, mips_at, mips_zero, label); \
-                       break; \
-               case CEE_BLT_UN: \
-                       MONO_EMIT_NEW_BIALU (cfg, OP_MIPS_SLTU, mips_at, sreg1, sreg2); \
-                       MONO_EMIT_NEW_BRANCH_BIREG_LABEL(cfg, OP_MIPS_BNE, mips_at, mips_zero, label); \
-                       break; \
-               default: \
-                       g_assert_not_reached(); \
-               } \
-       } while (0)
-#endif
-
-#ifndef MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL
-#define MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL(cfg, cmp_op, sreg1, imm, label) \
-       do { \
-               guint32 cmp_reg; \
-               if (!(imm)) { \
-                       cmp_reg = mips_zero; \
-               } \
-               else { \
-                       cmp_reg = mips_at; \
-                       MONO_EMIT_NEW_ICONST (cfg, cmp_reg, (imm)); \
-               } \
-               MONO_EMIT_NEW_COMPARE_BRANCH_LABEL(cfg, cmp_op, sreg1, cmp_reg, label); \
-       } while (0)
-#endif
-
-#ifndef MONO_EMIT_NEW_COMPARE_BRANCH_BLOCK
-#define MONO_EMIT_NEW_COMPARE_BRANCH_BLOCK(cfg, cmp_op, sreg1, sreg2, block) \
-       do { \
-               switch (cmp_op) { \
-               case CEE_BEQ: \
-                       MONO_EMIT_NEW_BRANCH_BIREG_BLOCK (cfg, OP_MIPS_BEQ, sreg1, sreg2, block); \
-                       break; \
-               case CEE_BNE_UN: \
-                       MONO_EMIT_NEW_BRANCH_BIREG_BLOCK (cfg, OP_MIPS_BNE, sreg1, sreg2, block); \
-                       break; \
-               case CEE_BLT_UN: \
-                       MONO_EMIT_NEW_BIALU (cfg, OP_MIPS_SLTU, mips_at, sreg1, sreg2); \
-                       MONO_EMIT_NEW_BRANCH_BIREG_BLOCK (cfg, OP_MIPS_BNE, mips_at, mips_zero, block); \
-                       break; \
-               default: \
-                       g_assert_not_reached (); \
-               } \
-       } while (0)
-#endif
-
-#ifndef MONO_EMIT_NEW_COMPARE_IMM_BRANCH_BLOCK
-#define MONO_EMIT_NEW_COMPARE_IMM_BRANCH_BLOCK(cfg, cmp_op, sreg1, imm, block) \
-       do { \
-               guint32 cmp_reg; \
-               if (!(imm)) { \
-                       cmp_reg = mips_zero; \
-               } \
-               else { \
-                       cmp_reg = mips_at; \
-                       MONO_EMIT_NEW_ICONST (cfg, cmp_reg, (imm)); \
-               } \
-               MONO_EMIT_NEW_COMPARE_BRANCH_BLOCK(cfg, cmp_op, sreg1, cmp_reg, block); \
-       } while (0)
-#endif
-
 #define        MONO_EMIT_NEW_MIPS_COND_EXC(cfg,cond,sr1,sr2,name) do { \
                 MonoInst *inst; \
                MONO_INST_NEW ((cfg), (inst), cond); \