Author: zoltan
Date: 2005-11-27 16:59:45 -0500 (Sun, 27 Nov 2005)
New Revision: 53531

Modified:
   branches/vargaz/mini-linear-il/mono/mono/mini/cpu-amd64.md
   branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c
   branches/vargaz/mini-linear-il/mono/mono/mini/mini-amd64.c
   branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h
   branches/vargaz/mini-linear-il/mono/mono/mini/mini.c
   branches/vargaz/mini-linear-il/mono/mono/mini/mini.h
Log:
Ongoing work.


Modified: branches/vargaz/mini-linear-il/mono/mono/mini/cpu-amd64.md
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/cpu-amd64.md  2005-11-27 
21:30:40 UTC (rev 53530)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/cpu-amd64.md  2005-11-27 
21:59:45 UTC (rev 53531)
@@ -82,6 +82,7 @@
 stind.i4: src1:b src2:i
 stind.r4: dest:f src1:b
 stind.r8: dest:f src1:b
+
 add: dest:i src1:i src2:i len:3 clob:1
 sub: dest:i src1:i src2:i len:3 clob:1
 mul: dest:i src1:i src2:i len:4 clob:1
@@ -96,6 +97,31 @@
 shr: dest:i src1:i src2:s clob:1 len:3
 shr.un: dest:i src1:i src2:s clob:1 len:3
 
+long_add: dest:i src1:i src2:i len:3 clob:1
+long_sub: dest:i src1:i src2:i len:3 clob:1
+long_mul: dest:i src1:i src2:i len:4 clob:1
+long_div: dest:a src1:a src2:i len:16 clob:d
+long_div_un: dest:a src1:a src2:i len:16 clob:d
+long_rem: dest:d src1:a src2:i len:16 clob:a
+long_rem_un: dest:d src1:a src2:i len:16 clob:a
+long_and: dest:i src1:i src2:i len:3 clob:1
+long_or: dest:i src1:i src2:i len:3 clob:1
+long_xor: dest:i src1:i src2:i len:3 clob:1
+long_shl: dest:i src1:i src2:s clob:1 len:3
+long_shr: dest:i src1:i src2:s clob:1 len:3
+long_shr_un: dest:i src1:i src2:s clob:1 len:3
+
+neg: dest:i src1:i len:3 clob:1
+not: dest:i src1:i len:3 clob:1
+conv.i1: dest:i src1:i len:4
+conv.i2: dest:i src1:i len:4
+conv.i4: dest:i src1:i len:3
+conv.i8: dest:i src1:i len:3
+conv.r4: dest:f src1:i len:9
+conv.r8: dest:f src1:i len:9
+conv.u4: dest:i src1:i len:3
+conv.u8: dest:i src1:i len:3
+
 int_neg: dest:i src1:i len:3 clob:1
 int_not: dest:i src1:i len:3 clob:1
 int_conv_to_i1: dest:i src1:i len:4
@@ -107,6 +133,19 @@
 int_conv_to_u4: dest:i src1:i len:3
 int_conv_to_u8: dest:i src1:i len:3
 
+long_neg: dest:i src1:i len:3 clob:1
+long_not: dest:i src1:i len:3 clob:1
+long_conv_to_i1: dest:i src1:i len:4
+long_conv_to_u1: dest:i src1:i len:4
+long_conv_to_i2: dest:i src1:i len:4
+long_conv_to_u2: dest:i src1:i len:4
+long_conv_to_i4: dest:i src1:i len:3
+long_conv_to_i8: dest:i src1:i len:3
+long_conv_to_r4: dest:f src1:i len:9
+long_conv_to_r8: dest:f src1:i len:9
+long_conv_to_u4: dest:i src1:i len:3
+long_conv_to_u8: dest:i src1:i len:3
+
 throw: src1:i len:18
 op_rethrow: src1:i len:18
 conv.ovf.i4.un: dest:i src1:i len:16
@@ -136,6 +175,7 @@
 lcompare: src1:i src2:i len:3
 icompare: src1:i src2:i len:3
 compare_imm: src1:i len:13
+lcompare_imm: src1:i len:13
 icompare_imm: src1:i len:8
 fcompare: src1:f src2:f clob:a len:13
 oparglist: src1:b len:11
@@ -237,21 +277,11 @@
 cond_exc_ic: len:8
 cond_exc_inc: len:8
 
-long_mul: dest:i src1:i src2:i clob:1 len:4
-long_mul_imm: dest:i src1:i clob:1 len:12
-long_div: dest:a src1:a src2:i len:16 clob:d
-long_div_un: dest:a src1:a src2:i len:16 clob:d
-long_rem: dest:d src1:a src2:i len:16 clob:a
-long_rem_un: dest:d src1:a src2:i len:16 clob:a
-long_shl: dest:i src1:i src2:s clob:1 len:31
-long_shr: dest:i src1:i src2:s clob:1 len:32
-long_shr_un: dest:i src1:i src2:s clob:1 len:32
-long_conv_to_r4: dest:f src1:i len:8
-long_conv_to_r8: dest:f src1:i len:8
 long_conv_to_ovf_i: dest:i src1:i src2:i len:40
 long_mul_ovf: dest:i src1:i src2:i clob:1 len:16
 long_mul_ovf_un: dest:i src1:i src2:i len:22
 long_conv_to_r_un: dest:f src1:i src2:i len:48 
+long_mul_imm: dest:i src1:i clob:1 len:12
 long_shr_imm: dest:i src1:i clob:1 len:11
 long_shr_un_imm: dest:i src1:i clob:1 len:11
 long_shl_imm: dest:i src1:i clob:1 len:11
@@ -260,7 +290,7 @@
 float_blt: len:13
 float_blt_un: len:30
 float_bgt: len:13
-float_btg_un: len:30
+float_bgt_un: len:30
 float_bge: len:32
 float_bge_un: len:13
 float_ble: len:32
@@ -274,6 +304,7 @@
 float_rem_un: dest:f src1:f src2:f len:19
 float_neg: dest:f src1:f len:23
 float_not: dest:f src1:f len:3
+
 float_conv_to_i1: dest:i src1:f len:49
 float_conv_to_i2: dest:i src1:f len:49
 float_conv_to_i4: dest:i src1:f len:49
@@ -284,7 +315,9 @@
 float_conv_to_u1: dest:i src1:f len:49
 float_conv_to_i: dest:i src1:f len:49
 float_conv_to_ovf_i: dest:a src1:f len:40
