Don't run test-318 with gmcs.
[mono.git] / mono / mini / inssel-long32.brg
index b456e3c28ebcceafae72ae205989395835ba79d7..404ce75e6f36091ccd75038de70e57a07994c7df 100644 (file)
@@ -285,7 +285,7 @@ lreg: OP_LADD_OVF_UN (lreg, lreg) {
 }
 
 lreg: OP_LADD (lreg, i8con) {
-       MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, state->reg1, state->left->reg1, state->right->tree->inst_ls_word);
+       MONO_EMIT_NEW_BIALU_IMM (s, OP_ADDCC_IMM, state->reg1, state->left->reg1, state->right->tree->inst_ls_word);
        MONO_EMIT_BIALU_IMM (s, tree, OP_ADC_IMM, state->reg2, state->left->reg2, state->right->tree->inst_ms_word);
 }
 
@@ -295,7 +295,7 @@ lreg: OP_LSUB (lreg, lreg) {
 }
 
 lreg: OP_LSUB (lreg, i8con) {
-       MONO_EMIT_NEW_BIALU_IMM (s, OP_SUB_IMM, state->reg1, state->left->reg1, state->right->tree->inst_ls_word);
+       MONO_EMIT_NEW_BIALU_IMM (s, OP_SUBCC_IMM, state->reg1, state->left->reg1, state->right->tree->inst_ls_word);
        MONO_EMIT_BIALU_IMM (s, tree, OP_SBB_IMM, state->reg2, state->left->reg2, state->right->tree->inst_ms_word);
 }
 
@@ -749,15 +749,30 @@ reg: OP_LCONV_TO_OVF_I1_UN (lreg) {
 }
 
 reg: OP_LCONV_TO_OVF_I1 (lreg) {
+       MonoInst *is_negative, *end_label;
+
+       MONO_NEW_LABEL (s, is_negative);
+       MONO_NEW_LABEL (s, end_label);
+
        MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg2, 0);
        MONO_EMIT_NEW_COND_EXC (s, GT, "OverflowException");
        MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg2, -1);
        MONO_EMIT_NEW_COND_EXC (s, LT, "OverflowException");
 
+       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg2, 0);
+       MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BLT, is_negative);
+
+       /* Positive */
        MONO_EMIT_NEW_COMPARE_IMM (s, state->left->reg1, 127);
-       MONO_EMIT_NEW_COND_EXC (s, GT, "OverflowException");
+       MONO_EMIT_NEW_COND_EXC (s, GT_UN, "OverflowException");
+       MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BR, end_label);
+
+       /* Negative */
+       mono_bblock_add_inst (s->cbb, is_negative);
        MONO_EMIT_NEW_COMPARE_IMM (s, state->left->reg1, -128);
-       MONO_EMIT_NEW_COND_EXC (s, LT, "OverflowException");
+       MONO_EMIT_NEW_COND_EXC (s, LT_UN, "OverflowException");
+       mono_bblock_add_inst (s->cbb, end_label);
+
        MONO_EMIT_UNALU (s, tree, CEE_CONV_I1, state->reg1, state->left->reg1);
 }
 
@@ -773,16 +788,30 @@ reg: OP_LCONV_TO_OVF_U1 (lreg) {
 }
 
 reg: OP_LCONV_TO_OVF_I2 (lreg) {
+       MonoInst *is_negative, *end_label;
+
+       MONO_NEW_LABEL (s, is_negative);
+       MONO_NEW_LABEL (s, end_label);
+
        MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg2, 0);
        MONO_EMIT_NEW_COND_EXC (s, GT, "OverflowException");
        MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg2, -1);
        MONO_EMIT_NEW_COND_EXC (s, LT, "OverflowException");
 
-       /* Probe value to be within -32768 and 32767 */
+       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->left->reg2, 0);
+       MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BLT, is_negative);
+
+       /* Positive */
        MONO_EMIT_NEW_COMPARE_IMM (s, state->left->reg1, 32767);
-       MONO_EMIT_NEW_COND_EXC (s, GT, "OverflowException");
+       MONO_EMIT_NEW_COND_EXC (s, GT_UN, "OverflowException");
+       MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BR, end_label);
+
+       /* Negative */
+       mono_bblock_add_inst (s->cbb, is_negative);
        MONO_EMIT_NEW_COMPARE_IMM (s, state->left->reg1, -32768);
-       MONO_EMIT_NEW_COND_EXC (s, LT, "OverflowException");
+       MONO_EMIT_NEW_COND_EXC (s, LT_UN, "OverflowException");
+       mono_bblock_add_inst (s->cbb, end_label);
+
        MONO_EMIT_UNALU (s, tree, CEE_CONV_I2, state->reg1, state->left->reg1);
 }