if (rs->next_vreg > rs->vassign_size) {
g_free (rs->vassign);
rs->vassign_size = MAX (rs->next_vreg, 256);
- rs->vassign = g_malloc (rs->vassign_size * sizeof (gint32));
+ rs->vassign = (gint32 *)g_malloc (rs->vassign_size * sizeof (gint32));
}
memset (rs->isymbolic, 0, MONO_MAX_IREGS * sizeof (rs->isymbolic [0]));
g_assert (bank < MONO_NUM_REGBANKS);
- new_info = mono_mempool_alloc0 (cfg->mempool, sizeof (MonoSpillInfo) * new_len);
+ new_info = (MonoSpillInfo *)mono_mempool_alloc0 (cfg->mempool, sizeof (MonoSpillInfo) * new_len);
if (orig_info)
memcpy (new_info, orig_info, sizeof (MonoSpillInfo) * orig_len);
for (i = orig_len; i < new_len; ++i)
#undef PATCH_INFO
};
+const char*
+mono_ji_type_to_string (MonoJumpInfoType type)
+{
+ return patch_info_str [type];
+}
+
void
mono_print_ji (const MonoJumpInfo *ji)
{
g_free (s);
break;
}
+ case MONO_PATCH_INFO_INTERNAL_METHOD: {
+ printf ("[INTERNAL_METHOD - %s]", ji->data.name);
+ break;
+ }
default:
printf ("[%s]", patch_info_str [ji->type]);
break;
list = g_slist_next (list);
}
+ list = call->out_freg_args;
+ while (list) {
+ guint32 regpair;
+ int reg, hreg;
+
+ regpair = (guint32)(gssize)(list->data);
+ hreg = regpair >> 24;
+ reg = regpair & 0xffffff;
+
+ printf (" [%s <- R%d]", mono_arch_fregname (hreg), reg);
+
+ list = g_slist_next (list);
+ }
break;
}
case OP_BR:
break;
case OP_IL_SEQ_POINT:
case OP_SEQ_POINT:
- printf (" il: %x", (int)ins->inst_imm);
+ printf (" il: 0x%x%s", (int)ins->inst_imm, ins->flags & MONO_INST_NONEMPTY_STACK ? ", nonempty-stack" : "");
break;
default:
break;
}
#else
+const char*
+mono_ji_type_to_string (MonoJumpInfoType type)
+{
+ return "";
+}
+
void
mono_print_ji (const MonoJumpInfo *ji)
{
if (cfg->reginfo && cfg->reginfo_len < max)
cfg->reginfo = NULL;
- reginfo = cfg->reginfo;
+ reginfo = (RegTrack *)cfg->reginfo;
if (!reginfo) {
cfg->reginfo_len = MAX (1024, max * 2);
- reginfo = cfg->reginfo = mono_mempool_alloc (cfg->mempool, sizeof (RegTrack) * cfg->reginfo_len);
+ reginfo = (RegTrack *)mono_mempool_alloc (cfg->mempool, sizeof (RegTrack) * cfg->reginfo_len);
+ cfg->reginfo = reginfo;
}
else
g_assert (cfg->reginfo_len >= rs->next_vreg);
default:
printf ("%s\n", mono_inst_name (opcode));
g_assert_not_reached ();
- return 0;
+ return (CompRelation)0;
}
}
}
} else {
g_error ("Unknown opcode '%s' in opcode_to_type", mono_inst_name (opcode));
- return 0;
+ return (CompType)0;
}
}
gboolean
mono_is_regsize_var (MonoType *t)
{
- t = mini_type_get_underlying_type (NULL, t);
+ t = mini_get_underlying_type (t);
switch (t->type) {
case MONO_TYPE_I1:
case MONO_TYPE_U1:
return FALSE;
prev_ftype = ftype;
nfields += nested_nfields;
- // FIXME: Nested float structs are aligned to 8 bytes
- if (ftype->type == MONO_TYPE_R4)
- return FALSE;
} else {
if (!(!ftype->byref && (ftype->type == MONO_TYPE_R4 || ftype->type == MONO_TYPE_R8)))
return FALSE;
nfields ++;
}
}
- if (nfields == 0 || nfields > 4)
+ if (nfields == 0)
return FALSE;
*out_nfields = nfields;
*out_esize = prev_ftype->type == MONO_TYPE_R4 ? 4 : 8;
return TRUE;
}
+MonoRegState*
+mono_regstate_new (void)
+{
+ MonoRegState* rs = g_new0 (MonoRegState, 1);
+
+ rs->next_vreg = MAX (MONO_MAX_IREGS, MONO_MAX_FREGS);
+#ifdef MONO_ARCH_NEED_SIMD_BANK
+ rs->next_vreg = MAX (rs->next_vreg, MONO_MAX_XREGS);
+#endif
+
+ return rs;
+}
+
+void
+mono_regstate_free (MonoRegState *rs) {
+ g_free (rs->vassign);
+ g_free (rs);
+}
+
#endif /* DISABLE_JIT */