Author: zoltan
Date: 2007-12-14 09:36:35 -0500 (Fri, 14 Dec 2007)
New Revision: 91288

Modified:
   branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog
   branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c
   branches/vargaz/mini-linear-il/mono/mono/mini/mini-amd64.c
   branches/vargaz/mini-linear-il/mono/mono/mini/mini-ia64.c
   branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h
   branches/vargaz/mini-linear-il/mono/mono/mini/mini-sparc.c
   branches/vargaz/mini-linear-il/mono/mono/mini/mini-x86.c
   branches/vargaz/mini-linear-il/mono/mono/mini/mini.h
Log:
2007-12-14  Zoltan Varga  <[EMAIL PROTECTED]>

        * mini-<ARCH>.c: Add a 'src' argument to mono_arch_emit_outarg_vt () to 
remove
        some duplicated code.


Modified: branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog     2007-12-14 
14:36:00 UTC (rev 91287)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog     2007-12-14 
14:36:35 UTC (rev 91288)
@@ -1,3 +1,8 @@
+2007-12-14  Zoltan Varga  <[EMAIL PROTECTED]>
+
+       * mini-<ARCH>.c: Add a 'src' argument to mono_arch_emit_outarg_vt () to 
remove
+       some duplicated code.
+
 2007-12-12  Zoltan Varga  <[EMAIL PROTECTED]>
 
        * method-to-ir.c (decompose_opcode): Handle OP_FCONV_TO_R8 here.

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c        
2007-12-14 14:36:00 UTC (rev 91287)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c        
2007-12-14 14:36:35 UTC (rev 91288)
@@ -5790,8 +5790,13 @@
                                case OP_OUTARG_VT: {
                                        g_assert (ins->klass);
 
-                                       mono_arch_emit_outarg_vt (cfg, ins);
+                                       src_var = get_vreg_to_inst (cfg, 
ins->sreg1);
+                                       if (!src_var)
+                                               src_var = 
mono_compile_create_var_for_vreg (cfg, &ins->klass->byval_arg, OP_LOCAL, 
ins->sreg1);
+                                       EMIT_NEW_VARLOADA (cfg, src, src_var, 
src_var->inst_vtype);
 
+                                       mono_arch_emit_outarg_vt (cfg, ins, 
src);
+
                                        /* This might be decomposed into other 
vtype opcodes */
                                        restart = TRUE;
                                        break;

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini-amd64.c
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini-amd64.c  2007-12-14 
14:36:00 UTC (rev 91287)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini-amd64.c  2007-12-14 
14:36:35 UTC (rev 91288)
@@ -1517,19 +1517,6 @@
        return call;
 }
 
-/* FIXME: Remove these later */
-#define NEW_VARLOADA(cfg,dest,var,vartype) do {        \
-        MONO_INST_NEW ((cfg), (dest), OP_LDADDR); \
-               (dest)->ssa_op = MONO_SSA_ADDRESS_TAKEN;        \
-               (dest)->inst_p0 = (var); \
-               (var)->flags |= MONO_INST_INDIRECT;     \
-               (dest)->type = STACK_MP;        \
-               (dest)->klass = (var)->klass;   \
-        (dest)->dreg = mono_alloc_dreg ((cfg), STACK_MP); \
-       } while (0)
-
-#define EMIT_NEW_VARLOADA(cfg,dest,var,vartype) do { NEW_VARLOADA ((cfg), 
(dest), (var), (vartype)); MONO_ADD_INS ((cfg)->cbb, (dest)); } while (0)
-
 static void
 emit_sig_cookie2 (MonoCompile *cfg, MonoCallInst *call, CallInfo *cinfo)
 {
@@ -1697,21 +1684,13 @@
 }
 
 void