-float_conv_to_ovd_u: dest:a src1:f len:40
+float_conv_to_r4: dest:f src1:f
+float_conv_to_r8: dest:f src1:f
+
 float_mul_ovf: 
 float_ceq: dest:i src1:f src2:f len:35
 float_cgt: dest:i src1:f src2:f len:35
@@ -410,3 +443,18 @@
 int_ble: len:64
 int_ble_un: len:64
 
+long_ceq: dest:c len:64
+long_cgt: dest:c len:64
+long_cgt_un: dest:c len:64
+long_clt: dest:c len:64
+long_clt_un: dest:c len:64
+long_beq: len:64
+long_bne_un: len:64
+long_blt: len:64
+long_blt_un: len:64
+long_bgt: len:64
+long_bgt_un: len:64
+long_bge: len:64
+long_bge_un: len:64
+long_ble: len:64
+long_ble_un: len:64

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c        
2005-11-27 21:30:40 UTC (rev 53530)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c        
2005-11-27 21:59:45 UTC (rev 53531)
@@ -341,6 +341,15 @@
            mono_bblock_add_inst (cfg->cbb, inst); \
        } while (0)
 
+#define MONO_EMIT_NEW_BIALU(cfg,op,dr,sr1,sr2) do { \
+        MonoInst *inst; \
+        MONO_INST_NEW ((cfg), (inst), (op)); \
+        inst->dreg = dr; \
+        inst->sreg1 = sr1; \
+        inst->sreg2 = sr2; \
+           mono_bblock_add_inst (cfg->cbb, inst); \
+       } while (0)
+
 #define MONO_EMIT_NEW_BIALU_IMM(cfg,op,dr,sr,imm) do { \
         MonoInst *inst; \
         MONO_INST_NEW ((cfg), (inst), (op)); \
@@ -675,7 +684,9 @@
                type_from_op (cmp, sp [0], sp [1]);     \
                CHECK_TYPE (cmp);       \
         MONO_ADD_INS (bblock, cmp); \
+        printf ("D: %s\n", mono_inst_name ((ins->opcode))); \
                type_from_op (ins, sp [0], sp [1]);     \
+        printf ("D: %s\n", mono_inst_name ((ins)->opcode)); \
                MONO_ADD_INS (bblock, ins);     \
                ins->inst_many_bb = mono_mempool_alloc (cfg->mempool, 
sizeof(gpointer)*2);      \
                GET_BBLOCK (cfg, bbhash, tblock, target);               \
@@ -1252,7 +1263,7 @@
        case OP_ICOMPARE_IMM:
                ins->type = bin_comp_table [src1->type] [src1->type] ? STACK_I4 
: STACK_INV;
                if ((src1->type == STACK_I8) || ((sizeof (gpointer) == 8) && 
((src1->type == STACK_PTR) || (src1->type == STACK_OBJ) || (src1->type == 
STACK_MP))))
-                       ins->opcode = OP_LCOMPARE;              
+                       ins->opcode = OP_LCOMPARE_IMM;          
                return;
        case CEE_BEQ:
        case CEE_BGE:
@@ -2753,17 +2764,6 @@
        return addr;
 }
 
-static MonoJitICallInfo **emul_opcode_map = NULL;
-
-static inline MonoJitICallInfo *
-mono_find_jit_opcode_emulation (int opcode)
-{
-       if  (emul_opcode_map)
-               return emul_opcode_map [opcode];
-       else
-               return NULL;
-}
-
 static MonoException*
 mini_loader_error_to_exception (MonoLoaderError *error)
 {
@@ -3200,6 +3200,8 @@
 static void
 decompose_opcode (MonoCompile *cfg, MonoInst *ins)
 {
+       /* FIXME: Instead of = NOP, don't emit the original ins at all */
+
        switch (ins->opcode) {
        case OP_IADD_OVF:
                ins->opcode = OP_IADDCC;
@@ -3271,11 +3273,154 @@
                MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, ins->dreg, ins->sreg1);
                ins->opcode = CEE_NOP;
                break;
-       case OP_IMUL_OVF:
-       case OP_IMUL_OVF_UN:
+       case OP_ICONV_TO_I4:
+               ins->opcode = OP_MOVE;
                break;
+
+               /* Long opcodes on 64 bit machines */
+#if SIZEOF_VOID_P == 8
+       case OP_LCONV_TO_I4:
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_LSHR_IMM, ins->dreg, 
ins->sreg1, 0);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_I8:
+       case OP_ICONV_TO_U8:
+               ins->opcode = OP_MOVE;
+               break;
+       case OP_ICONV_TO_I8:
+               /* FIXME: Widen ? */
+               ins->opcode = OP_MOVE;
+               break;
+       case OP_LCONV_TO_U4:
+               /* Clean out the upper word */
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_ISHR_UN_IMM, ins->dreg, 
ins->sreg1, 0);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LADD_OVF:
+               MONO_EMIT_NEW_BIALU (cfg, OP_ADDCC, ins->dreg, ins->sreg1, 
ins->sreg2);
+               MONO_EMIT_NEW_COND_EXC (cfg, OV, "OverflowException");
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LADD_OVF_UN:
+               MONO_EMIT_NEW_BIALU (cfg, OP_ADDCC, ins->dreg, ins->sreg1, 
ins->sreg2);
+               MONO_EMIT_NEW_COND_EXC (cfg, C, "OverflowException");
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LSUB_OVF:
+               MONO_EMIT_NEW_BIALU (cfg, OP_SUBCC, ins->dreg, ins->sreg1, 
ins->sreg2);
+               MONO_EMIT_NEW_COND_EXC (cfg, OV, "OverflowException");
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LSUB_OVF_UN:
+               MONO_EMIT_NEW_BIALU (cfg, OP_SUBCC, ins->dreg, ins->sreg1, 
ins->sreg2);
+               MONO_EMIT_NEW_COND_EXC (cfg, C, "OverflowException");
+               ins->opcode = CEE_NOP;
+               break;
+
+       case OP_LCONV_TO_OVF_I1:
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 127);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT, "OverflowException");
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, -128);
+               MONO_EMIT_NEW_COND_EXC (cfg, LT, "OverflowException");
+               MONO_EMIT_NEW_UNALU (cfg, OP_LCONV_TO_I1, ins->dreg, 
ins->sreg1);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_I1_UN:
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 127);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT_UN, "OverflowException");
+               MONO_EMIT_NEW_UNALU (cfg, OP_LCONV_TO_I1, ins->dreg, 
ins->sreg1);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_U1:
+               /* probe value to be within 0 to 255 */
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 255);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT_UN, "OverflowException");
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_AND_IMM, ins->dreg, 
ins->sreg1, 0xff);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_U1_UN:
+               /* probe value to be within 0 to 255 */
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 255);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT_UN, "OverflowException");
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_AND_IMM, ins->dreg, 
ins->sreg1, 0xff);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_I2:
+               /* Probe value to be within -32768 and 32767 */
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 32767);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT, "OverflowException");
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, -32768);
+               MONO_EMIT_NEW_COND_EXC (cfg, LT, "OverflowException");
+               MONO_EMIT_NEW_UNALU (cfg, OP_LCONV_TO_I2, ins->dreg, 
ins->sreg1);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_I2_UN:
+               /* Probe value to be within 0 and 32767 */
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 32767);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT_UN, "OverflowException");
+               MONO_EMIT_NEW_UNALU (cfg, OP_LCONV_TO_I2, ins->dreg, 
ins->sreg1);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_U2:
+               /* Probe value to be within 0 and 65535 */
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 0xffff);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT_UN, "OverflowException");
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_AND_IMM, ins->dreg, 
ins->sreg1, 0xffff);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_U2_UN:
+               /* Probe value to be within 0 and 65535 */
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 0xffff);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT_UN, "OverflowException");
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_AND_IMM, ins->dreg, 
ins->sreg1, 0xffff);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_I4:
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 0x7fffffff);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT, "OverflowException");
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, -2147483648);
+               MONO_EMIT_NEW_COND_EXC (cfg, LT, "OverflowException");
+               MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, ins->dreg, ins->sreg1);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_I4_UN:
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 0x7fffffff);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT, "OverflowException");
+               MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, ins->dreg, ins->sreg1);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_U4:
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 0xffffffffUL);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT, "OverflowException");
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, ins->sreg1, 
0);
+               MONO_EMIT_NEW_COND_EXC (cfg, LT, "OverflowException");
+               MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, ins->dreg, ins->sreg1);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_U4_UN:
+               MONO_EMIT_NEW_COMPARE_IMM (cfg, ins->sreg1, 0xffffffff);
+               MONO_EMIT_NEW_COND_EXC (cfg, GT_UN, "OverflowException");
+               MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, ins->dreg, ins->sreg1);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_I_UN:
+       case OP_LCONV_TO_OVF_I8_UN:
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, ins->sreg1, 
0);
+               MONO_EMIT_NEW_COND_EXC (cfg, LT, "OverflowException");
+               MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, ins->dreg, ins->sreg1);
+               ins->opcode = CEE_NOP;
+               break;
+       case OP_LCONV_TO_OVF_U8:
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, ins->sreg1, 
0);
+               MONO_EMIT_NEW_COND_EXC (cfg, LT, "OverflowException");
+
+               MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, ins->dreg, ins->sreg1);
+               ins->opcode = CEE_NOP;
+               break;
+#endif
+
        default:
