NaCl amd64 codegen fixes
[mono.git] / mono / mini / decompose.c
index 5398896b18365dd1ec42e03f947df14c29889b35..93a2535a479dcc40f4deaac7d4cca9e5b334edf9 100644 (file)
@@ -31,8 +31,7 @@ decompose_long_opcode (MonoCompile *cfg, MonoInst *ins, MonoInst **repl_ins)
 
        switch (ins->opcode) {
        case OP_LCONV_TO_I4:
-               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_LSHR_IMM, ins->dreg, ins->sreg1, 0);
-               NULLIFY_INS (ins);
+               ins->opcode = OP_SEXT_I4;
                break;
        case OP_LCONV_TO_I8:
        case OP_LCONV_TO_I:
@@ -327,7 +326,7 @@ mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins)
                break;
        case OP_ICONV_TO_OVF_U4:
        case OP_ICONV_TO_OVF_I4_UN:
-#if SIZEOF_REGISTER == 4
+#if SIZEOF_VOID_P == 4
        case OP_ICONV_TO_OVF_U:
        case OP_ICONV_TO_OVF_I_UN:
 #endif
@@ -340,21 +339,21 @@ mono_decompose_opcode (MonoCompile *cfg, MonoInst *ins)
        case OP_ICONV_TO_U4:
        case OP_ICONV_TO_OVF_I4:
        case OP_ICONV_TO_OVF_U4_UN:
-#if SIZEOF_REGISTER == 4
+#if SIZEOF_VOID_P == 4
        case OP_ICONV_TO_OVF_I:
        case OP_ICONV_TO_OVF_U_UN:
 #endif
                ins->opcode = OP_MOVE;
                break;
        case OP_ICONV_TO_I:
-#if SIZEOF_REGISTER == 8
+#if SIZEOF_VOID_P == 8
                ins->opcode = OP_SEXT_I4;
 #else
                ins->opcode = OP_MOVE;
 #endif
                break;
        case OP_ICONV_TO_U:
-#if SIZEOF_REGISTER == 8
+#if SIZEOF_VOID_P == 8
                ins->opcode = OP_ZEXT_I4;
 #else
                ins->opcode = OP_MOVE;
@@ -1219,9 +1218,13 @@ mono_decompose_vtype_opts (MonoCompile *cfg)
                                                case 2:
                                                        MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI2_MEMBASE_REG, dest->dreg, 0, call2->inst.dreg);
                                                        break;
+                                               case 3:
                                                case 4:
                                                        MONO_EMIT_NEW_STORE_MEMBASE (cfg, OP_STOREI4_MEMBASE_REG, dest->dreg, 0, call2->inst.dreg);
                                                        break;
+                                               case 5:
+                                               case 6:
+                                               case 7:
                                                case 8:
 #if SIZEOF_REGISTER == 4
                                                        /*