2006-06-04 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / mini / inssel-long.brg
index 2acb981a9925854e0f59787582ac01bbf96d3467..d828f9952a5d83d234b6e3d55545fbce137ca780 100644 (file)
@@ -53,6 +53,19 @@ reg: OP_LADD (reg, reg) {
        MONO_EMIT_NEW_BIALU (s, CEE_ADD, state->reg1, state->left->reg1, state->right->reg1);
 }
 
+reg: OP_LADD (reg, OP_ICONST) {
+       MONO_EMIT_BIALU_IMM (s, tree, OP_ADD_IMM, state->reg1, state->left->reg1, state->right->tree->inst_c0);
+}
+
+reg: OP_LADD (reg, OP_ICONST) {
+       MONO_EMIT_BIALU_IMM (s, tree, OP_ADD_IMM, state->reg1, state->left->reg1, state->right->tree->inst_c0);
+}
+
+reg: OP_LADD (CEE_LDIND_I (OP_REGVAR), OP_ICONST),
+reg: OP_LADD (CEE_LDIND_REF (OP_REGVAR), OP_ICONST) {
+       MONO_EMIT_BIALU_IMM (s, tree, OP_ADD_IMM, state->reg1, state->left->left->tree->dreg, state->right->tree->inst_c0);
+}
+
 reg: OP_LSUB (reg, reg) {
        MONO_EMIT_NEW_BIALU (s, CEE_SUB, state->reg1, state->left->reg1, state->right->reg1);
 }
@@ -333,14 +346,14 @@ freg: OP_LCONV_TO_R_UN (lreg) {
 
 reg: CEE_CONV_OVF_I8 (reg) {
        /* Sign extend the value in the lower word into the upper word */
-       MONO_EMIT_BIALU_IMM (s, tree, OP_LSHR_IMM, state->reg1, state->left->reg1, 0);
+       MONO_EMIT_UNALU (s, tree, CEE_CONV_I8, state->reg1, state->left->reg1);
 }
 
 reg: CEE_CONV_OVF_I8_UN (reg),
 reg: CEE_CONV_OVF_U8_UN (reg) {
        /* an unsigned 32 bit num always fits in an (un)signed 64 bit one */
        /* Clean out the upper word */
-       MONO_EMIT_BIALU_IMM (s, tree, OP_ISHR_UN_IMM, state->reg1, state->left->reg1, 0);
+       MONO_EMIT_UNALU (s, tree, CEE_CONV_U8, state->reg1, state->left->reg1);
 }
 
 reg: CEE_CONV_OVF_U8 (reg) {
@@ -645,6 +658,18 @@ reg: CEE_REM_UN (reg, reg) {
 #      MONO_EMIT_BIALU_IMM (s, tree, OP_IREM_UN_IMM, state->reg1, state->left->reg1, state->right->tree->inst_c0);
 #}
 
+reg: OP_IMUL_IMM (reg) {
+       tree->sreg1 = state->left->reg1;
+       tree->dreg = state->reg1;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
+reg: OP_LMUL_IMM (reg) {
+       tree->sreg1 = state->left->reg1;
+       tree->dreg = state->reg1;
+       mono_bblock_add_inst (s->cbb, tree);
+}
+
 c32flags: OP_COMPARE (reg, reg) {
        tree->opcode = OP_ICOMPARE;
        tree->sreg1 = state->left->reg1;