-mono_arch_emit_outarg_vt (MonoCompile *cfg, MonoInst *ins)
+mono_arch_emit_outarg_vt (MonoCompile *cfg, MonoInst *ins, MonoInst *src)
 {
-       MonoInst *src_var = get_vreg_to_inst (cfg, ins->sreg1);
-       MonoInst *src, *arg;
+       MonoInst *arg;
        MonoCallInst *call = (MonoCallInst*)ins->inst_p0;
        ArgInfo *ainfo = (ArgInfo*)ins->inst_p1;
        int size = ins->backend.size;
 
-       g_assert (ins->klass);
-
-       if (!src_var)
-               src_var = mono_compile_create_var_for_vreg (cfg, 
&ins->klass->byval_arg, OP_LOCAL, ins->sreg1);
-
-       EMIT_NEW_VARLOADA ((cfg), (src), src_var, src_var->inst_vtype);
-
        if (ainfo->storage == ArgValuetypeInReg) {
                MonoInst *load, *arg;
                int part;
@@ -1741,13 +1720,9 @@
                        add_outarg_reg2 (cfg, call, arg, ainfo->pair_storage 
[part], ainfo->pair_regs [part], load);
                }
        } else {
-               MONO_INST_NEW (cfg, arg, OP_NOP);
-
-               EMIT_NEW_VARLOADA ((cfg), (src), src_var, src_var->inst_vtype);
-
                if (size == 8) {
                        /* Can't use this for < 8 since it does an 8 byte 
memory load */
-                       arg->opcode = OP_X86_PUSH_MEMBASE;
+                       MONO_INST_NEW (cfg, arg, OP_X86_PUSH_MEMBASE);
                        arg->inst_basereg = src->dreg;
                        arg->inst_offset = 0;
                        MONO_ADD_INS (cfg->cbb, arg);
@@ -1755,7 +1730,7 @@
                        MONO_EMIT_NEW_BIALU_IMM (cfg, OP_SUB_IMM, X86_ESP, 
X86_ESP, ALIGN_TO (size, 8));
                        mini_emit_memcpy2 (cfg, X86_ESP, 0, src->dreg, 0, size, 
0);
                } else {
-                       arg->opcode = OP_X86_PUSH_OBJ;
+                       MONO_INST_NEW (cfg, arg, OP_X86_PUSH_OBJ);
                        arg->inst_basereg = src->dreg;
                        arg->inst_offset = 0;
                        arg->inst_imm = size;

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini-ia64.c
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini-ia64.c   2007-12-14 
14:36:00 UTC (rev 91287)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini-ia64.c   2007-12-14 
14:36:35 UTC (rev 91288)
@@ -1453,35 +1453,13 @@
        cfg->arch.n_out_regs = MAX (cfg->arch.n_out_regs, cinfo->reg_usage);
 }
 
-/* FIXME: Remove these later */
-#define NEW_VARLOADA(cfg,dest,var,vartype) do {        \
-        MONO_INST_NEW ((cfg), (dest), OP_LDADDR); \
-               (dest)->ssa_op = MONO_SSA_ADDRESS_TAKEN;        \
-               (dest)->inst_p0 = (var); \
-               (var)->flags |= MONO_INST_INDIRECT;     \
-               (dest)->type = STACK_MP;        \
-               (dest)->klass = (var)->klass;   \
-        (dest)->dreg = mono_alloc_dreg ((cfg), STACK_MP); \
-       } while (0)
-
-#define EMIT_NEW_VARLOADA(cfg,dest,var,vartype) do { NEW_VARLOADA ((cfg), 
(dest), (var), (vartype)); MONO_ADD_INS ((cfg)->cbb, (dest)); } while (0)
-
 void