-               g_assert_not_reached ();
+               break;
        }
 }
 
@@ -3830,19 +3975,19 @@
                        ip += 5;
                        *sp++ = ins;
                        break;
-#if 0
                case CEE_LDC_I8:
                        CHECK_OPSIZE (9);
                        CHECK_STACK_OVF (1);
                        MONO_INST_NEW (cfg, ins, OP_I8CONST);
                        ins->cil_code = ip;
                        ins->type = STACK_I8;
+                       ins->dreg = alloc_dreg (cfg, STACK_I8);
                        ++ip;
                        ins->inst_l = (gint64)read64 (ip);
+                       MONO_ADD_INS (bblock, ins);
                        ip += 8;
                        *sp++ = ins;
                        break;
-#endif
                case CEE_LDC_R4: {
                        float *f;
                        /* FIXME: we should really allocate this only late in 
the compilation process */
@@ -4688,6 +4833,8 @@
                                *sp++ = emit_tree (cfg, bblock, ins, ip + 1);
                                mono_get_got_var (cfg);
                        }
+                       else
+                               decompose_opcode (cfg, ins);
                        ip++;                   
                        break;
                case CEE_CONV_OVF_I4:
@@ -6791,6 +6938,7 @@
                                MONO_INST_NEW (cfg, ins, OP_I8CONST);
                                ins->type = STACK_I8;
                                ins->inst_l = 0;
+                               ins->dreg = alloc_dreg (cfg, STACK_I8);
                                MONO_ADD_INS (init_localsbb, ins);
                                NEW_LOCSTORE (cfg, store, i, ins);
                                MONO_ADD_INS (init_localsbb, store);
@@ -6880,6 +7028,11 @@
 #define NONE " "
 #define IREG "i"
 #define FREG "f"
+#if SIZEOF_VOID_P == 8
+#define LREG IREG
+#else
+#error Not implemented
+#endif
 /* keep in sync with the enum in mini.h */
 static const char* const
 opcode_info[] = {
@@ -6924,7 +7077,6 @@
 
                        switch (ins->type) {
                        case STACK_I4:
-                       case STACK_I8:
                        case STACK_PTR:
                        case STACK_MP:
                        case STACK_OBJ:
@@ -6933,6 +7085,13 @@
                        case STACK_R8:
                                vreg_to_inst ['f'][ins->dreg] = ins;
                                break;
+                       case STACK_I8:
+#if SIZEOF_VOID_P == 8
+                               vreg_to_inst ['i'][ins->dreg] = ins;
+#else
+                               NOT_IMPLEMENTED;
+#endif
+                               break;
                        default:
                                NOT_IMPLEMENTED;
                        }
@@ -7045,4 +7204,5 @@
  * - handling ovf opcodes: decompose in method_to_ir.
  * - unify to_regstore/to_regload as to_regmove
  * - unify iregs/fregs
+ * - use sext/zext opcodes instead of shifts
  */

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini-amd64.c
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini-amd64.c  2005-11-27 
21:30:40 UTC (rev 53530)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini-amd64.c  2005-11-27 
21:59:45 UTC (rev 53531)
@@ -1513,6 +1513,7 @@
                        }
                        break;
                case OP_COMPARE_IMM:
