Author: zoltan
Date: 2008-02-17 11:46:54 -0500 (Sun, 17 Feb 2008)
New Revision: 95980
Modified:
trunk/mono/mono/mini/ChangeLog
trunk/mono/mono/mini/mini-sparc.c
trunk/mono/mono/mini/mini-sparc.h
Log:
2008-02-17 Zoltan Varga <[EMAIL PROTECTED]>
* mini-sparc.c: Use cfg->vret_addr instead of cfg->ret. Name the
MonoCompile
variables 'cfg' instead of 'm' for consistency.
Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog 2008-02-17 16:17:32 UTC (rev 95979)
+++ trunk/mono/mono/mini/ChangeLog 2008-02-17 16:46:54 UTC (rev 95980)
@@ -1,5 +1,8 @@
2008-02-17 Zoltan Varga <[EMAIL PROTECTED]>
+ * mini-sparc.c: Use cfg->vret_addr instead of cfg->ret. Name the
MonoCompile
+ variables 'cfg' instead of 'm' for consistency.
+
* mini-x86.c: Use cfg->vret_addr instead of cfg->ret.
* mini.h (MonoCompile): Add new 'vret_addr' field which represents the
hidden
Modified: trunk/mono/mono/mini/mini-sparc.c
===================================================================
--- trunk/mono/mono/mini/mini-sparc.c 2008-02-17 16:17:32 UTC (rev 95979)
+++ trunk/mono/mono/mini/mini-sparc.c 2008-02-17 16:46:54 UTC (rev 95980)
@@ -792,7 +792,7 @@
* The locals var stuff should most likely be split in another method.
*/
void
-mono_arch_allocate_vars (MonoCompile *m)
+mono_arch_allocate_vars (MonoCompile *cfg)
{
MonoMethodSignature *sig;
MonoMethodHeader *header;
@@ -800,34 +800,34 @@
int i, offset, size, align, curinst;
CallInfo *cinfo;
- header = mono_method_get_header (m->method);
+ header = mono_method_get_header (cfg->method);
- sig = mono_method_signature (m->method);
+ sig = mono_method_signature (cfg->method);
- cinfo = get_call_info (m, sig, FALSE);
+ cinfo = get_call_info (cfg, sig, FALSE);
if (sig->ret->type != MONO_TYPE_VOID) {
switch (cinfo->ret.storage) {
case ArgInIReg:
case ArgInFReg:
case ArgInIRegPair:
- m->ret->opcode = OP_REGVAR;
- m->ret->inst_c0 = cinfo->ret.reg;
+ cfg->ret->opcode = OP_REGVAR;
+ cfg->ret->inst_c0 = cinfo->ret.reg;
break;
case ArgOnStack:
#ifdef SPARCV9
g_assert_not_reached ();
#else
/* valuetypes */
- m->ret->opcode = OP_REGOFFSET;
- m->ret->inst_basereg = sparc_fp;
- m->ret->inst_offset = 64;
+ cfg->vret_addr->opcode = OP_REGOFFSET;
+ cfg->vret_addr->inst_basereg = sparc_fp;
+ cfg->vret_addr->inst_offset = 64;
#endif
break;
default:
NOT_IMPLEMENTED;
}
- m->ret->dreg = m->ret->inst_c0;
+ cfg->ret->dreg = cfg->ret->inst_c0;
}
/*
@@ -837,7 +837,7 @@
*/
/* Locals are allocated backwards from %fp */
- m->frame_reg = sparc_fp;
+ cfg->frame_reg = sparc_fp;
offset = 0;
/*
@@ -847,16 +847,16 @@
if (header->num_clauses)
offset += sizeof (gpointer) * 2;
- if (m->method->save_lmf) {
+ if (cfg->method->save_lmf) {
offset += sizeof (MonoLMF);
- m->arch.lmf_offset = offset;
+ cfg->arch.lmf_offset = offset;
}
- curinst = m->locals_start;
- for (i = curinst; i < m->num_varinfo; ++i) {
- inst = m->varinfo [i];
+ curinst = cfg->locals_start;
+ for (i = curinst; i < cfg->num_varinfo; ++i) {
+ inst = cfg->varinfo [i];
- if (inst->opcode == OP_REGVAR) {
+ if ((inst->opcode == OP_REGVAR) || (inst->opcode ==
OP_REGOFFSET)) {
//g_print ("allocating local %d to %s\n", i,
mono_arch_regname (inst->dreg));
continue;
}
@@ -869,7 +869,7 @@
if (inst->backend.is_pinvoke && MONO_TYPE_ISSTRUCT
(inst->inst_vtype) && inst->inst_vtype->type != MONO_TYPE_TYPEDBYREF)
size = mono_class_native_size
(inst->inst_vtype->data.klass, &align);
else
- size = mini_type_stack_size
(m->generic_sharing_context, inst->inst_vtype, &align);
+ size = mini_type_stack_size
(cfg->generic_sharing_context, inst->inst_vtype, &align);
/*
* This is needed since structures containing doubles must be
doubleword
@@ -895,11 +895,11 @@
}
if (sig->call_convention == MONO_CALL_VARARG) {
- m->sig_cookie = cinfo->sig_cookie.offset + ARGS_OFFSET;
+ cfg->sig_cookie = cinfo->sig_cookie.offset + ARGS_OFFSET;
}
for (i = 0; i < sig->param_count + sig->hasthis; ++i) {
- inst = m->args [i];
+ inst = cfg->args [i];
if (inst->opcode != OP_REGVAR) {
ArgInfo *ainfo = &cinfo->args [i];
gboolean inreg = TRUE;
@@ -986,7 +986,7 @@
* are destructively modified in a lot of
places in inssel.brg.
*/
MonoInst *indir;
- MONO_INST_NEW (m, indir, 0);
+ MONO_INST_NEW (cfg, indir, 0);
*indir = *inst;
inst->opcode = OP_SPARC_INARG_VT;
inst->inst_left = indir;
@@ -999,15 +999,31 @@
* by the ABI.
*/
- m->stack_offset = offset;
+ cfg->stack_offset = offset;
/* Add a properly aligned dword for use by int<->float conversion
opcodes */
- m->spill_count ++;
- mono_spillvar_offset_float (m, 0);
+ cfg->spill_count ++;
+ mono_spillvar_offset_float (cfg, 0);
g_free (cinfo);
}
+void
+mono_arch_create_vars (MonoCompile *cfg)
+{
+ MonoMethodSignature *sig;
+
+ sig = mono_method_signature (cfg->method);
+
+ if (MONO_TYPE_ISSTRUCT ((sig->ret))) {
+ cfg->vret_addr = mono_compile_create_var (cfg,
&mono_defaults.int_class->byval_arg, OP_ARG);
+ if (G_UNLIKELY (cfg->verbose_level > 1)) {
+ printf ("vret_addr = ");
+ mono_print_ins (cfg->vret_addr);
+ }
+ }
+}
+
static MonoInst *
make_group (MonoCompile *cfg, MonoInst *left, int basereg, int offset)
{
Modified: trunk/mono/mono/mini/mini-sparc.h
===================================================================
--- trunk/mono/mono/mini/mini-sparc.h 2008-02-17 16:17:32 UTC (rev 95979)
+++ trunk/mono/mono/mini/mini-sparc.h 2008-02-17 16:46:54 UTC (rev 95980)
@@ -127,6 +127,7 @@
#define MONO_ARCH_IMT_REG sparc_g1
#define MONO_ARCH_COMMON_VTABLE_TRAMPOLINE 1
#define MONO_ARCH_ENABLE_NORMALIZE_OPCODES 1
+#define MONO_ARCH_HAVE_CREATE_VARS 1
#ifdef SPARCV9
#define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches