* simple-cee-ops.h, simple-mini-ops.h: Fixed bug 78656.
[mono.git] / mono / mini / inssel-long32.brg
index 404ce75e6f36091ccd75038de70e57a07994c7df..7d6d03c7853dbda581c3f655bdb7b3fe2d4798fd 100644 (file)
@@ -625,32 +625,19 @@ lreg: CEE_CONV_I8 (OP_ICONST) {
 }
 
 lreg: CEE_CONV_I8 (reg) {
-       MonoInst *is_negative, *end_label;
        int tmpreg = mono_regstate_next_int (s->rs);
        
-       MONO_NEW_LABEL (s, is_negative);
-       MONO_NEW_LABEL (s, end_label);
-
        /* branchless code:
         * low = reg;
         * tmp = low > -1 ? 1: 0;
         * high = tmp - 1; if low is zero or pos high becomes 0, else -1
-        * not sure why it doesn't work in practice
         */
        MONO_EMIT_NEW_UNALU (s, OP_MOVE, state->reg1, state->left->reg1);
-       /*MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->reg1, -1);
+       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->reg1, -1);
        tree->dreg = tmpreg;
        tree->opcode = OP_CGT;
        mono_bblock_add_inst (s->cbb, tree);
-       MONO_EMIT_NEW_BIALU_IMM (s, OP_SUB_IMM, state->reg2, tmpreg, -1);*/
-       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, state->reg1, 0);
-       MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BLT, is_negative);
-       MONO_EMIT_NEW_ICONST (s, tmpreg, 0);
-       MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BR, end_label);
-       mono_bblock_add_inst (s->cbb, is_negative);
-       MONO_EMIT_NEW_ICONST (s, tmpreg, -1);
-       mono_bblock_add_inst (s->cbb, end_label);
-       MONO_EMIT_NEW_UNALU (s, OP_MOVE, state->reg2, tmpreg);
+       MONO_EMIT_NEW_BIALU_IMM (s, OP_SUB_IMM, state->reg2, tmpreg, 1);
 }
 
 lreg: CEE_CONV_U8 (reg) {