+               case OP_LCOMPARE_IMM:
                        /* OP_COMPARE_IMM (reg, 0) 
                         * --> 
                         * OP_AMD64_TEST_NULL (reg) 
@@ -1770,6 +1771,7 @@
                        ins->sreg2 = temp->dreg;
                        break;
                case OP_COMPARE_IMM:
+               case OP_LCOMPARE_IMM:
                        if (!amd64_is_imm32 (ins->inst_imm)) {
                                NEW_INS (cfg, temp, OP_I8CONST);
                                temp->inst_c0 = ins->inst_imm;
@@ -1822,24 +1824,34 @@
 {
        switch (opcode) {
        case OP_IBEQ:
+       case OP_LBEQ:
                return X86_CC_EQ;
        case OP_IBNE_UN:
+       case OP_LBNE_UN:
                return X86_CC_NE;
        case OP_IBLT:
+       case OP_LBLT:
                return X86_CC_LT;
        case OP_IBLT_UN:
+       case OP_LBLT_UN:
                return X86_CC_LT;
        case OP_IBGT:
+       case OP_LBGT:
                return X86_CC_GT;
        case OP_IBGT_UN:
+       case OP_LBGT_UN:
                return X86_CC_GT;
        case OP_IBGE:
+       case OP_LBGE:
                return X86_CC_GE;
        case OP_IBGE_UN:
+       case OP_LBGE_UN:
                return X86_CC_GE;
        case OP_IBLE:
+       case OP_LBLE:
                return X86_CC_LE;
        case OP_IBLE_UN:
+       case OP_LBLE_UN:
                return X86_CC_LE;
        default:
                g_assert_not_reached ();
@@ -2270,18 +2282,22 @@
                        amd64_mov_reg_memindex_size (code, ins->dreg, 
ins->inst_basereg, 0, ins->inst_indexreg, 0, 8);
                        break;
                case CEE_CONV_I1:
+               case OP_LCONV_TO_I1:
                case OP_ICONV_TO_I1:
                        amd64_widen_reg (code, ins->dreg, ins->sreg1, TRUE, 
FALSE);
                        break;
                case CEE_CONV_I2:
+               case OP_LCONV_TO_I2:
                case OP_ICONV_TO_I2:
                        amd64_widen_reg (code, ins->dreg, ins->sreg1, TRUE, 
TRUE);
                        break;
                case CEE_CONV_U1:
+               case OP_LCONV_TO_U1:
                case OP_ICONV_TO_U1:
                        amd64_widen_reg (code, ins->dreg, ins->sreg1, FALSE, 
FALSE);
                        break;
                case CEE_CONV_U2:
+               case OP_LCONV_TO_U2:
                case OP_ICONV_TO_U2:
                        amd64_widen_reg (code, ins->dreg, ins->sreg1, FALSE, 
TRUE);
                        break;
@@ -2299,6 +2315,7 @@
                        amd64_alu_reg_reg (code, X86_CMP, ins->sreg1, 
ins->sreg2);
                        break;
                case OP_COMPARE_IMM:
+               case OP_LCOMPARE_IMM:
                        g_assert (amd64_is_imm32 (ins->inst_imm));
                        amd64_alu_reg_imm (code, X86_CMP, ins->sreg1, 
ins->inst_imm);
                        break;
@@ -2356,6 +2373,7 @@
                        break;
                case OP_ADDCC:
                case CEE_ADD:
+               case OP_LADD:
                        amd64_alu_reg_reg (code, X86_ADD, ins->sreg1, 
ins->sreg2);
                        break;
                case OP_ADC:
@@ -2371,6 +2389,7 @@
                        break;
                case OP_SUBCC:
                case CEE_SUB:
+               case OP_LSUB:
                        amd64_alu_reg_reg (code, X86_SUB, ins->sreg1, 
ins->sreg2);
                        break;
                case OP_SBB:
@@ -2384,13 +2403,7 @@
                        g_assert (amd64_is_imm32 (ins->inst_imm));
                        amd64_alu_reg_imm (code, X86_SBB, ins->dreg, 
ins->inst_imm);
                        break;
-               case CEE_AND:
-                       amd64_alu_reg_reg (code, X86_AND, ins->sreg1, 
ins->sreg2);
-                       break;
-               case OP_AND_IMM:
-                       g_assert (amd64_is_imm32 (ins->inst_imm));
-                       amd64_alu_reg_imm (code, X86_AND, ins->sreg1, 
ins->inst_imm);
-                       break;
+
                case CEE_MUL:
                case OP_LMUL:
                        amd64_imul_reg_reg (code, ins->sreg1, ins->sreg2);
@@ -2482,7 +2495,17 @@
                        amd64_imul_reg_reg (code, ins->sreg1, ins->sreg2);
                        EMIT_COND_SYSTEM_EXCEPTION (X86_CC_O, FALSE, 
"OverflowException");
                        break;
+
+               case CEE_AND:
+               case OP_LAND:
+                       amd64_alu_reg_reg (code, X86_AND, ins->sreg1, 
ins->sreg2);
+                       break;
+               case OP_AND_IMM:
+                       g_assert (amd64_is_imm32 (ins->inst_imm));
+                       amd64_alu_reg_imm (code, X86_AND, ins->sreg1, 
ins->inst_imm);
+                       break;
                case CEE_OR:
+               case OP_LOR:
                        amd64_alu_reg_reg (code, X86_OR, ins->sreg1, 
ins->sreg2);
                        break;
                case OP_OR_IMM
@@ -2490,12 +2513,14 @@
                        amd64_alu_reg_imm (code, X86_OR, ins->sreg1, 
ins->inst_imm);
                        break;
                case CEE_XOR:
+               case OP_LXOR:
                        amd64_alu_reg_reg (code, X86_XOR, ins->sreg1, 
ins->sreg2);
                        break;
                case OP_XOR_IMM:
                        g_assert (amd64_is_imm32 (ins->inst_imm));
                        amd64_alu_reg_imm (code, X86_XOR, ins->sreg1, 
ins->inst_imm);
                        break;
+
                case CEE_SHL:
                case OP_LSHL:
                        g_assert (ins->sreg2 == AMD64_RCX);
@@ -2684,6 +2709,11 @@
                case OP_IBGT:
                case OP_IBGE:
                case OP_IBLE:
+               case OP_LBEQ:
+               case OP_LBLT:
+               case OP_LBGT:
+               case OP_LBGE:
+               case OP_LBLE:
                        EMIT_COND_BRANCH (ins, opcode_to_x86_cond 
(ins->opcode), TRUE);
                        break;
                case OP_IBNE_UN:
@@ -2691,12 +2721,19 @@
                case OP_IBGT_UN:
                case OP_IBGE_UN:
                case OP_IBLE_UN:
+               case OP_LBNE_UN:
+               case OP_LBLT_UN:
+               case OP_LBGT_UN:
+               case OP_LBGE_UN:
+               case OP_LBLE_UN:
                        EMIT_COND_BRANCH (ins, opcode_to_x86_cond 
(ins->opcode), FALSE);
                        break;
                case CEE_NOT:
+               case OP_LNOT:
                        amd64_not_reg (code, ins->sreg1);
                        break;
                case CEE_NEG:
+               case OP_LNEG:
                        amd64_neg_reg (code, ins->sreg1);
                        break;
                case OP_SEXT_I1:
@@ -2995,26 +3032,31 @@
                        amd64_jump_reg (code, ins->sreg1);
                        break;
                case OP_CEQ:
+               case OP_LCEQ:
                case OP_ICEQ:
                        amd64_set_reg (code, X86_CC_EQ, ins->dreg, TRUE);
                        amd64_widen_reg (code, ins->dreg, ins->dreg, FALSE, 
FALSE);
                        break;
                case OP_CLT:
+               case OP_LCLT:
                case OP_ICLT:
                        amd64_set_reg (code, X86_CC_LT, ins->dreg, TRUE);
                        amd64_widen_reg (code, ins->dreg, ins->dreg, FALSE, 
FALSE);
                        break;
                case OP_CLT_UN:
+               case OP_LCLT_UN:
                case OP_ICLT_UN:
                        amd64_set_reg (code, X86_CC_LT, ins->dreg, FALSE);
                        amd64_widen_reg (code, ins->dreg, ins->dreg, FALSE, 
FALSE);
                        break;
                case OP_CGT:
+               case OP_LCGT:
                case OP_ICGT:
                        amd64_set_reg (code, X86_CC_GT, ins->dreg, TRUE);
                        amd64_widen_reg (code, ins->dreg, ins->dreg, FALSE, 
FALSE);
                        break;
                case OP_CGT_UN:
+               case OP_LCGT_UN:
                case OP_ICGT_UN:
                        amd64_set_reg (code, X86_CC_GT, ins->dreg, FALSE);
                        amd64_widen_reg (code, ins->dreg, ins->dreg, FALSE, 
FALSE);
@@ -3149,6 +3191,8 @@
                                amd64_fld_membase (code, ins->inst_basereg, 
ins->inst_offset, FALSE);
                        break;
                case CEE_CONV_R4: /* FIXME: change precision */
