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