diff --git a/Build.proj b/Build.proj
index 6dcc3b9542037b..44da6d66f9942c 100644
--- a/Build.proj
+++ b/Build.proj
@@ -18,7 +18,7 @@
-
+
diff --git a/Directory.Build.props b/Directory.Build.props
index 4ee7e1db360f89..3917b5b3f7b51e 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -200,7 +200,7 @@
- true
+ true
true
diff --git a/src/coreclr/ToolBox/superpmi/superpmi-shared/lwmlist.h b/src/coreclr/ToolBox/superpmi/superpmi-shared/lwmlist.h
index 7826a25ae00d48..71f9eca564a34d 100644
--- a/src/coreclr/ToolBox/superpmi/superpmi-shared/lwmlist.h
+++ b/src/coreclr/ToolBox/superpmi/superpmi-shared/lwmlist.h
@@ -101,6 +101,7 @@ LWM(GetJustMyCodeHandle, DWORDLONG, DLDL)
LWM(GetLazyStringLiteralHelper, DWORDLONG, DWORD)
LWM(GetLikelyClass, Agnostic_GetLikelyClass, Agnostic_GetLikelyClassResult)
LWM(GetLocationOfThisType, DWORDLONG, Agnostic_CORINFO_LOOKUP_KIND)
+LWM(IsJitIntrinsic, DWORDLONG, DWORD)
LWM(GetMethodAttribs, DWORDLONG, DWORD)
LWM(GetClassModule, DWORDLONG, DWORDLONG)
LWM(GetModuleAssembly, DWORDLONG, DWORDLONG)
diff --git a/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp b/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp
index 7c7296b803634c..0654207f2817be 100644
--- a/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp
+++ b/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp
@@ -771,6 +771,28 @@ DWORD MethodContext::repGetClassAttribs(CORINFO_CLASS_HANDLE classHandle)
return value;
}
+void MethodContext::recIsJitIntrinsic(CORINFO_METHOD_HANDLE ftn, bool result)
+{
+ if (IsJitIntrinsic == nullptr)
+ IsJitIntrinsic = new LightWeightMap();
+
+ IsJitIntrinsic->Add(CastHandle(ftn), (DWORD)result);
+ DEBUG_REC(dmpIsJitIntrinsic(CastHandle(ftn), (DWORD)result));
+}
+void MethodContext::dmpIsJitIntrinsic(DWORDLONG key, DWORD value)
+{
+ printf("IsJitIntrinsic key ftn-%016llX, value res-%u", key, value);
+}
+bool MethodContext::repIsJitIntrinsic(CORINFO_METHOD_HANDLE ftn)
+{
+ AssertCodeMsg((IsJitIntrinsic != nullptr) && (IsJitIntrinsic->GetIndex(CastHandle(ftn)) != -1), EXCEPTIONCODE_MC,
+ "Didn't find %016llX", CastHandle(ftn));
+
+ bool result = (BOOL)IsJitIntrinsic->Get(CastHandle(ftn));
+ DEBUG_REP(dmpIsJitIntrinsic(CastHandle(ftn), (DWORD)result));
+ return result;
+}
+
void MethodContext::recGetMethodAttribs(CORINFO_METHOD_HANDLE methodHandle, DWORD attribs)
{
if (GetMethodAttribs == nullptr)
diff --git a/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h b/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h
index d71f8d35f3b332..69837068f23f2f 100644
--- a/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h
+++ b/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h
@@ -119,6 +119,10 @@ class MethodContext
void dmpGetClassAttribs(DWORDLONG key, DWORD value);
DWORD repGetClassAttribs(CORINFO_CLASS_HANDLE classHandle);
+ void recIsJitIntrinsic(CORINFO_METHOD_HANDLE ftn, bool result);
+ void dmpIsJitIntrinsic(DWORDLONG key, DWORD value);
+ bool repIsJitIntrinsic(CORINFO_METHOD_HANDLE ftn);
+
void recGetMethodAttribs(CORINFO_METHOD_HANDLE methodHandle, DWORD attribs);
void dmpGetMethodAttribs(DWORDLONG key, DWORD value);
DWORD repGetMethodAttribs(CORINFO_METHOD_HANDLE methodHandle);
@@ -898,7 +902,7 @@ class MethodContext
};
// ********************* Please keep this up-to-date to ease adding more ***************
-// Highest packet number: 191
+// Highest packet number: 192
// *************************************************************************************
enum mcPackets
{
@@ -1000,6 +1004,7 @@ enum mcPackets
Packet_GetJustMyCodeHandle = 68,
Packet_GetLikelyClass = 182, // Added 9/27/2020
Packet_GetLocationOfThisType = 69,
+ Packet_IsJitIntrinsic = 192,
Packet_GetMethodAttribs = 70,
Packet_GetMethodClass = 71,
Packet_GetMethodModule = 181, // Added 11/20/2020
diff --git a/src/coreclr/ToolBox/superpmi/superpmi-shim-collector/icorjitinfo.cpp b/src/coreclr/ToolBox/superpmi/superpmi-shim-collector/icorjitinfo.cpp
index 85cca8a129d774..281533e4affec7 100644
--- a/src/coreclr/ToolBox/superpmi/superpmi-shim-collector/icorjitinfo.cpp
+++ b/src/coreclr/ToolBox/superpmi/superpmi-shim-collector/icorjitinfo.cpp
@@ -17,6 +17,17 @@
// ICorMethodInfo
//
/**********************************************************************************/
+
+// Quick check whether the method is a jit intrinsic. Returns the same value as getMethodAttribs(ftn) &
+// CORINFO_FLG_JIT_INTRINSIC, except faster.
+bool interceptor_ICJI::isJitIntrinsic(CORINFO_METHOD_HANDLE ftn)
+{
+ mc->cr->AddCall("isJitIntrinsic");
+ bool temp = original_ICorJitInfo->isJitIntrinsic(ftn);
+ mc->recIsJitIntrinsic(ftn, temp);
+ return temp;
+}
+
// return flags (defined above, CORINFO_FLG_PUBLIC ...)
uint32_t interceptor_ICJI::getMethodAttribs(CORINFO_METHOD_HANDLE ftn /* IN */)
{
diff --git a/src/coreclr/ToolBox/superpmi/superpmi-shim-counter/icorjitinfo.cpp b/src/coreclr/ToolBox/superpmi/superpmi-shim-counter/icorjitinfo.cpp
index 674d9f4e1fd102..d5ee05be454813 100644
--- a/src/coreclr/ToolBox/superpmi/superpmi-shim-counter/icorjitinfo.cpp
+++ b/src/coreclr/ToolBox/superpmi/superpmi-shim-counter/icorjitinfo.cpp
@@ -12,6 +12,13 @@
#include "spmiutil.h"
+bool interceptor_ICJI::isJitIntrinsic(
+ CORINFO_METHOD_HANDLE ftn)
+{
+ mcs->AddCall("isJitIntrinsic");
+ return original_ICorJitInfo->isJitIntrinsic(ftn);
+}
+
uint32_t interceptor_ICJI::getMethodAttribs(
CORINFO_METHOD_HANDLE ftn)
{
diff --git a/src/coreclr/ToolBox/superpmi/superpmi-shim-simple/icorjitinfo.cpp b/src/coreclr/ToolBox/superpmi/superpmi-shim-simple/icorjitinfo.cpp
index a276453ba69c99..3aed50b5b51a3c 100644
--- a/src/coreclr/ToolBox/superpmi/superpmi-shim-simple/icorjitinfo.cpp
+++ b/src/coreclr/ToolBox/superpmi/superpmi-shim-simple/icorjitinfo.cpp
@@ -12,6 +12,12 @@
#include "spmiutil.h"
+bool interceptor_ICJI::isJitIntrinsic(
+ CORINFO_METHOD_HANDLE ftn)
+{
+ return original_ICorJitInfo->isJitIntrinsic(ftn);
+}
+
uint32_t interceptor_ICJI::getMethodAttribs(
CORINFO_METHOD_HANDLE ftn)
{
diff --git a/src/coreclr/ToolBox/superpmi/superpmi/icorjitinfo.cpp b/src/coreclr/ToolBox/superpmi/superpmi/icorjitinfo.cpp
index 9d59f4449be613..4f86025dfc8192 100644
--- a/src/coreclr/ToolBox/superpmi/superpmi/icorjitinfo.cpp
+++ b/src/coreclr/ToolBox/superpmi/superpmi/icorjitinfo.cpp
@@ -23,6 +23,14 @@ ICorJitInfo* InitICorJitInfo(JitInstance* jitInstance)
//
/**********************************************************************************/
+// Quick check whether the method is a jit intrinsic. Returns the same value as getMethodAttribs(ftn) &
+// CORINFO_FLG_JIT_INTRINSIC, except faster.
+bool MyICJI::isJitIntrinsic(CORINFO_METHOD_HANDLE ftn)
+{
+ jitInstance->mc->cr->AddCall("isJitIntrinsic");
+ return jitInstance->mc->repIsJitIntrinsic(ftn);
+}
+
// return flags (defined above, CORINFO_FLG_PUBLIC ...)
uint32_t MyICJI::getMethodAttribs(CORINFO_METHOD_HANDLE ftn /* IN */)
{
diff --git a/src/coreclr/crossgen-corelib.proj b/src/coreclr/crossgen-corelib.proj
index 2399255b78d0f2..53c4e57c72eb58 100644
--- a/src/coreclr/crossgen-corelib.proj
+++ b/src/coreclr/crossgen-corelib.proj
@@ -45,6 +45,10 @@
+
+
+
+
System.Private.CoreLib
$([MSBuild]::NormalizePath('$(BinDir)', 'IL', '$(CoreLibAssemblyName).dll'))
@@ -53,12 +57,28 @@
$([MSBuild]::NormalizePath('$(BinDir)', 'PDB', '$(CoreLibAssemblyName).ni.pdb'))
$([MSBuild]::NormalizePath('$(BinDir)', '$(CoreLibAssemblyName).perf.map'))
+ $([MSBuild]::NormalizePath('$(BinDir)', 'StandardOptimizationData.mibc'))
-
+
+
+ $(DotNetCli) $([MSBuild]::NormalizePath('$(BinDir)', 'dotnet-pgo', 'dotnet-pgo.dll')) merge
+ $(DotNetPgoCmd) -o:$(MergedMibcPath)
+ $(DotNetPgoCmd) @(OptimizationMibcFiles->'-i:%(Identity)', ' ')
+
+
+
+
+
+
+
@@ -75,17 +95,12 @@
-
-
-
-
$(DotNetCli) $([MSBuild]::NormalizePath('$(BinDir)', '$(CrossDir)', 'crossgen2', 'crossgen2.dll'))
$(CrossGenDllCmd) -o:$(CoreLibOutputPath)
$(CrossGenDllCmd) -r:$([MSBuild]::NormalizePath('$(BinDir)', 'IL', '*.dll'))
$(CrossGenDllCmd) --targetarch:$(TargetArchitecture)
- @(OptimizationMibcFiles->'-m:%(Identity)', ' ')
- $(CrossGenDllCmd) $(MibcArgs) --embed-pgo-data
+ $(CrossGenDllCmd) -m:$(MergedMibcPath) --embed-pgo-data
$(CrossGenDllCmd) -O
$(CrossGenDllCmd) $(CoreLibInputPath)
diff --git a/src/coreclr/inc/corinfo.h b/src/coreclr/inc/corinfo.h
index c971d807a800b8..f62759467de10d 100644
--- a/src/coreclr/inc/corinfo.h
+++ b/src/coreclr/inc/corinfo.h
@@ -1953,6 +1953,9 @@ class ICorStaticInfo
//
/**********************************************************************************/
+ // Quick check whether the method is a jit intrinsic. Returns the same value as getMethodAttribs(ftn) & CORINFO_FLG_JIT_INTRINSIC, except faster.
+ virtual bool isJitIntrinsic(CORINFO_METHOD_HANDLE ftn) = 0;
+
// return flags (a bitfield of CorInfoFlags values)
virtual uint32_t getMethodAttribs (
CORINFO_METHOD_HANDLE ftn /* IN */
diff --git a/src/coreclr/inc/icorjitinfoimpl_generated.h b/src/coreclr/inc/icorjitinfoimpl_generated.h
index beb71ca0d3fa70..922a854795ec6a 100644
--- a/src/coreclr/inc/icorjitinfoimpl_generated.h
+++ b/src/coreclr/inc/icorjitinfoimpl_generated.h
@@ -21,6 +21,9 @@
public:
+bool isJitIntrinsic(
+ CORINFO_METHOD_HANDLE ftn) override;
+
uint32_t getMethodAttribs(
CORINFO_METHOD_HANDLE ftn) override;
diff --git a/src/coreclr/inc/jiteeversionguid.h b/src/coreclr/inc/jiteeversionguid.h
index 5e6a2ef98993e2..f76ceb70b11fcb 100644
--- a/src/coreclr/inc/jiteeversionguid.h
+++ b/src/coreclr/inc/jiteeversionguid.h
@@ -43,11 +43,11 @@ typedef const GUID *LPCGUID;
#define GUID_DEFINED
#endif // !GUID_DEFINED
-constexpr GUID JITEEVersionIdentifier = { /* 1776ab48-edfa-49be-a11f-ec216b28174c */
- 0x1776ab48,
- 0xedfa,
- 0x49be,
- {0xa1, 0x1f, 0xec, 0x21, 0x6b, 0x28, 0x17, 0x4c}
+constexpr GUID JITEEVersionIdentifier = { /* a33f2f79-dd8d-49dd-b4c3-ac86f34f6a87 */
+ 0xa33f2f79,
+ 0xdd8d,
+ 0x49dd,
+ {0xb4, 0xc3, 0xac, 0x86, 0xf3, 0x4f, 0x6a, 0x87}
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/coreclr/jit/ICorJitInfo_API_names.h b/src/coreclr/jit/ICorJitInfo_API_names.h
index 2e1e67cc24a773..dd0063573a3e14 100644
--- a/src/coreclr/jit/ICorJitInfo_API_names.h
+++ b/src/coreclr/jit/ICorJitInfo_API_names.h
@@ -4,6 +4,7 @@
// DO NOT EDIT THIS FILE! IT IS AUTOGENERATED
// To regenerate run the gen script in src/coreclr/tools/Common/JitInterface/ThunkGenerator
// and follow the instructions in docs/project/updating-jitinterface.md
+DEF_CLR_API(isJitIntrinsic)
DEF_CLR_API(getMethodAttribs)
DEF_CLR_API(setMethodAttribs)
DEF_CLR_API(getMethodSig)
diff --git a/src/coreclr/jit/ICorJitInfo_API_wrapper.hpp b/src/coreclr/jit/ICorJitInfo_API_wrapper.hpp
index d80bb83ef059a7..e06bdb51279f52 100644
--- a/src/coreclr/jit/ICorJitInfo_API_wrapper.hpp
+++ b/src/coreclr/jit/ICorJitInfo_API_wrapper.hpp
@@ -12,6 +12,15 @@
// clang-format off
/**********************************************************************************/
+bool WrapICorJitInfo::isJitIntrinsic(
+ CORINFO_METHOD_HANDLE ftn)
+{
+ API_ENTER(isJitIntrinsic);
+ bool temp = wrapHnd->isJitIntrinsic(ftn);
+ API_LEAVE(isJitIntrinsic);
+ return temp;
+}
+
uint32_t WrapICorJitInfo::getMethodAttribs(
CORINFO_METHOD_HANDLE ftn)
{
diff --git a/src/coreclr/jit/compiler.h b/src/coreclr/jit/compiler.h
index 584e3568f7f51a..5c4ab9c8e22cad 100644
--- a/src/coreclr/jit/compiler.h
+++ b/src/coreclr/jit/compiler.h
@@ -7542,6 +7542,7 @@ class Compiler
// Get the flags
bool eeIsValueClass(CORINFO_CLASS_HANDLE clsHnd);
+ bool eeIsJitIntrinsic(CORINFO_METHOD_HANDLE ftn);
#if defined(DEBUG) || defined(FEATURE_JIT_METHOD_PERF) || defined(FEATURE_SIMD) || defined(TRACK_LSRA_STATS)
diff --git a/src/coreclr/jit/ee_il_dll.hpp b/src/coreclr/jit/ee_il_dll.hpp
index b0626489f6a97d..5a45f22bce6d2d 100644
--- a/src/coreclr/jit/ee_il_dll.hpp
+++ b/src/coreclr/jit/ee_il_dll.hpp
@@ -53,6 +53,12 @@ bool Compiler::eeIsValueClass(CORINFO_CLASS_HANDLE clsHnd)
return info.compCompHnd->isValueClass(clsHnd);
}
+FORCEINLINE
+bool Compiler::eeIsJitIntrinsic(CORINFO_METHOD_HANDLE ftn)
+{
+ return info.compCompHnd->isJitIntrinsic(ftn);
+}
+
FORCEINLINE
void Compiler::eeGetSig(unsigned sigTok,
CORINFO_MODULE_HANDLE scope,
diff --git a/src/coreclr/jit/fgbasic.cpp b/src/coreclr/jit/fgbasic.cpp
index 024c32c22427c7..052ab147f78667 100644
--- a/src/coreclr/jit/fgbasic.cpp
+++ b/src/coreclr/jit/fgbasic.cpp
@@ -893,8 +893,6 @@ void Compiler::fgFindJumpTargets(const BYTE* codeAddr, IL_OFFSET codeSize, Fixed
}
CORINFO_RESOLVED_TOKEN resolvedToken;
- CORINFO_RESOLVED_TOKEN constrainedResolvedToken;
- CORINFO_CALL_INFO callInfo;
while (codeAddr < codeEndp)
{
@@ -958,54 +956,35 @@ void Compiler::fgFindJumpTargets(const BYTE* codeAddr, IL_OFFSET codeSize, Fixed
break;
}
- CORINFO_METHOD_HANDLE methodHnd = nullptr;
- unsigned methodFlags = 0;
- bool mustExpand = false;
- CorInfoIntrinsics intrinsicID = CORINFO_INTRINSIC_Illegal;
- NamedIntrinsic ni = NI_Illegal;
+ CORINFO_METHOD_HANDLE methodHnd = nullptr;
+ bool isJitIntrinsic = false;
+ bool mustExpand = false;
+ NamedIntrinsic ni = NI_Illegal;
if (resolveTokens)
{
impResolveToken(codeAddr, &resolvedToken, CORINFO_TOKENKIND_Method);
- eeGetCallInfo(&resolvedToken,
- (prefixFlags & PREFIX_CONSTRAINED) ? &constrainedResolvedToken : nullptr,
- combine(combine(CORINFO_CALLINFO_KINDONLY, CORINFO_CALLINFO_ALLOWINSTPARAM),
- (opcode == CEE_CALLVIRT) ? CORINFO_CALLINFO_CALLVIRT : CORINFO_CALLINFO_NONE),
- &callInfo);
-
- methodHnd = callInfo.hMethod;
- methodFlags = callInfo.methodFlags;
+ methodHnd = resolvedToken.hMethod;
+ isJitIntrinsic = eeIsJitIntrinsic(methodHnd);
}
- if ((methodFlags & (CORINFO_FLG_INTRINSIC | CORINFO_FLG_JIT_INTRINSIC)) != 0)
+ if (isJitIntrinsic)
{
intrinsicCalls++;
+ ni = lookupNamedIntrinsic(methodHnd);
- if ((methodFlags & CORINFO_FLG_INTRINSIC) != 0)
+ switch (ni)
{
- intrinsicID = info.compCompHnd->getIntrinsicID(methodHnd, &mustExpand);
- }
+ case NI_IsSupported_True:
+ case NI_IsSupported_False:
+ {
+ pushedStack.PushConstant();
+ break;
+ }
- if ((methodFlags & CORINFO_FLG_JIT_INTRINSIC) != 0)
- {
- if (intrinsicID == CORINFO_INTRINSIC_Illegal)
+ default:
{
- ni = lookupNamedIntrinsic(methodHnd);
-
- switch (ni)
- {
- case NI_IsSupported_True:
- case NI_IsSupported_False:
- {
- pushedStack.PushConstant();
- break;
- }
-
- default:
- {
- break;
- }
- }
+ break;
}
}
}
@@ -1162,10 +1141,6 @@ void Compiler::fgFindJumpTargets(const BYTE* codeAddr, IL_OFFSET codeSize, Fixed
noway_assert(sz == sizeof(unsigned));
prefixFlags |= PREFIX_CONSTRAINED;
- if (resolveTokens)
- {
- impResolveToken(codeAddr, &constrainedResolvedToken, CORINFO_TOKENKIND_Constrained);
- }
codeAddr += sizeof(unsigned);
{
diff --git a/src/coreclr/jit/fgopt.cpp b/src/coreclr/jit/fgopt.cpp
index 9b0eafce39cef9..3fb3c37b8e68bd 100644
--- a/src/coreclr/jit/fgopt.cpp
+++ b/src/coreclr/jit/fgopt.cpp
@@ -1996,6 +1996,20 @@ void Compiler::fgUpdateLoopsAfterCompacting(BasicBlock* block, BasicBlock* bNext
{
optLoopTable[loopNum].lpEntry = block;
}
+
+ /* Check the loop's first block */
+
+ if (optLoopTable[loopNum].lpFirst == bNext)
+ {
+ optLoopTable[loopNum].lpFirst = block;
+ }
+
+ /* Check the loop top */
+
+ if (optLoopTable[loopNum].lpTop == bNext)
+ {
+ optLoopTable[loopNum].lpTop = block;
+ }
}
}
diff --git a/src/coreclr/tools/Common/JitInterface/CorInfoBase.cs b/src/coreclr/tools/Common/JitInterface/CorInfoBase.cs
index 80fc5e6ea34a65..e7224e1d73af0c 100644
--- a/src/coreclr/tools/Common/JitInterface/CorInfoBase.cs
+++ b/src/coreclr/tools/Common/JitInterface/CorInfoBase.cs
@@ -12,6 +12,21 @@ namespace Internal.JitInterface
{
unsafe partial class CorInfoImpl
{
+ [UnmanagedCallersOnly]
+ static byte _isJitIntrinsic(IntPtr thisHandle, IntPtr* ppException, CORINFO_METHOD_STRUCT_* ftn)
+ {
+ var _this = GetThis(thisHandle);
+ try
+ {
+ return _this.isJitIntrinsic(ftn) ? (byte)1 : (byte)0;
+ }
+ catch (Exception ex)
+ {
+ *ppException = _this.AllocException(ex);
+ return default;
+ }
+ }
+
[UnmanagedCallersOnly]
static uint _getMethodAttribs(IntPtr thisHandle, IntPtr* ppException, CORINFO_METHOD_STRUCT_* ftn)
{
@@ -2551,180 +2566,181 @@ static uint _getJitFlags(IntPtr thisHandle, IntPtr* ppException, CORJIT_FLAGS* f
static IntPtr GetUnmanagedCallbacks()
{
- void** callbacks = (void**)Marshal.AllocCoTaskMem(sizeof(IntPtr) * 172);
-
- callbacks[0] = (delegate* unmanaged)&_getMethodAttribs;
- callbacks[1] = (delegate* unmanaged)&_setMethodAttribs;
- callbacks[2] = (delegate* unmanaged)&_getMethodSig;
- callbacks[3] = (delegate* unmanaged)&_getMethodInfo;
- callbacks[4] = (delegate* unmanaged)&_canInline;
- callbacks[5] = (delegate* unmanaged)&_reportInliningDecision;
- callbacks[6] = (delegate* unmanaged)&_canTailCall;
- callbacks[7] = (delegate* unmanaged)&_reportTailCallDecision;
- callbacks[8] = (delegate* unmanaged)&_getEHinfo;
- callbacks[9] = (delegate* unmanaged)&_getMethodClass;
- callbacks[10] = (delegate* unmanaged)&_getMethodModule;
- callbacks[11] = (delegate* unmanaged)&_getMethodVTableOffset;
- callbacks[12] = (delegate* unmanaged)&_resolveVirtualMethod;
- callbacks[13] = (delegate* unmanaged)&_getUnboxedEntry;
- callbacks[14] = (delegate* unmanaged)&_getDefaultComparerClass;
- callbacks[15] = (delegate* unmanaged)&_getDefaultEqualityComparerClass;
- callbacks[16] = (delegate* unmanaged)&_expandRawHandleIntrinsic;
- callbacks[17] = (delegate* unmanaged)&_getIntrinsicID;
- callbacks[18] = (delegate* unmanaged)&_isIntrinsicType;
- callbacks[19] = (delegate* unmanaged)&_getUnmanagedCallConv;
- callbacks[20] = (delegate* unmanaged)&_pInvokeMarshalingRequired;
- callbacks[21] = (delegate* unmanaged)&_satisfiesMethodConstraints;
- callbacks[22] = (delegate* unmanaged)&_isCompatibleDelegate;
- callbacks[23] = (delegate* unmanaged)&_methodMustBeLoadedBeforeCodeIsRun;
- callbacks[24] = (delegate* unmanaged)&_mapMethodDeclToMethodImpl;
- callbacks[25] = (delegate* unmanaged)&_getGSCookie;
- callbacks[26] = (delegate* unmanaged)&_setPatchpointInfo;
- callbacks[27] = (delegate* unmanaged)&_getOSRInfo;
- callbacks[28] = (delegate* unmanaged)&_resolveToken;
- callbacks[29] = (delegate* unmanaged)&_tryResolveToken;
- callbacks[30] = (delegate* unmanaged)&_findSig;
- callbacks[31] = (delegate* unmanaged)&_findCallSiteSig;
- callbacks[32] = (delegate* unmanaged)&_getTokenTypeAsHandle;
- callbacks[33] = (delegate* unmanaged)&_isValidToken;
- callbacks[34] = (delegate* unmanaged)&_isValidStringRef;
- callbacks[35] = (delegate* unmanaged)&_getStringLiteral;
- callbacks[36] = (delegate* unmanaged)&_asCorInfoType;
- callbacks[37] = (delegate* unmanaged)&_getClassName;
- callbacks[38] = (delegate* unmanaged)&_getClassNameFromMetadata;
- callbacks[39] = (delegate* unmanaged)&_getTypeInstantiationArgument;
- callbacks[40] = (delegate* unmanaged)&_appendClassName;
- callbacks[41] = (delegate* unmanaged)&_isValueClass;
- callbacks[42] = (delegate* unmanaged)&_canInlineTypeCheck;
- callbacks[43] = (delegate* unmanaged)&_getClassAttribs;
- callbacks[44] = (delegate* unmanaged)&_isStructRequiringStackAllocRetBuf;
- callbacks[45] = (delegate* unmanaged)&_getClassModule;
- callbacks[46] = (delegate* unmanaged)&_getModuleAssembly;
- callbacks[47] = (delegate* unmanaged)&_getAssemblyName;
- callbacks[48] = (delegate* unmanaged)&_LongLifetimeMalloc;
- callbacks[49] = (delegate* unmanaged)&_LongLifetimeFree;
- callbacks[50] = (delegate* unmanaged)&_getClassModuleIdForStatics;
- callbacks[51] = (delegate* unmanaged)&_getClassSize;
- callbacks[52] = (delegate* unmanaged)&_getHeapClassSize;
- callbacks[53] = (delegate* unmanaged)&_canAllocateOnStack;
- callbacks[54] = (delegate* unmanaged)&_getClassAlignmentRequirement;
- callbacks[55] = (delegate* unmanaged)&_getClassGClayout;
- callbacks[56] = (delegate* unmanaged)&_getClassNumInstanceFields;
- callbacks[57] = (delegate* unmanaged)&_getFieldInClass;
- callbacks[58] = (delegate* unmanaged)&_checkMethodModifier;
- callbacks[59] = (delegate* unmanaged)&_getNewHelper;
- callbacks[60] = (delegate* unmanaged)&_getNewArrHelper;
- callbacks[61] = (delegate* unmanaged)&_getCastingHelper;
- callbacks[62] = (delegate* unmanaged)&_getSharedCCtorHelper;
- callbacks[63] = (delegate* unmanaged)&_getTypeForBox;
- callbacks[64] = (delegate* unmanaged)&_getBoxHelper;
- callbacks[65] = (delegate* unmanaged)&_getUnBoxHelper;
- callbacks[66] = (delegate* unmanaged)&_getReadyToRunHelper;
- callbacks[67] = (delegate* unmanaged)&_getReadyToRunDelegateCtorHelper;
- callbacks[68] = (delegate* unmanaged)&_getHelperName;
- callbacks[69] = (delegate* unmanaged)&_initClass;
- callbacks[70] = (delegate* unmanaged)&_classMustBeLoadedBeforeCodeIsRun;
- callbacks[71] = (delegate* unmanaged)&_getBuiltinClass;
- callbacks[72] = (delegate* unmanaged)&_getTypeForPrimitiveValueClass;
- callbacks[73] = (delegate* unmanaged)&_getTypeForPrimitiveNumericClass;
- callbacks[74] = (delegate* unmanaged)&_canCast;
- callbacks[75] = (delegate* unmanaged)&_areTypesEquivalent;
- callbacks[76] = (delegate* unmanaged)&_compareTypesForCast;
- callbacks[77] = (delegate* unmanaged)&_compareTypesForEquality;
- callbacks[78] = (delegate* unmanaged)&_mergeClasses;
- callbacks[79] = (delegate* unmanaged)&_isMoreSpecificType;
- callbacks[80] = (delegate* unmanaged)&_getParentType;
- callbacks[81] = (delegate* unmanaged)&_getChildType;
- callbacks[82] = (delegate* unmanaged)&_satisfiesClassConstraints;
- callbacks[83] = (delegate* unmanaged)&_isSDArray;
- callbacks[84] = (delegate* unmanaged)&_getArrayRank;
- callbacks[85] = (delegate* unmanaged)&_getArrayInitializationData;
- callbacks[86] = (delegate* unmanaged)&_canAccessClass;
- callbacks[87] = (delegate* unmanaged)&_getFieldName;
- callbacks[88] = (delegate* unmanaged)&_getFieldClass;
- callbacks[89] = (delegate* unmanaged)&_getFieldType;
- callbacks[90] = (delegate* unmanaged)&_getFieldOffset;
- callbacks[91] = (delegate* unmanaged)&_getFieldInfo;
- callbacks[92] = (delegate* unmanaged)&_isFieldStatic;
- callbacks[93] = (delegate* unmanaged)&_getBoundaries;
- callbacks[94] = (delegate* unmanaged)&_setBoundaries;
- callbacks[95] = (delegate* unmanaged)&_getVars;
- callbacks[96] = (delegate* unmanaged)&_setVars;
- callbacks[97] = (delegate* unmanaged)&_allocateArray;
- callbacks[98] = (delegate* unmanaged)&_freeArray;
- callbacks[99] = (delegate* unmanaged)&_getArgNext;
- callbacks[100] = (delegate* unmanaged)&_getArgType;
- callbacks[101] = (delegate* unmanaged)&_getArgClass;
- callbacks[102] = (delegate* unmanaged)&_getHFAType;
- callbacks[103] = (delegate* unmanaged)&_GetErrorHRESULT;
- callbacks[104] = (delegate* unmanaged)&_GetErrorMessage;
- callbacks[105] = (delegate* unmanaged)&_FilterException;
- callbacks[106] = (delegate* unmanaged)&_HandleException;
- callbacks[107] = (delegate* unmanaged)&_ThrowExceptionForJitResult;
- callbacks[108] = (delegate* unmanaged)&_ThrowExceptionForHelper;
- callbacks[109] = (delegate* unmanaged)&_runWithErrorTrap;
- callbacks[110] = (delegate* unmanaged)&_getEEInfo;
- callbacks[111] = (delegate* unmanaged)&_getJitTimeLogFilename;
- callbacks[112] = (delegate* unmanaged)&_getMethodDefFromMethod;
- callbacks[113] = (delegate* unmanaged)&_getMethodName;
- callbacks[114] = (delegate* unmanaged)&_getMethodNameFromMetadata;
- callbacks[115] = (delegate* unmanaged)&_getMethodHash;
- callbacks[116] = (delegate* unmanaged)&_findNameOfToken;
- callbacks[117] = (delegate* unmanaged)&_getSystemVAmd64PassStructInRegisterDescriptor;
- callbacks[118] = (delegate* unmanaged)&_getThreadTLSIndex;
- callbacks[119] = (delegate* unmanaged)&_getInlinedCallFrameVptr;
- callbacks[120] = (delegate* unmanaged)&_getAddrOfCaptureThreadGlobal;
- callbacks[121] = (delegate* unmanaged)&_getHelperFtn;
- callbacks[122] = (delegate* unmanaged)&_getFunctionEntryPoint;
- callbacks[123] = (delegate* unmanaged)&_getFunctionFixedEntryPoint;
- callbacks[124] = (delegate* unmanaged)&_getMethodSync;
- callbacks[125] = (delegate* unmanaged)&_getLazyStringLiteralHelper;
- callbacks[126] = (delegate* unmanaged)&_embedModuleHandle;
- callbacks[127] = (delegate* unmanaged)&_embedClassHandle;
- callbacks[128] = (delegate* unmanaged)&_embedMethodHandle;
- callbacks[129] = (delegate* unmanaged)&_embedFieldHandle;
- callbacks[130] = (delegate* unmanaged)&_embedGenericHandle;
- callbacks[131] = (delegate* unmanaged)&_getLocationOfThisType;
- callbacks[132] = (delegate* unmanaged)&_getAddressOfPInvokeTarget;
- callbacks[133] = (delegate* unmanaged)&_GetCookieForPInvokeCalliSig;
- callbacks[134] = (delegate* unmanaged)&_canGetCookieForPInvokeCalliSig;
- callbacks[135] = (delegate* unmanaged)&_getJustMyCodeHandle;
- callbacks[136] = (delegate* unmanaged)&_GetProfilingHandle;
- callbacks[137] = (delegate* unmanaged)&_getCallInfo;
- callbacks[138] = (delegate* unmanaged)&_canAccessFamily;
- callbacks[139] = (delegate* unmanaged)&_isRIDClassDomainID;
- callbacks[140] = (delegate* unmanaged)&_getClassDomainID;
- callbacks[141] = (delegate* unmanaged)&_getFieldAddress;
- callbacks[142] = (delegate* unmanaged)&_getStaticFieldCurrentClass;
- callbacks[143] = (delegate* unmanaged)&_getVarArgsHandle;
- callbacks[144] = (delegate* unmanaged)&_canGetVarArgsHandle;
- callbacks[145] = (delegate* unmanaged)&_constructStringLiteral;
- callbacks[146] = (delegate* unmanaged)&_emptyStringLiteral;
- callbacks[147] = (delegate* unmanaged)&_getFieldThreadLocalStoreID;
- callbacks[148] = (delegate* unmanaged)&_setOverride;
- callbacks[149] = (delegate* unmanaged)&_addActiveDependency;
- callbacks[150] = (delegate* unmanaged)&_GetDelegateCtor;
- callbacks[151] = (delegate* unmanaged)&_MethodCompileComplete;
- callbacks[152] = (delegate* unmanaged)&_getTailCallHelpers;
- callbacks[153] = (delegate* unmanaged)&_convertPInvokeCalliToCall;
- callbacks[154] = (delegate* unmanaged)&_notifyInstructionSetUsage;
- callbacks[155] = (delegate* unmanaged)&_allocMem;
- callbacks[156] = (delegate* unmanaged)&_reserveUnwindInfo;
- callbacks[157] = (delegate* unmanaged)&_allocUnwindInfo;
- callbacks[158] = (delegate* unmanaged)&_allocGCInfo;
- callbacks[159] = (delegate* unmanaged)&_setEHcount;
- callbacks[160] = (delegate* unmanaged)&_setEHinfo;
- callbacks[161] = (delegate* unmanaged)&_logMsg;
- callbacks[162] = (delegate* unmanaged)&_doAssert;
- callbacks[163] = (delegate* unmanaged)&_reportFatalError;
- callbacks[164] = (delegate* unmanaged)&_getPgoInstrumentationResults;
- callbacks[165] = (delegate* unmanaged)&_allocPgoInstrumentationBySchema;
- callbacks[166] = (delegate* unmanaged)&_getLikelyClass;
- callbacks[167] = (delegate* unmanaged)&_recordCallSite;
- callbacks[168] = (delegate* unmanaged)&_recordRelocation;
- callbacks[169] = (delegate* unmanaged)&_getRelocTypeHint;
- callbacks[170] = (delegate* unmanaged)&_getExpectedTargetArchitecture;
- callbacks[171] = (delegate* unmanaged)&_getJitFlags;
+ void** callbacks = (void**)Marshal.AllocCoTaskMem(sizeof(IntPtr) * 173);
+
+ callbacks[0] = (delegate* unmanaged)&_isJitIntrinsic;
+ callbacks[1] = (delegate* unmanaged)&_getMethodAttribs;
+ callbacks[2] = (delegate* unmanaged)&_setMethodAttribs;
+ callbacks[3] = (delegate* unmanaged)&_getMethodSig;
+ callbacks[4] = (delegate* unmanaged)&_getMethodInfo;
+ callbacks[5] = (delegate* unmanaged)&_canInline;
+ callbacks[6] = (delegate* unmanaged)&_reportInliningDecision;
+ callbacks[7] = (delegate* unmanaged)&_canTailCall;
+ callbacks[8] = (delegate* unmanaged)&_reportTailCallDecision;
+ callbacks[9] = (delegate* unmanaged)&_getEHinfo;
+ callbacks[10] = (delegate* unmanaged)&_getMethodClass;
+ callbacks[11] = (delegate* unmanaged)&_getMethodModule;
+ callbacks[12] = (delegate* unmanaged)&_getMethodVTableOffset;
+ callbacks[13] = (delegate* unmanaged)&_resolveVirtualMethod;
+ callbacks[14] = (delegate* unmanaged)&_getUnboxedEntry;
+ callbacks[15] = (delegate* unmanaged)&_getDefaultComparerClass;
+ callbacks[16] = (delegate* unmanaged)&_getDefaultEqualityComparerClass;
+ callbacks[17] = (delegate* unmanaged)&_expandRawHandleIntrinsic;
+ callbacks[18] = (delegate* unmanaged)&_getIntrinsicID;
+ callbacks[19] = (delegate* unmanaged)&_isIntrinsicType;
+ callbacks[20] = (delegate* unmanaged)&_getUnmanagedCallConv;
+ callbacks[21] = (delegate* unmanaged)&_pInvokeMarshalingRequired;
+ callbacks[22] = (delegate* unmanaged)&_satisfiesMethodConstraints;
+ callbacks[23] = (delegate* unmanaged)&_isCompatibleDelegate;
+ callbacks[24] = (delegate* unmanaged)&_methodMustBeLoadedBeforeCodeIsRun;
+ callbacks[25] = (delegate* unmanaged)&_mapMethodDeclToMethodImpl;
+ callbacks[26] = (delegate* unmanaged)&_getGSCookie;
+ callbacks[27] = (delegate* unmanaged)&_setPatchpointInfo;
+ callbacks[28] = (delegate* unmanaged)&_getOSRInfo;
+ callbacks[29] = (delegate* unmanaged)&_resolveToken;
+ callbacks[30] = (delegate* unmanaged)&_tryResolveToken;
+ callbacks[31] = (delegate* unmanaged)&_findSig;
+ callbacks[32] = (delegate* unmanaged)&_findCallSiteSig;
+ callbacks[33] = (delegate* unmanaged)&_getTokenTypeAsHandle;
+ callbacks[34] = (delegate* unmanaged)&_isValidToken;
+ callbacks[35] = (delegate* unmanaged)&_isValidStringRef;
+ callbacks[36] = (delegate* unmanaged)&_getStringLiteral;
+ callbacks[37] = (delegate* unmanaged)&_asCorInfoType;
+ callbacks[38] = (delegate* unmanaged)&_getClassName;
+ callbacks[39] = (delegate* unmanaged)&_getClassNameFromMetadata;
+ callbacks[40] = (delegate* unmanaged)&_getTypeInstantiationArgument;
+ callbacks[41] = (delegate* unmanaged)&_appendClassName;
+ callbacks[42] = (delegate* unmanaged)&_isValueClass;
+ callbacks[43] = (delegate* unmanaged)&_canInlineTypeCheck;
+ callbacks[44] = (delegate* unmanaged)&_getClassAttribs;
+ callbacks[45] = (delegate* unmanaged)&_isStructRequiringStackAllocRetBuf;
+ callbacks[46] = (delegate* unmanaged)&_getClassModule;
+ callbacks[47] = (delegate* unmanaged)&_getModuleAssembly;
+ callbacks[48] = (delegate* unmanaged)&_getAssemblyName;
+ callbacks[49] = (delegate* unmanaged)&_LongLifetimeMalloc;
+ callbacks[50] = (delegate* unmanaged)&_LongLifetimeFree;
+ callbacks[51] = (delegate* unmanaged)&_getClassModuleIdForStatics;
+ callbacks[52] = (delegate* unmanaged)&_getClassSize;
+ callbacks[53] = (delegate* unmanaged)&_getHeapClassSize;
+ callbacks[54] = (delegate* unmanaged)&_canAllocateOnStack;
+ callbacks[55] = (delegate* unmanaged)&_getClassAlignmentRequirement;
+ callbacks[56] = (delegate* unmanaged)&_getClassGClayout;
+ callbacks[57] = (delegate* unmanaged)&_getClassNumInstanceFields;
+ callbacks[58] = (delegate* unmanaged)&_getFieldInClass;
+ callbacks[59] = (delegate* unmanaged)&_checkMethodModifier;
+ callbacks[60] = (delegate* unmanaged)&_getNewHelper;
+ callbacks[61] = (delegate* unmanaged)&_getNewArrHelper;
+ callbacks[62] = (delegate* unmanaged)&_getCastingHelper;
+ callbacks[63] = (delegate* unmanaged)&_getSharedCCtorHelper;
+ callbacks[64] = (delegate* unmanaged)&_getTypeForBox;
+ callbacks[65] = (delegate* unmanaged)&_getBoxHelper;
+ callbacks[66] = (delegate* unmanaged)&_getUnBoxHelper;
+ callbacks[67] = (delegate* unmanaged)&_getReadyToRunHelper;
+ callbacks[68] = (delegate* unmanaged)&_getReadyToRunDelegateCtorHelper;
+ callbacks[69] = (delegate* unmanaged)&_getHelperName;
+ callbacks[70] = (delegate* unmanaged)&_initClass;
+ callbacks[71] = (delegate* unmanaged)&_classMustBeLoadedBeforeCodeIsRun;
+ callbacks[72] = (delegate* unmanaged)&_getBuiltinClass;
+ callbacks[73] = (delegate* unmanaged)&_getTypeForPrimitiveValueClass;
+ callbacks[74] = (delegate* unmanaged)&_getTypeForPrimitiveNumericClass;
+ callbacks[75] = (delegate* unmanaged)&_canCast;
+ callbacks[76] = (delegate* unmanaged)&_areTypesEquivalent;
+ callbacks[77] = (delegate* unmanaged)&_compareTypesForCast;
+ callbacks[78] = (delegate* unmanaged)&_compareTypesForEquality;
+ callbacks[79] = (delegate* unmanaged)&_mergeClasses;
+ callbacks[80] = (delegate* unmanaged)&_isMoreSpecificType;
+ callbacks[81] = (delegate* unmanaged