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 - Mono-patches@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-patches