151 |
to the start of the managed value on the stack */ |
to the start of the managed value on the stack */ |
152 |
if(ptrType == ILEngineType_MV) |
if(ptrType == ILEngineType_MV) |
153 |
{ |
{ |
154 |
ptrSize = GetTypeSize(objectType); |
ptrSize = GetTypeSize(_ILCoderToILCVMCoder(coder)->process, objectType); |
155 |
CVM_OUT_WIDE(COP_MADDR, ptrSize); |
CVM_OUT_WIDE(COP_MADDR, ptrSize); |
156 |
} |
} |
157 |
else |
else |
251 |
{ |
{ |
252 |
/* Access a value type */ |
/* Access a value type */ |
253 |
CVMLoadValueField(coder, offset, |
CVMLoadValueField(coder, offset, |
254 |
_ILSizeOfTypeLocked(fieldType), mayBeNull); |
_ILSizeOfTypeLocked(((ILCVMCoder *)coder)->process, |
255 |
|
fieldType), mayBeNull); |
256 |
} |
} |
257 |
else |
else |
258 |
{ |
{ |
265 |
to remove the managed value */ |
to remove the managed value */ |
266 |
if(ptrType == ILEngineType_MV) |
if(ptrType == ILEngineType_MV) |
267 |
{ |
{ |
268 |
fieldSize = GetStackTypeSize(fieldType); |
fieldSize = GetStackTypeSize(_ILCoderToILCVMCoder(coder)->process, |
269 |
|
fieldType); |
270 |
CVM_OUT_DWIDE(COP_SQUASH, fieldSize, ptrSize); |
CVM_OUT_DWIDE(COP_SQUASH, fieldSize, ptrSize); |
271 |
CVM_ADJUST(-((ILInt32)ptrSize)); |
CVM_ADJUST(-((ILInt32)ptrSize)); |
272 |
} |
} |
629 |
} |
} |
630 |
else if(ILType_IsValueType(fieldType)) |
else if(ILType_IsValueType(fieldType)) |
631 |
{ |
{ |
632 |
size = _ILSizeOfTypeLocked(fieldType); |
size = _ILSizeOfTypeLocked(_ILCoderToILCVMCoder(coder)->process, |
633 |
|
fieldType); |
634 |
CVM_OUT_WIDE(COP_MWRITE_R, size); |
CVM_OUT_WIDE(COP_MWRITE_R, size); |
635 |
} |
} |
636 |
else |
else |
780 |
else if(ILType_IsValueType(fieldType)) |
else if(ILType_IsValueType(fieldType)) |
781 |
{ |
{ |
782 |
/* Store a managed value */ |
/* Store a managed value */ |
783 |
size = _ILSizeOfTypeLocked(fieldType); |
size = _ILSizeOfTypeLocked(_ILCoderToILCVMCoder(coder)->process, |
784 |
|
fieldType); |
785 |
CVM_OUT_WIDE(COP_MWRITE, size); |
CVM_OUT_WIDE(COP_MWRITE, size); |
786 |
} |
} |
787 |
else |
else |
795 |
ILType *objectType, ILField *field, |
ILType *objectType, ILField *field, |
796 |
ILType *fieldType, ILEngineType valueType) |
ILType *fieldType, ILEngineType valueType) |
797 |
{ |
{ |
798 |
ILUInt32 valueSize = GetStackTypeSize(fieldType); |
ILUInt32 valueSize = GetStackTypeSize(((ILCVMCoder *)coder)->process, fieldType); |
799 |
|
|
800 |
#ifdef IL_NATIVE_INT64 |
#ifdef IL_NATIVE_INT64 |
801 |
/* Convert I4 to I if necessary */ |
/* Convert I4 to I if necessary */ |
815 |
static void CVMCoder_StoreStaticField(ILCoder *coder, ILField *field, |
static void CVMCoder_StoreStaticField(ILCoder *coder, ILField *field, |
816 |
ILType *fieldType, ILEngineType valueType) |
ILType *fieldType, ILEngineType valueType) |
817 |
{ |
{ |
818 |
ILUInt32 valueSize = GetStackTypeSize(fieldType); |
ILUInt32 valueSize = GetStackTypeSize(_ILCoderToILCVMCoder(coder)->process, |
819 |
|
fieldType); |
820 |
ILClass *classInfo; |
ILClass *classInfo; |
821 |
#ifdef IL_CONFIG_PINVOKE |
#ifdef IL_CONFIG_PINVOKE |
822 |
ILPInvoke *pinvoke; |
ILPInvoke *pinvoke; |
904 |
} |
} |
905 |
|
|
906 |
/* Copy the memory block */ |
/* Copy the memory block */ |
907 |
size = _ILSizeOfTypeLocked(ILType_FromValueType(classInfo)); |
size = _ILSizeOfTypeLocked(_ILCoderToILCVMCoder(coder)->process, |
908 |
|
ILType_FromValueType(classInfo)); |
909 |
CVM_OUT_WIDE(COP_MEMCPY, size); |
CVM_OUT_WIDE(COP_MEMCPY, size); |
910 |
CVM_ADJUST(-2); |
CVM_ADJUST(-2); |
911 |
} |
} |
960 |
} |
} |
961 |
|
|
962 |
/* Initialize the block to all-zeroes */ |
/* Initialize the block to all-zeroes */ |
963 |
size = _ILSizeOfTypeLocked(ILType_FromValueType(classInfo)); |
size = _ILSizeOfTypeLocked(_ILCoderToILCVMCoder(coder)->process, |
964 |
|
ILType_FromValueType(classInfo)); |
965 |
CVM_OUT_WIDE(COP_MEMZERO, size); |
CVM_OUT_WIDE(COP_MEMZERO, size); |
966 |
CVM_ADJUST(-1); |
CVM_ADJUST(-1); |
967 |
} |
} |
1081 |
|
|
1082 |
static void CVMCoder_SizeOf(ILCoder *coder, ILType *type) |
static void CVMCoder_SizeOf(ILCoder *coder, ILType *type) |
1083 |
{ |
{ |
1084 |
ILUInt32 size = _ILSizeOfTypeLocked(type); |
ILUInt32 size = _ILSizeOfTypeLocked(_ILCoderToILCVMCoder(coder)->process, |
1085 |
|
type); |
1086 |
if(size <= 8) |
if(size <= 8) |
1087 |
{ |
{ |
1088 |
CVM_OUT_NONE(COP_LDC_I4_0 + size); |
CVM_OUT_NONE(COP_LDC_I4_0 + size); |