-mono_arch_emit_outarg_vt (MonoCompile *cfg, MonoInst *ins)
+mono_arch_emit_outarg_vt (MonoCompile *cfg, MonoInst *ins, MonoInst *src)
 {
-       MonoInst *src_var = get_vreg_to_inst (cfg, ins->sreg1);
-       MonoInst *src;
        MonoCallInst *call = (MonoCallInst*)ins->inst_p0;
        ArgInfo *ainfo = (ArgInfo*)ins->inst_p1;
        int size = ins->backend.size;
 
-       g_assert (ins->klass);
-
-       if (!src_var)
-               src_var = mono_compile_create_var_for_vreg (cfg, 
&ins->klass->byval_arg, OP_LOCAL, ins->sreg1);
-
-       EMIT_NEW_VARLOADA ((cfg), (src), src_var, src_var->inst_vtype);
-
        if (ainfo->storage == ArgAggregate) {
                MonoInst *load, *store;
                int i, slot;

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h    2007-12-14 
14:36:00 UTC (rev 91287)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h    2007-12-14 
14:36:35 UTC (rev 91288)
@@ -76,6 +76,7 @@
 MINI_OP(OP_REGOFFSET,  "regoffset", NONE, NONE, NONE)
 MINI_OP(OP_VTARG_ADDR, "vtarg_addr", NONE, NONE, NONE)
 MINI_OP(OP_LABEL,      "label", NONE, NONE, NONE)
+MINI_OP(OP_SWITCH,  "switch", NONE, IREG, NONE)
 MINI_OP(OP_CHECK_ARRAY_TYPE,   "check_array_type", NONE, NONE, NONE)
 MINI_OP(OP_ARRAY_RANK, "array_rank", NONE, NONE, NONE)
 MINI_OP(OP_THROW, "throw", NONE, IREG, NONE)

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini-sparc.c
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini-sparc.c  2007-12-14 
14:36:00 UTC (rev 91287)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini-sparc.c  2007-12-14 
14:36:35 UTC (rev 91288)
@@ -1575,34 +1575,12 @@
        g_free (cinfo);
 }
 
-/* FIXME: Remove these later */
-#define NEW_VARLOADA(cfg,dest,var,vartype) do {        \
-        MONO_INST_NEW ((cfg), (dest), OP_LDADDR); \
-               (dest)->ssa_op = MONO_SSA_ADDRESS_TAKEN;        \
-               (dest)->inst_p0 = (var); \
-               (var)->flags |= MONO_INST_INDIRECT;     \
-               (dest)->type = STACK_MP;        \
-               (dest)->klass = (var)->klass;   \
-        (dest)->dreg = mono_alloc_dreg ((cfg), STACK_MP); \
-       } while (0)
-
-#define EMIT_NEW_VARLOADA(cfg,dest,var,vartype) do { NEW_VARLOADA ((cfg), 
(dest), (var), (vartype)); MONO_ADD_INS ((cfg)->cbb, (dest)); } while (0)
-
 void
-mono_arch_emit_outarg_vt (MonoCompile *cfg, MonoInst *ins)
+mono_arch_emit_outarg_vt (MonoCompile *cfg, MonoInst *ins, MonoInst *src)
 {
-       MonoInst *src_var = get_vreg_to_inst (cfg, ins->sreg1);
-       MonoInst *src;
        ArgInfo *ainfo = (ArgInfo*)ins->inst_p1;
        int size = ins->backend.size;
 
-       g_assert (ins->klass);
-
-       if (!src_var)
-               src_var = mono_compile_create_var_for_vreg (cfg, 
&ins->klass->byval_arg, OP_LOCAL, ins->sreg1);
-
-       EMIT_NEW_VARLOADA ((cfg), (src), src_var, src_var->inst_vtype);
-
        mini_emit_memcpy2 (cfg, sparc_sp, ainfo->offset, src->dreg, 0, size, 0);
 }
 

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini-x86.c
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini-x86.c    2007-12-14 
14:36:00 UTC (rev 91287)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini-x86.c    2007-12-14 
14:36:35 UTC (rev 91288)
@@ -1144,19 +1144,6 @@
        return call;
 }
 