+               case OP_ICONV_TO_R4:
+               case OP_ICONV_TO_R8:
                case CEE_CONV_R8:
                        if (use_sse2)
                                amd64_sse_cvtsi2sd_reg_reg_size (code, 
ins->dreg, ins->sreg1, 4);
@@ -3182,6 +3226,12 @@
                                g_assert_not_reached ();
                        amd64_fild_membase (code, ins->inst_basereg, 
ins->inst_offset, FALSE);
                        break;
+               case OP_FCONV_TO_R8:
+                       /* Nothing to do */
+                       break;
+               case OP_FCONV_TO_R4:
+                       /* FIXME: nothing to do ?? */
+                       break;
                case OP_FCONV_TO_I1:
                        code = emit_float_to_int (cfg, code, ins->dreg, 
ins->sreg1, 1, TRUE);
                        break;
@@ -3194,6 +3244,9 @@
                case OP_FCONV_TO_U2:
                        code = emit_float_to_int (cfg, code, ins->dreg, 
ins->sreg1, 2, FALSE);
                        break;
+               case OP_FCONV_TO_U4:
+                       code = emit_float_to_int (cfg, code, ins->dreg, 
ins->sreg1, 4, FALSE);                  
+                       break;
                case OP_FCONV_TO_I4:
                case OP_FCONV_TO_I:
                        code = emit_float_to_int (cfg, code, ins->dreg, 
ins->sreg1, 4, TRUE);

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h    2005-11-27 
21:30:40 UTC (rev 53530)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h    2005-11-27 
21:59:45 UTC (rev 53531)
@@ -9,10 +9,10 @@
 MINI_OP(OP_COMPARE,    "compare", NONE, IREG, IREG)
 MINI_OP(OP_COMPARE_IMM,        "compare_imm", NONE, IREG, NONE)
 MINI_OP(OP_FCOMPARE,   "fcompare", NONE, FREG, FREG)
-MINI_OP(OP_LCOMPARE,   "lcompare", NONE, NONE, NONE)
+MINI_OP(OP_LCOMPARE,   "lcompare", NONE, LREG, LREG)
 MINI_OP(OP_ICOMPARE,   "icompare", NONE, IREG, IREG)
 MINI_OP(OP_ICOMPARE_IMM,       "icompare_imm", NONE, IREG, NONE)
-MINI_OP(OP_LCOMPARE_IMM,       "lcompare_imm", NONE, NONE, NONE)
+MINI_OP(OP_LCOMPARE_IMM,       "lcompare_imm", NONE, LREG, NONE)
 MINI_OP(OP_LOCAL,      "local", NONE, NONE, NONE)
 MINI_OP(OP_ARG,                "arg", NONE, NONE, NONE)
 MINI_OP(OP_ARGLIST,    "oparglist", NONE, NONE, NONE)
@@ -53,7 +53,7 @@
 MINI_OP(OP_CALL_MEMBASE,       "call_membase", NONE, NONE, NONE)
 MINI_OP(OP_TRAP,       "trap", NONE, NONE, NONE)
 MINI_OP(OP_ICONST,     "iconst", IREG, NONE, NONE)
-MINI_OP(OP_I8CONST,    "i8const", NONE, NONE, NONE)
+MINI_OP(OP_I8CONST,    "i8const", LREG, NONE, NONE)
 MINI_OP(OP_R4CONST,    "r4const", FREG, NONE, NONE)
 MINI_OP(OP_R8CONST,    "r8const", FREG, NONE, NONE)
 MINI_OP(OP_REGVAR,     "regvar", NONE, NONE, NONE)
