diff options
author | Jan Kotas <jkotas@microsoft.com> | 2018-12-20 07:10:07 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-20 07:10:07 -0800 |
commit | b0f325989d84c0ea429f24250e6ee1c6fd1a50a7 (patch) | |
tree | 0068af0090cddebc54a9b3efc00cff742cb4b368 /src/vm | |
parent | 4cc0a9a55d283e44205bf842a68657280bdabcd5 (diff) | |
download | coreclr-b0f325989d84c0ea429f24250e6ee1c6fd1a50a7.tar.gz coreclr-b0f325989d84c0ea429f24250e6ee1c6fd1a50a7.tar.bz2 coreclr-b0f325989d84c0ea429f24250e6ee1c6fd1a50a7.zip |
Replace more of JitHelpers with S.R.CS.Unsafe (#21598)
- Replace JitHelpers.UnsafeCastToStackPtr with Unsafe.AsPointer
- Delete PinningHelper that was duplicate of RawData helper class
Diffstat (limited to 'src/vm')
-rw-r--r-- | src/vm/array.cpp | 22 | ||||
-rw-r--r-- | src/vm/ecalllist.h | 3 | ||||
-rw-r--r-- | src/vm/ilmarshalers.cpp | 4 | ||||
-rw-r--r-- | src/vm/jitinterface.cpp | 23 | ||||
-rw-r--r-- | src/vm/mscorlib.h | 12 | ||||
-rw-r--r-- | src/vm/prestub.cpp | 6 | ||||
-rw-r--r-- | src/vm/reflectioninvocation.cpp | 9 | ||||
-rw-r--r-- | src/vm/reflectioninvocation.h | 3 |
8 files changed, 27 insertions, 55 deletions
diff --git a/src/vm/array.cpp b/src/vm/array.cpp index 1a4a940c42..cde360c562 100644 --- a/src/vm/array.cpp +++ b/src/vm/array.cpp @@ -781,7 +781,7 @@ public: DWORD dwFactorLocalNum = NewLocal(ELEMENT_TYPE_I4); DWORD dwLengthLocalNum = NewLocal(ELEMENT_TYPE_I4); - mdToken tokPinningHelper = GetToken(MscorlibBinder::GetField(FIELD__PINNING_HELPER__M_DATA)); + mdToken tokRawData = GetToken(MscorlibBinder::GetField(FIELD__RAW_DATA__DATA)); ILCodeLabel * pRangeExceptionLabel = NewCodeLabel(); ILCodeLabel * pRangeExceptionLabel1 = NewCodeLabel(); @@ -817,13 +817,13 @@ public: m_pCode->EmitBRFALSE(pTypeCheckOK); //Storing NULL is OK m_pCode->EmitLDARG(rank); // return param - m_pCode->EmitLDFLDA(tokPinningHelper); + m_pCode->EmitLDFLDA(tokRawData); m_pCode->EmitLDC(Object::GetOffsetOfFirstField()); m_pCode->EmitSUB(); m_pCode->EmitLDIND_I(); // TypeHandle m_pCode->EmitLoadThis(); - m_pCode->EmitLDFLDA(tokPinningHelper); + m_pCode->EmitLDFLDA(tokRawData); m_pCode->EmitLDC(Object::GetOffsetOfFirstField()); m_pCode->EmitSUB(); m_pCode->EmitLDIND_I(); // Array MT @@ -851,13 +851,13 @@ public: m_pCode->EmitLDARG(hiddenArgIdx); // hidden param m_pCode->EmitBRFALSE(pTypeCheckPassed); m_pCode->EmitLDARG(hiddenArgIdx); - m_pCode->EmitLDFLDA(tokPinningHelper); + m_pCode->EmitLDFLDA(tokRawData); m_pCode->EmitLDC(offsetof(ParamTypeDesc, m_Arg) - (Object::GetOffsetOfFirstField()+2)); m_pCode->EmitADD(); m_pCode->EmitLDIND_I(); m_pCode->EmitLoadThis(); - m_pCode->EmitLDFLDA(tokPinningHelper); + m_pCode->EmitLDFLDA(tokRawData); m_pCode->EmitLDC(Object::GetOffsetOfFirstField()); m_pCode->EmitSUB(); m_pCode->EmitLDIND_I(); // Array MT @@ -875,7 +875,7 @@ public: { // check if the array is SZArray. m_pCode->EmitLoadThis(); - m_pCode->EmitLDFLDA(tokPinningHelper); + m_pCode->EmitLDFLDA(tokRawData); m_pCode->EmitLDC(Object::GetOffsetOfFirstField()); m_pCode->EmitSUB(); m_pCode->EmitLDIND_I(); @@ -889,7 +889,7 @@ public: // it is SZArray // bounds check m_pCode->EmitLoadThis(); - m_pCode->EmitLDFLDA(tokPinningHelper); + m_pCode->EmitLDFLDA(tokRawData); m_pCode->EmitLDC(ArrayBase::GetOffsetOfNumComponents() - Object::GetOffsetOfFirstField()); m_pCode->EmitADD(); m_pCode->EmitLDIND_I4(); @@ -897,7 +897,7 @@ public: m_pCode->EmitBLE_UN(pRangeExceptionLabel); m_pCode->EmitLoadThis(); - m_pCode->EmitLDFLDA(tokPinningHelper); + m_pCode->EmitLDFLDA(tokRawData); m_pCode->EmitLDC(ArrayBase::GetBoundsOffset(pMT) - Object::GetOffsetOfFirstField()); m_pCode->EmitADD(); m_pCode->EmitLDARG(firstIdx); @@ -909,7 +909,7 @@ public: { // Cache length m_pCode->EmitLoadThis(); - m_pCode->EmitLDFLDA(tokPinningHelper); + m_pCode->EmitLDFLDA(tokRawData); m_pCode->EmitLDC((ArrayBase::GetBoundsOffset(pMT) - Object::GetOffsetOfFirstField()) + (idx-firstIdx)*sizeof(DWORD)); m_pCode->EmitADD(); m_pCode->EmitLDIND_I4(); @@ -922,7 +922,7 @@ public: { // Load lower bound m_pCode->EmitLoadThis(); - m_pCode->EmitLDFLDA(tokPinningHelper); + m_pCode->EmitLDFLDA(tokRawData); m_pCode->EmitLDC((ArrayBase::GetLowerBoundsOffset(pMT) - Object::GetOffsetOfFirstField()) + (idx-firstIdx)*sizeof(DWORD)); m_pCode->EmitADD(); m_pCode->EmitLDIND_I4(); @@ -961,7 +961,7 @@ public: // Compute element address m_pCode->EmitLoadThis(); - m_pCode->EmitLDFLDA(tokPinningHelper); + m_pCode->EmitLDFLDA(tokRawData); m_pCode->EmitLDC(ArrayBase::GetDataPtrOffset(pMT) - Object::GetOffsetOfFirstField()); m_pCode->EmitADD(); m_pCode->EmitLDLOC(dwTotalLocalNum); diff --git a/src/vm/ecalllist.h b/src/vm/ecalllist.h index 492bd95a31..c8244a69e8 100644 --- a/src/vm/ecalllist.h +++ b/src/vm/ecalllist.h @@ -222,9 +222,6 @@ FCFuncEnd() FCFuncStart(gJitHelpers) FCFuncElement("UnsafeSetArrayElement", JitHelpers::UnsafeSetArrayElement) -#ifdef _DEBUG - FCFuncElement("IsAddressInStack", ReflectionInvocation::IsAddressInStack) -#endif FCFuncEnd() FCFuncStart(gCOMTypeHandleFuncs) diff --git a/src/vm/ilmarshalers.cpp b/src/vm/ilmarshalers.cpp index 58319d85e4..71fd1e7196 100644 --- a/src/vm/ilmarshalers.cpp +++ b/src/vm/ilmarshalers.cpp @@ -2448,7 +2448,7 @@ void ILBlittablePtrMarshaler::EmitConvertContentsCLRToNative(ILCodeStream* pslIL ILCodeLabel* pNullRefLabel = pslILEmit->NewCodeLabel(); UINT uNativeSize = m_pargs->m_pMT->GetNativeSize(); - int fieldDef = pslILEmit->GetToken(MscorlibBinder::GetField(FIELD__PINNING_HELPER__M_DATA)); + int fieldDef = pslILEmit->GetToken(MscorlibBinder::GetField(FIELD__RAW_DATA__DATA)); EmitLoadNativeValue(pslILEmit); pslILEmit->EmitBRFALSE(pNullRefLabel); @@ -2470,7 +2470,7 @@ void ILBlittablePtrMarshaler::EmitConvertContentsNativeToCLR(ILCodeStream* pslIL ILCodeLabel* pNullRefLabel = pslILEmit->NewCodeLabel(); UINT uNativeSize = m_pargs->m_pMT->GetNativeSize(); - int fieldDef = pslILEmit->GetToken(MscorlibBinder::GetField(FIELD__PINNING_HELPER__M_DATA)); + int fieldDef = pslILEmit->GetToken(MscorlibBinder::GetField(FIELD__RAW_DATA__DATA)); EmitLoadManagedValue(pslILEmit); pslILEmit->EmitBRFALSE(pNullRefLabel); diff --git a/src/vm/jitinterface.cpp b/src/vm/jitinterface.cpp index 7fcdd62d05..2d87c276c8 100644 --- a/src/vm/jitinterface.cpp +++ b/src/vm/jitinterface.cpp @@ -6973,18 +6973,7 @@ bool getILIntrinsicImplementation(MethodDesc * ftn, // Compare tokens to cover all generic instantiations // The body of the first method is simply ret Arg0. The second one first casts the arg to I4. - if (tk == MscorlibBinder::GetMethod(METHOD__JIT_HELPERS__UNSAFE_CAST_TO_STACKPTR)->GetMemberDef()) - { - // Return the argument that was passed in converted to IntPtr - static const BYTE ilcode[] = { CEE_LDARG_0, CEE_CONV_I, CEE_RET }; - methInfo->ILCode = const_cast<BYTE*>(ilcode); - methInfo->ILCodeSize = sizeof(ilcode); - methInfo->maxStack = 1; - methInfo->EHcount = 0; - methInfo->options = (CorInfoOptions)0; - return true; - } - else if (tk == MscorlibBinder::GetMethod(METHOD__JIT_HELPERS__UNSAFE_ENUM_CAST)->GetMemberDef()) + if (tk == MscorlibBinder::GetMethod(METHOD__JIT_HELPERS__UNSAFE_ENUM_CAST)->GetMemberDef()) { // Normally we would follow the above pattern and unconditionally replace the IL, // relying on generic type constraints to guarantee that it will only ever be instantiated @@ -7048,16 +7037,16 @@ bool getILIntrinsicImplementation(MethodDesc * ftn, } else if (tk == MscorlibBinder::GetMethod(METHOD__JIT_HELPERS__GET_RAW_SZ_ARRAY_DATA)->GetMemberDef()) { - mdToken tokArrayPinningHelper = MscorlibBinder::GetField(FIELD__ARRAY_PINNING_HELPER__M_ARRAY_DATA)->GetMemberDef(); + mdToken tokRawSzArrayData = MscorlibBinder::GetField(FIELD__RAW_SZARRAY_DATA__DATA)->GetMemberDef(); static BYTE ilcode[] = { CEE_LDARG_0, CEE_LDFLDA,0,0,0,0, CEE_RET }; - ilcode[2] = (BYTE)(tokArrayPinningHelper); - ilcode[3] = (BYTE)(tokArrayPinningHelper >> 8); - ilcode[4] = (BYTE)(tokArrayPinningHelper >> 16); - ilcode[5] = (BYTE)(tokArrayPinningHelper >> 24); + ilcode[2] = (BYTE)(tokRawSzArrayData); + ilcode[3] = (BYTE)(tokRawSzArrayData >> 8); + ilcode[4] = (BYTE)(tokRawSzArrayData >> 16); + ilcode[5] = (BYTE)(tokRawSzArrayData >> 24); methInfo->ILCode = const_cast<BYTE*>(ilcode); methInfo->ILCodeSize = sizeof(ilcode); diff --git a/src/vm/mscorlib.h b/src/vm/mscorlib.h index f257ecd2f3..48f3a5e580 100644 --- a/src/vm/mscorlib.h +++ b/src/vm/mscorlib.h @@ -682,11 +682,9 @@ DEFINE_CLASS(JIT_HELPERS, CompilerServices, JitHelpers) #ifdef _DEBUG DEFINE_METHOD(JIT_HELPERS, UNSAFE_ENUM_CAST, UnsafeEnumCastInternal, NoSig) DEFINE_METHOD(JIT_HELPERS, UNSAFE_ENUM_CAST_LONG, UnsafeEnumCastLongInternal, NoSig) -DEFINE_METHOD(JIT_HELPERS, UNSAFE_CAST_TO_STACKPTR,UnsafeCastToStackPointerInternal, NoSig) #else // _DEBUG DEFINE_METHOD(JIT_HELPERS, UNSAFE_ENUM_CAST, UnsafeEnumCast, NoSig) DEFINE_METHOD(JIT_HELPERS, UNSAFE_ENUM_CAST_LONG, UnsafeEnumCastLong, NoSig) -DEFINE_METHOD(JIT_HELPERS, UNSAFE_CAST_TO_STACKPTR,UnsafeCastToStackPointer, NoSig) #endif // _DEBUG DEFINE_METHOD(JIT_HELPERS, GET_RAW_SZ_ARRAY_DATA, GetRawSzArrayData, NoSig) @@ -715,12 +713,12 @@ DEFINE_CLASS(INTERLOCKED, Threading, Interlocked) DEFINE_METHOD(INTERLOCKED, COMPARE_EXCHANGE_T, CompareExchange, GM_RefT_T_T_RetT) DEFINE_METHOD(INTERLOCKED, COMPARE_EXCHANGE_OBJECT,CompareExchange, SM_RefObject_Object_Object_RetObject) -DEFINE_CLASS(PINNING_HELPER, CompilerServices, PinningHelper) -DEFINE_FIELD(PINNING_HELPER, M_DATA, m_data) +DEFINE_CLASS(RAW_DATA, CompilerServices, RawData) +DEFINE_FIELD(RAW_DATA, DATA, Data) -DEFINE_CLASS(ARRAY_PINNING_HELPER, CompilerServices, ArrayPinningHelper) -DEFINE_FIELD(ARRAY_PINNING_HELPER, M_ARRAY_DATA, m_arrayData) -DEFINE_FIELD(ARRAY_PINNING_HELPER, M_ARRAY_LENGTH_AND_PADDING, m_lengthAndPadding) +DEFINE_CLASS(RAW_SZARRAY_DATA, CompilerServices, RawSzArrayData) +DEFINE_FIELD(RAW_SZARRAY_DATA, COUNT, Count) +DEFINE_FIELD(RAW_SZARRAY_DATA, DATA, Data) DEFINE_CLASS(RUNTIME_WRAPPED_EXCEPTION, CompilerServices, RuntimeWrappedException) DEFINE_METHOD(RUNTIME_WRAPPED_EXCEPTION, OBJ_CTOR, .ctor, IM_Obj_RetVoid) diff --git a/src/vm/prestub.cpp b/src/vm/prestub.cpp index c7124c6d98..0565c178b2 100644 --- a/src/vm/prestub.cpp +++ b/src/vm/prestub.cpp @@ -1206,13 +1206,13 @@ Stub * CreateUnboxingILStubForSharedGenericValueTypeMethods(MethodDesc* pTargetM CreateInstantiatingILStubTargetSig(pTargetMD, typeContext, &stubSigBuilder); // 2. Emit the method body - mdToken tokPinningHelper = pCode->GetToken(MscorlibBinder::GetField(FIELD__PINNING_HELPER__M_DATA)); + mdToken tokRawData = pCode->GetToken(MscorlibBinder::GetField(FIELD__RAW_DATA__DATA)); // 2.1 Push the thisptr // We need to skip over the MethodTable* // The trick below will do that. pCode->EmitLoadThis(); - pCode->EmitLDFLDA(tokPinningHelper); + pCode->EmitLDFLDA(tokRawData); #if defined(_TARGET_X86_) // 2.2 Push the rest of the arguments for x86 @@ -1225,7 +1225,7 @@ Stub * CreateUnboxingILStubForSharedGenericValueTypeMethods(MethodDesc* pTargetM // 2.3 Push the hidden context param // The context is going to be captured from the thisptr pCode->EmitLoadThis(); - pCode->EmitLDFLDA(tokPinningHelper); + pCode->EmitLDFLDA(tokRawData); pCode->EmitLDC(Object::GetOffsetOfFirstField()); pCode->EmitSUB(); pCode->EmitLDIND_I(); diff --git a/src/vm/reflectioninvocation.cpp b/src/vm/reflectioninvocation.cpp index d2d2180cd2..7667ca8281 100644 --- a/src/vm/reflectioninvocation.cpp +++ b/src/vm/reflectioninvocation.cpp @@ -2375,15 +2375,6 @@ FCIMPL1(Object*, ReflectionInvocation::TypedReferenceToObject, TypedByRef * valu } FCIMPLEND -#ifdef _DEBUG -FCIMPL1(FC_BOOL_RET, ReflectionInvocation::IsAddressInStack, void * ptr) -{ - FCALL_CONTRACT; - FC_RETURN_BOOL(Thread::IsAddressInCurrentStack(ptr)); -} -FCIMPLEND -#endif - FCIMPL2_IV(Object*, ReflectionInvocation::CreateEnum, ReflectClassBaseObject *pTypeUNSAFE, INT64 value) { FCALL_CONTRACT; diff --git a/src/vm/reflectioninvocation.h b/src/vm/reflectioninvocation.h index 64234d7eab..7cb3348292 100644 --- a/src/vm/reflectioninvocation.h +++ b/src/vm/reflectioninvocation.h @@ -63,9 +63,6 @@ public: static FCDECL4(void, MakeTypedReference, TypedByRef * value, Object* targetUNSAFE, ArrayBase* fldsUNSAFE, ReflectClassBaseObject *pFieldType); static FCDECL2(void, SetTypedReference, TypedByRef * target, Object* objUNSAFE); static FCDECL1(Object*, TypedReferenceToObject, TypedByRef * value); -#ifdef _DEBUG - static FCDECL1(FC_BOOL_RET, IsAddressInStack, void * ptr); -#endif #ifdef FEATURE_COMINTEROP static FCDECL3(Object*, GetClassFromProgID, StringObject* classNameUNSAFE, StringObject* serverUNSAFE, CLR_BOOL bThrowOnError); |