-/* FIXME: Remove these later */
-#define NEW_VARLOADA(cfg,dest,var,vartype) do {        \
-        MONO_INST_NEW ((cfg), (dest), OP_LDADDR); \
-               (dest)->ssa_op = MONO_SSA_ADDRESS_TAKEN;        \
-               (dest)->inst_p0 = (var); \
-               (var)->flags |= MONO_INST_INDIRECT;     \
-               (dest)->type = STACK_MP;        \
-               (dest)->klass = (var)->klass;   \
-        (dest)->dreg = mono_alloc_dreg ((cfg), STACK_MP); \
-       } while (0)
-
-#define EMIT_NEW_VARLOADA(cfg,dest,var,vartype) do { NEW_VARLOADA ((cfg), 
(dest), (var), (vartype)); MONO_ADD_INS ((cfg)->cbb, (dest)); } while (0)
-
 static void
 emit_sig_cookie2 (MonoCompile *cfg, MonoCallInst *call, CallInfo *cinfo)
 {
@@ -1353,24 +1340,13 @@
 }
 
 void
-mono_arch_emit_outarg_vt (MonoCompile *cfg, MonoInst *ins)
+mono_arch_emit_outarg_vt (MonoCompile *cfg, MonoInst *ins, MonoInst *src)
 {
-       MonoInst *src_var = get_vreg_to_inst (cfg, ins->sreg1);
-       MonoInst *src;
        MonoInst *arg;
        int size = ins->backend.size;
 
-       g_assert (ins->klass);
-
-       if (!src_var)
-               src_var = mono_compile_create_var_for_vreg (cfg, 
&ins->klass->byval_arg, OP_LOCAL, ins->sreg1);
-
-       EMIT_NEW_VARLOADA ((cfg), (src), src_var, src_var->inst_vtype);
-
-       MONO_INST_NEW (cfg, arg, OP_NOP);
-
        if (size <= 4) {
-               arg->opcode = OP_X86_PUSH_MEMBASE;
+               MONO_INST_NEW (cfg, arg, OP_X86_PUSH_MEMBASE);
                arg->sreg1 = src->dreg;
 
                MONO_ADD_INS (cfg->cbb, arg);
@@ -1378,7 +1354,7 @@
                MONO_EMIT_NEW_BIALU_IMM (cfg, OP_SUB_IMM, X86_ESP, X86_ESP, 
ALIGN_TO (size, 4));
                mini_emit_memcpy2 (cfg, X86_ESP, 0, src->dreg, 0, size, 0);
        } else {
-               arg->opcode = OP_X86_PUSH_OBJ;
+               MONO_INST_NEW (cfg, arg, OP_X86_PUSH_OBJ);
                arg->inst_basereg = src->dreg;
                arg->inst_offset = 0;
                arg->inst_imm = size;

Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini.h
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini.h        2007-12-14 
14:36:00 UTC (rev 91287)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini.h        2007-12-14 
14:36:35 UTC (rev 91288)
@@ -1169,7 +1169,7 @@
 void     *mono_arch_instrument_epilog           (MonoCompile *cfg, void *func, 
void *p, gboolean enable_arguments);
 MonoCallInst *mono_arch_call_opcode             (MonoCompile *cfg, 
MonoBasicBlock* bb, MonoCallInst *call, int is_virtual);
 void      mono_arch_emit_call                   (MonoCompile *cfg, 
MonoCallInst *call, gboolean is_virtual);
-void      mono_arch_emit_outarg_vt              (MonoCompile *cfg, MonoInst 
*ins);
+void      mono_arch_emit_outarg_vt              (MonoCompile *cfg, MonoInst 
*ins, MonoInst *src);
 void      mono_arch_emit_setret                 (MonoCompile *cfg, MonoMethod 
*method, MonoInst *val);
 MonoInst *mono_arch_get_inst_for_method         (MonoCompile *cfg, MonoMethod 
*cmethod, MonoMethodSignature *fsig, MonoInst **args);
 MonoInst *mono_arch_emit_inst_for_method       (MonoCompile *cfg, MonoMethod 
*cmethod, MonoMethodSignature *fsig, MonoInst **args);

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to