@@ -163,89 +163,90 @@
 MINI_OP(OP_COND_EXC_INC, "cond_exc_inc", NONE, NONE, NONE)
 
 /* 64 bit opcodes: must be in the same order as the matching CEE_ opcodes: 
binops_op_map */
-MINI_OP(OP_LADD,    "long_add", NONE, NONE, NONE)
-MINI_OP(OP_LSUB,    "long_sub", NONE, NONE, NONE)
-MINI_OP(OP_LMUL,    "long_mul", NONE, NONE, NONE)
-MINI_OP(OP_LDIV,    "long_div", NONE, NONE, NONE)
-MINI_OP(OP_LDIV_UN, "long_div_un", NONE, NONE, NONE)
-MINI_OP(OP_LREM,    "long_rem", NONE, NONE, NONE)
-MINI_OP(OP_LREM_UN, "long_rem_un", NONE, NONE, NONE)
-MINI_OP(OP_LAND,    "long_and", NONE, NONE, NONE)
-MINI_OP(OP_LOR,     "long_or", NONE, NONE, NONE)
-MINI_OP(OP_LXOR,    "long_xor", NONE, NONE, NONE)
-MINI_OP(OP_LSHL,    "long_shl", NONE, NONE, NONE)
-MINI_OP(OP_LSHR,    "long_shr", NONE, NONE, NONE)
-MINI_OP(OP_LSHR_UN, "long_shr_un", NONE, NONE, NONE)
+MINI_OP(OP_LADD,    "long_add", LREG, LREG, LREG)
+MINI_OP(OP_LSUB,    "long_sub", LREG, LREG, LREG)
+MINI_OP(OP_LMUL,    "long_mul", LREG, LREG, LREG)
+MINI_OP(OP_LDIV,    "long_div", LREG, LREG, LREG)
+MINI_OP(OP_LDIV_UN, "long_div_un", LREG, LREG, LREG)
+MINI_OP(OP_LREM,    "long_rem", LREG, LREG, LREG)
+MINI_OP(OP_LREM_UN, "long_rem_un", LREG, LREG, LREG)
+MINI_OP(OP_LAND,    "long_and", LREG, LREG, LREG)
+MINI_OP(OP_LOR,     "long_or", LREG, LREG, LREG)
+MINI_OP(OP_LXOR,    "long_xor", LREG, LREG, LREG)
+MINI_OP(OP_LSHL,    "long_shl", LREG, LREG, LREG)
+MINI_OP(OP_LSHR,    "long_shr", LREG, LREG, LREG)
+MINI_OP(OP_LSHR_UN, "long_shr_un", LREG, LREG, LREG)
 
 /* 64 bit opcodes: must be in the same order as the matching CEE_ opcodes: 
unops_op_map */
-MINI_OP(OP_LNEG,       "long_neg", NONE, NONE, NONE)
-MINI_OP(OP_LNOT,       "long_not", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_I1,"long_conv_to_i1", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_I2,"long_conv_to_i2", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_I4,"long_conv_to_i4", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_I8,"long_conv_to_i8", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_R4,"long_conv_to_r4", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_R8,"long_conv_to_r8", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_U4,"long_conv_to_u4", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_U8,"long_conv_to_u8", NONE, NONE, NONE)
+MINI_OP(OP_LNEG,       "long_neg", LREG, LREG, NONE)
+MINI_OP(OP_LNOT,       "long_not", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_I1,"long_conv_to_i1", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_I2,"long_conv_to_i2", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_I4,"long_conv_to_i4", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_I8,"long_conv_to_i8", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_R4,"long_conv_to_r4", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_R8,"long_conv_to_r8", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_U4,"long_conv_to_u4", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_U8,"long_conv_to_u8", LREG, LREG, NONE)
 
-MINI_OP(OP_LCONV_TO_U2,   "long_conv_to_u2", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_U1,   "long_conv_to_u1", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_I,    "long_conv_to_i", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_I,"long_conv_to_ovf_i", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_U,"long_conv_to_ovf_u", NONE, NONE, NONE)
-MINI_OP(OP_LADD_OVF,      "long_add_ovf", NONE, NONE, NONE)
-MINI_OP(OP_LADD_OVF_UN,   "long_add_ovf_un", NONE, NONE, NONE)
-MINI_OP(OP_LMUL_OVF,      "long_mul_ovf", NONE, NONE, NONE)
-MINI_OP(OP_LMUL_OVF_UN,   "long_mul_ovf_un", NONE, NONE, NONE)
-MINI_OP(OP_LSUB_OVF,      "long_sub_ovf", NONE, NONE, NONE)
-MINI_OP(OP_LSUB_OVF_UN,   "long_sub_ovf_un", NONE, NONE, NONE)
+MINI_OP(OP_LCONV_TO_U2,   "long_conv_to_u2", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_U1,   "long_conv_to_u1", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_I,    "long_conv_to_i", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_I,"long_conv_to_ovf_i", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_U,"long_conv_to_ovf_u", LREG, LREG, NONE)
 
-MINI_OP(OP_LCONV_TO_OVF_I1_UN,"long_conv_to_ovf_i1_un", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_I2_UN,"long_conv_to_ovf_i2_un", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_I4_UN,"long_conv_to_ovf_i4_un", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_I8_UN,"long_conv_to_ovf_i8_un", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_U1_UN,"long_conv_to_ovf_u1_un", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_U2_UN,"long_conv_to_ovf_u2_un", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_U4_UN,"long_conv_to_ovf_u4_un", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_U8_UN,"long_conv_to_ovf_u8_un", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_I_UN, "long_conv_to_ovf_i_un", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_U_UN, "long_conv_to_ovf_u_un", NONE, NONE, NONE)
+MINI_OP(OP_LADD_OVF,      "long_add_ovf", LREG, LREG, LREG)
+MINI_OP(OP_LADD_OVF_UN,   "long_add_ovf_un", LREG, LREG, LREG)
+MINI_OP(OP_LMUL_OVF,      "long_mul_ovf", LREG, LREG, LREG)
+MINI_OP(OP_LMUL_OVF_UN,   "long_mul_ovf_un", LREG, LREG, LREG)
+MINI_OP(OP_LSUB_OVF,      "long_sub_ovf", LREG, LREG, LREG)
+MINI_OP(OP_LSUB_OVF_UN,   "long_sub_ovf_un", LREG, LREG, LREG)
 
-MINI_OP(OP_LCONV_TO_OVF_I1,"long_conv_to_ovf_i1", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_U1,"long_conv_to_ovf_u1", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_I2,"long_conv_to_ovf_i2", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_U2,"long_conv_to_ovf_u2", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_I4,"long_conv_to_ovf_i4", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_U4,"long_conv_to_ovf_u4", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_I8,"long_conv_to_ovf_i8", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_OVF_U8,"long_conv_to_ovf_u8", NONE, NONE, NONE)
+MINI_OP(OP_LCONV_TO_OVF_I1_UN,"long_conv_to_ovf_i1_un", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_I2_UN,"long_conv_to_ovf_i2_un", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_I4_UN,"long_conv_to_ovf_i4_un", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_I8_UN,"long_conv_to_ovf_i8_un", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_U1_UN,"long_conv_to_ovf_u1_un", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_U2_UN,"long_conv_to_ovf_u2_un", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_U4_UN,"long_conv_to_ovf_u4_un", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_U8_UN,"long_conv_to_ovf_u8_un", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_I_UN, "long_conv_to_ovf_i_un", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_U_UN, "long_conv_to_ovf_u_un", LREG, LREG, NONE)
 
