Wed Jun 11 18:01:06 CEST 2003 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / mini / inssel-long32.brg
index 8f923b99076f4d994737369545fb36700f5249f0..4173fb80df34d5360e4324bcb93f507742815918 100644 (file)
@@ -74,22 +74,25 @@ stmt: CEE_STIND_I8 (base, i8con) {
                                         state->left->tree->inst_offset, state->right->tree->inst_c0);
 }
 
+lreg: OP_BIGMUL (reg, reg) {
+       MONO_EMIT_NEW_BIALU (s, OP_BIGMUL, state->reg1, state->left->reg1, state->right->reg1); 
+}
 
 lreg: OP_LADD (lreg, lreg) {
-       MONO_EMIT_NEW_BIALU (s, CEE_ADD, state->reg1, state->left->reg1, state->right->reg1);
+       MONO_EMIT_NEW_BIALU (s, OP_ADDCC, state->reg1, state->left->reg1, state->right->reg1);
        MONO_EMIT_BIALU (s, tree, OP_ADC, state->reg2, state->left->reg2, state->right->reg2);
 }
 
 lreg: OP_LADD_OVF (lreg, lreg) {
        /* ADC sets the condition code */
-       MONO_EMIT_NEW_BIALU (s, CEE_ADD, state->reg1, state->left->reg1, state->right->reg1);
+       MONO_EMIT_NEW_BIALU (s, OP_ADDCC, state->reg1, state->left->reg1, state->right->reg1);
        MONO_EMIT_NEW_BIALU (s, OP_ADC, state->reg2, state->left->reg2, state->right->reg2);
        MONO_EMIT_NEW_COND_EXC (s, OV, "OverflowException");
 }
 
 lreg: OP_LADD_OVF_UN (lreg, lreg) {
        /* ADC sets the condition code */
-       MONO_EMIT_NEW_BIALU (s, CEE_ADD, state->reg1, state->left->reg1, state->right->reg1);
+       MONO_EMIT_NEW_BIALU (s, OP_ADDCC, state->reg1, state->left->reg1, state->right->reg1);
        MONO_EMIT_NEW_BIALU (s, OP_ADC, state->reg2, state->left->reg2, state->right->reg2);
        MONO_EMIT_NEW_COND_EXC (s, C, "OverflowException");
 }
@@ -100,7 +103,7 @@ lreg: OP_LADD (lreg, i8con) {
 }
 
 lreg: OP_LSUB (lreg, lreg) {
-       MONO_EMIT_NEW_BIALU (s, CEE_SUB, state->reg1, state->left->reg1, state->right->reg1);
+       MONO_EMIT_NEW_BIALU (s, OP_SUBCC, state->reg1, state->left->reg1, state->right->reg1);
        MONO_EMIT_BIALU (s, tree, OP_SBB, state->reg2, state->left->reg2, state->right->reg2);
 }
 
@@ -111,7 +114,7 @@ lreg: OP_LSUB (lreg, i8con) {
 
 lreg: OP_LSUB_OVF (lreg, lreg) {
        /* SBB sets the condition code */
-       MONO_EMIT_NEW_BIALU (s, CEE_SUB, state->reg1, state->left->reg1, state->right->reg1);
+       MONO_EMIT_NEW_BIALU (s, OP_SUBCC, state->reg1, state->left->reg1, state->right->reg1);
        MONO_EMIT_NEW_BIALU (s, OP_SBB, state->reg2, state->left->reg2, state->right->reg2);
        MONO_EMIT_NEW_COND_EXC (s, OV, "OverflowException");
 }
@@ -474,6 +477,23 @@ lreg: CEE_CONV_OVF_U8 (reg) {
        MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, state->left->reg1);
 }
 
+lreg: CEE_CONV_OVF_I8 (reg) {
+       /* a signed 32 bit num always fits in a signed 64 bit one */
+       MONO_EMIT_NEW_ICONST (s, state->reg2, 0);
+       MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, state->left->reg1);
+}
+
+lreg: CEE_CONV_OVF_I8_UN (reg) {
+       /* an unsigned 32 bit num always fits in a signed 64 bit one */
+       MONO_EMIT_NEW_ICONST (s, state->reg2, 0);
+       MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, state->left->reg1);
+}
+
+lreg: CEE_CONV_OVF_U8_UN (reg) {
+       MONO_EMIT_NEW_ICONST (s, state->reg2, 0);
+       MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, state->left->reg1);
+}
+
 freg: OP_LCONV_TO_R_UN (lreg) {
        MONO_EMIT_BIALU (s, tree, tree->opcode, state->reg1, state->left->reg1, state->left->reg2);
 }
@@ -498,6 +518,16 @@ reg: OP_LCONV_TO_U4 (lreg) {
        MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, state->left->reg1);
 }
 
+lreg: OP_LCONV_TO_U8 (lreg) {
+       MONO_EMIT_NEW_UNALU (s, OP_MOVE, state->reg1, state->left->reg1);
+       MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg2, state->left->reg2);
+}
+
+lreg: OP_LCONV_TO_I8 (lreg) {
+       MONO_EMIT_NEW_UNALU (s, OP_MOVE, state->reg1, state->left->reg1);
+       MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg2, state->left->reg2);
+}
+
 reg: OP_LCONV_TO_U (lreg) {
        MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, state->left->reg1);
 }
@@ -603,4 +633,20 @@ reg: OP_LCONV_TO_OVF_I4 (lreg) {
        mono_bblock_add_inst (s->cbb, tree);
 }
 
+lreg: OP_LCONV_TO_OVF_I8_UN (lreg) {
+       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg2, 0);
+       MONO_EMIT_NEW_COND_EXC (s, LT, "OverflowException");
+
+       MONO_EMIT_NEW_UNALU (s, OP_MOVE, state->reg1, state->left->reg1);
+       MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg2, state->left->reg2);
+}
+
+lreg: OP_LCONV_TO_OVF_U8 (lreg) {
+       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg2, 0);
+       MONO_EMIT_NEW_COND_EXC (s, LT, "OverflowException");
+
+       MONO_EMIT_NEW_UNALU (s, OP_MOVE, state->reg1, state->left->reg1);
+       MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg2, state->left->reg2);
+}
+
 %%