OpCode GetLoadRefParamCode(IType tag)
{
if (tag.IsValueType)
{
if (tag.IsEnum)
{
tag = TypeSystemServices.Map(GetEnumUnderlyingType(tag));
}
if (TypeSystemServices.IntType == tag)
{
return OpCodes.Ldind_I4;
}
if (IsLong(tag) ||
TypeSystemServices.ULongType == tag)
{
return OpCodes.Ldind_I8;
}
if (TypeSystemServices.ByteType == tag)
{
return OpCodes.Ldind_U1;
}
if (TypeSystemServices.ShortType == tag ||
TypeSystemServices.CharType == tag)
{
return OpCodes.Ldind_I2;
}
if (TypeSystemServices.SingleType == tag)
{
return OpCodes.Ldind_R4;
}
if (TypeSystemServices.DoubleType == tag)
{
return OpCodes.Ldind_R8;
}
if (TypeSystemServices.UShortType == tag)
{
return OpCodes.Ldind_U2;
}
if (TypeSystemServices.UIntType == tag)
{
return OpCodes.Ldind_U4;
}
return OpCodes.Ldobj;
}
return OpCodes.Ldind_Ref;
}