-MINI_OP(OP_LCEQ,   "long_ceq", NONE, NONE, NONE)
-MINI_OP(OP_LCGT,   "long_cgt", NONE, NONE, NONE)
-MINI_OP(OP_LCGT_UN,"long_cgt_un", NONE, NONE, NONE)
-MINI_OP(OP_LCLT,   "long_clt", NONE, NONE, NONE)
-MINI_OP(OP_LCLT_UN,"long_clt_un", NONE, NONE, NONE)
+MINI_OP(OP_LCONV_TO_OVF_I1,"long_conv_to_ovf_i1", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_U1,"long_conv_to_ovf_u1", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_I2,"long_conv_to_ovf_i2", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_U2,"long_conv_to_ovf_u2", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_I4,"long_conv_to_ovf_i4", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_U4,"long_conv_to_ovf_u4", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_I8,"long_conv_to_ovf_i8", LREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_OVF_U8,"long_conv_to_ovf_u8", LREG, LREG, NONE)
 
-MINI_OP(OP_LCONV_TO_R_UN,"long_conv_to_r_un", NONE, NONE, NONE)
-MINI_OP(OP_LCONV_TO_U,   "long_conv_to_u", NONE, NONE, NONE)
-MINI_OP(OP_LSHR_IMM,    "long_shr_imm", NONE, NONE, NONE)
-MINI_OP(OP_LSHR_UN_IMM,  "long_shr_un_imm", NONE, NONE, NONE)
-MINI_OP(OP_LSHL_IMM,     "long_shl_imm", NONE, NONE, NONE)
-MINI_OP(OP_LADD_IMM,     "long_add_imm", NONE, NONE, NONE)
-MINI_OP(OP_LSUB_IMM,     "long_sub_imm", NONE, NONE, NONE)
-MINI_OP(OP_LMUL_IMM,     "long_mul_imm", NONE, NONE, NONE)
+MINI_OP(OP_LCEQ,   "long_ceq", LREG, NONE, NONE)
+MINI_OP(OP_LCGT,   "long_cgt", LREG, NONE, NONE)
+MINI_OP(OP_LCGT_UN,"long_cgt_un", LREG, NONE, NONE)
+MINI_OP(OP_LCLT,   "long_clt", LREG, NONE, NONE)
+MINI_OP(OP_LCLT_UN,"long_clt_un", LREG, NONE, NONE)
 
+MINI_OP(OP_LCONV_TO_R_UN,"long_conv_to_r_un", FREG, LREG, NONE)
+MINI_OP(OP_LCONV_TO_U,   "long_conv_to_u", IREG, LREG, NONE)
+MINI_OP(OP_LSHR_IMM,    "long_shr_imm", LREG, LREG, NONE)
+MINI_OP(OP_LSHR_UN_IMM,  "long_shr_un_imm", LREG, LREG, NONE)
+MINI_OP(OP_LSHL_IMM,     "long_shl_imm", LREG, LREG, NONE)
+MINI_OP(OP_LADD_IMM,     "long_add_imm", LREG, LREG, NONE)
+MINI_OP(OP_LSUB_IMM,     "long_sub_imm", LREG, LREG, NONE)
+MINI_OP(OP_LMUL_IMM,     "long_mul_imm", LREG, LREG, NONE)
+
 MINI_OP(OP_LBEQ,    "long_beq", NONE, NONE, NONE)
+MINI_OP(OP_LBGE,    "long_bge", NONE, NONE, NONE)
+MINI_OP(OP_LBGT,    "long_bgt", NONE, NONE, NONE)
+MINI_OP(OP_LBLE,    "long_ble", NONE, NONE, NONE)
+MINI_OP(OP_LBLT,    "long_blt", NONE, NONE, NONE)
 MINI_OP(OP_LBNE_UN, "long_bne_un", NONE, NONE, NONE)
-MINI_OP(OP_LBLT,    "long_blt", NONE, NONE, NONE)
-MINI_OP(OP_LBLT_UN, "long_blt_un", NONE, NONE, NONE)
-MINI_OP(OP_LBGT,    "long_bgt", NONE, NONE, NONE)
-MINI_OP(OP_LBGT_UN, "long_btg_un", NONE, NONE, NONE)
-MINI_OP(OP_LBGE,    "long_bge", NONE, NONE, NONE)
 MINI_OP(OP_LBGE_UN, "long_bge_un", NONE, NONE, NONE)
-MINI_OP(OP_LBLE,    "long_ble", NONE, NONE, NONE)
+MINI_OP(OP_LBGT_UN, "long_bgt_un", NONE, NONE, NONE)
 MINI_OP(OP_LBLE_UN, "long_ble_un", NONE, NONE, NONE)
+MINI_OP(OP_LBLT_UN, "long_blt_un", NONE, NONE, NONE)
 
 MINI_OP(OP_LONG_SHRUN_32, "long_shr_un_32", NONE, NONE, NONE)
 
@@ -339,26 +340,26 @@
 MINI_OP(OP_ICLT_UN,"int_clt_un", IREG, NONE, NONE)
 
 MINI_OP(OP_IBEQ,    "int_beq", NONE, NONE, NONE)
+MINI_OP(OP_IBGE,    "int_bge", NONE, NONE, NONE)
+MINI_OP(OP_IBGT,    "int_bgt", NONE, NONE, NONE)
+MINI_OP(OP_IBLE,    "int_ble", NONE, NONE, NONE)
+MINI_OP(OP_IBLT,    "int_blt", NONE, NONE, NONE)
 MINI_OP(OP_IBNE_UN, "int_bne_un", NONE, NONE, NONE)
-MINI_OP(OP_IBLT,    "int_blt", NONE, NONE, NONE)
-MINI_OP(OP_IBLT_UN, "int_blt_un", NONE, NONE, NONE)
-MINI_OP(OP_IBGT,    "int_bgt", NONE, NONE, NONE)
+MINI_OP(OP_IBGE_UN, "int_bge_un", NONE, NONE, NONE)
 MINI_OP(OP_IBGT_UN, "int_bgt_un", NONE, NONE, NONE)
-MINI_OP(OP_IBGE,    "int_bge", NONE, NONE, NONE)
-MINI_OP(OP_IBGE_UN, "int_bge_un", NONE, NONE, NONE)
-MINI_OP(OP_IBLE,    "int_ble", NONE, NONE, NONE)
 MINI_OP(OP_IBLE_UN, "int_ble_un", NONE, NONE, NONE)
+MINI_OP(OP_IBLT_UN, "int_blt_un", NONE, NONE, NONE)
 
