if (mini_type_var_is_vt (cfg, type))
return OP_VMOVE;
else
- return OP_MOVE;
+ return mono_type_to_regmove (cfg, mini_get_underlying_type (cfg, type));
default:
g_error ("unknown type 0x%02x in type_to_regstore", type->type);
}
g_assert (cfg->gsharedvt);
inst->type = STACK_VTYPE;
} else {
- inst->type = STACK_OBJ;
+ type_to_eval_stack_type (cfg, mini_get_underlying_type (cfg, type), inst);
}
return;
default:
return 1;
continue;
}
- simple_type = sig->params [i];
- simple_type = mini_get_basic_type_from_generic (cfg->generic_sharing_context, simple_type);
+ simple_type = mini_get_underlying_type (cfg, sig->params [i]);
handle_enum:
switch (simple_type->type) {
case MONO_TYPE_VOID:
ins->sreg3 = is_float ? f2i_cmp->dreg : args [2]->dreg;
MONO_ADD_INS (cfg->cbb, ins);
- switch (fsig->params [0]->type) {
+ switch (fsig->params [1]->type) {
case MONO_TYPE_I4:
ins->type = STACK_I4;
break;
ins->type = STACK_R8;
break;
default:
- g_assert (mini_type_is_reference (cfg, fsig->params [0]));
+ g_assert (mini_type_is_reference (cfg, fsig->params [1]));
ins->type = STACK_OBJ;
break;
}
gboolean
mini_type_is_reference (MonoCompile *cfg, MonoType *type)
{
- if (mono_type_is_reference (type))
- return TRUE;
- if (!cfg->generic_sharing_context)
- return FALSE;
- /*FIXME the probably needs better handle under partial sharing*/
- return ((type->type == MONO_TYPE_VAR || type->type == MONO_TYPE_MVAR) && !mini_type_var_is_vt (cfg, type));
+ if (cfg->generic_sharing_context)
+ type = mini_get_underlying_type (cfg, type);
+ return mono_type_is_reference (type);
}
/*