-MINI_OP(OP_FBEQ,   "float_beq", NONE, NONE, NONE)
-MINI_OP(OP_FBNE_UN,"float_bne_un", NONE, NONE, NONE)
-MINI_OP(OP_FBLT,   "float_blt", NONE, NONE, NONE)
-MINI_OP(OP_FBLT_UN,"float_blt_un", NONE, NONE, NONE)
-MINI_OP(OP_FBGT,   "float_bgt", NONE, NONE, NONE)
-MINI_OP(OP_FBGT_UN,"float_btg_un", NONE, NONE, NONE)
-MINI_OP(OP_FBGE,   "float_bge", NONE, NONE, NONE)
-MINI_OP(OP_FBGE_UN,"float_bge_un", NONE, NONE, NONE)
-MINI_OP(OP_FBLE,   "float_ble", NONE, NONE, NONE)
-MINI_OP(OP_FBLE_UN,"float_ble_un", NONE, NONE, NONE)
+MINI_OP(OP_FBEQ,    "float_beq", NONE, NONE, NONE)
+MINI_OP(OP_FBGE,    "float_bge", NONE, NONE, NONE)
+MINI_OP(OP_FBGT,    "float_bgt", NONE, NONE, NONE)
+MINI_OP(OP_FBLE,    "float_ble", NONE, NONE, NONE)
+MINI_OP(OP_FBLT,    "float_blt", NONE, NONE, NONE)
+MINI_OP(OP_FBNE_UN, "float_bne_un", NONE, NONE, NONE)
+MINI_OP(OP_FBGE_UN, "float_bge_un", NONE, NONE, NONE)
+MINI_OP(OP_FBGT_UN, "float_bgt_un", NONE, NONE, NONE)
+MINI_OP(OP_FBLE_UN, "float_ble_un", NONE, NONE, NONE)
+MINI_OP(OP_FBLT_UN, "float_blt_un", NONE, NONE, NONE)
 
 /* float opcodes: must be in the same order as the matching CEE_ opcodes: 
binops_op_map */
 MINI_OP(OP_FADD,   "float_add", FREG, FREG, FREG)
@@ -448,21 +449,21 @@
 MINI_OP(OP_BIGMUL_UN, "op_bigmul_un", NONE, NONE, NONE)
 
 /* opcodes most architecture have */
-MINI_OP(OP_ADC,     "adc", NONE, NONE, NONE)
-MINI_OP(OP_ADC_IMM, "adc_imm", NONE, NONE, NONE)
-MINI_OP(OP_SBB,     "sbb", NONE, NONE, NONE)
-MINI_OP(OP_SBB_IMM, "sbb_imm", NONE, NONE, NONE)
-MINI_OP(OP_ADDCC,   "addcc", NONE, NONE, NONE)
-MINI_OP(OP_ADDCC_IMM,   "addcc_imm", NONE, NONE, NONE)
-MINI_OP(OP_SUBCC,   "subcc", NONE, NONE, NONE)
-MINI_OP(OP_SUBCC_IMM,   "subcc_imm", NONE, NONE, NONE)
+MINI_OP(OP_ADC,     "adc", IREG, IREG, IREG)
+MINI_OP(OP_ADC_IMM, "adc_imm", IREG, IREG, NONE)
+MINI_OP(OP_SBB,     "sbb", IREG, IREG, IREG)
+MINI_OP(OP_SBB_IMM, "sbb_imm", IREG, IREG, NONE)
+MINI_OP(OP_ADDCC,   "addcc", IREG, IREG, IREG)
+MINI_OP(OP_ADDCC_IMM,   "addcc_imm", IREG, IREG, NONE)
+MINI_OP(OP_SUBCC,   "subcc", IREG, IREG, IREG)
+MINI_OP(OP_SUBCC_IMM,   "subcc_imm", IREG, IREG, NONE)
 MINI_OP(OP_BR_REG,  "br_reg", NONE, IREG, NONE)
-MINI_OP(OP_SEXT_I1,  "sext_i1", NONE, NONE, NONE)
-MINI_OP(OP_SEXT_I2,  "sext_i2", NONE, NONE, NONE)
-MINI_OP(OP_SEXT_I4,  "sext_i4", NONE, NONE, NONE)
-MINI_OP(OP_ZEXT_I1,  "zext_i1", NONE, NONE, NONE)
-MINI_OP(OP_ZEXT_I2,  "zext_i2", NONE, NONE, NONE)
-MINI_OP(OP_ZEXT_I4,  "zext_i4", NONE, NONE, NONE)
+MINI_OP(OP_SEXT_I1,  "sext_i1", IREG, IREG, NONE)
+MINI_OP(OP_SEXT_I2,  "sext_i2", IREG, IREG, NONE)
+MINI_OP(OP_SEXT_I4,  "sext_i4", IREG, IREG, NONE)
+MINI_OP(OP_ZEXT_I1,  "zext_i1", IREG, IREG, NONE)
+MINI_OP(OP_ZEXT_I2,  "zext_i2", IREG, IREG, NONE)
+MINI_OP(OP_ZEXT_I4,  "zext_i4", IREG, IREG, NONE)
 MINI_OP(OP_CNE,      "cne", NONE, NONE, NONE)
 /* to implement the upper half of long32 add and sub */
 MINI_OP(OP_ADD_OVF_CARRY,   "add_ovf_carry", NONE, NONE, NONE)

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini.c
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini.c        2005-11-27 
21:30:40 UTC (rev 53530)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini.c        2005-11-27 
21:59:45 UTC (rev 53531)
@@ -2980,7 +2980,7 @@
 
 static MonoJitICallInfo **emul_opcode_map = NULL;
 
-static inline MonoJitICallInfo *
+MonoJitICallInfo *
 mono_find_jit_opcode_emulation (int opcode)
 {
        if  (emul_opcode_map)

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini.h
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini.h        2005-11-27 
21:30:40 UTC (rev 53530)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini.h        2005-11-27 
21:59:45 UTC (rev 53531)
@@ -840,7 +840,7 @@
 
 gboolean  mono_method_blittable             (MonoMethod *method);
 gboolean  mono_method_same_domain           (MonoJitInfo *caller, MonoJitInfo 
*callee);
-
+MonoJitICallInfo *mono_find_jit_opcode_emulation (int opcode);
 void      mono_register_opcode_emulation    (int opcode, const char* name, 
const char *sigstr, gpointer func, gboolean no_throw);
 void      mono_draw_graph                   (MonoCompile *cfg, 
MonoGraphOptions draw_options);
 void      mono_add_varcopy_to_end           (MonoCompile *cfg, MonoBasicBlock 
*bb, int src, int dest);

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to