public ISymbolNode HelperMethodEntrypoint(ILCompiler.ReadyToRunHelper helperId, MethodDesc method) { return(ExternSymbol(helperId)); }
public ISymbolNode ExternSymbol(ILCompiler.ReadyToRunHelper helper) { if (_helperCache.TryGetValue(helper, out ISymbolNode result)) { return(result); } ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper r2rHelper; switch (helper) { // Exception handling helpers case ILCompiler.ReadyToRunHelper.Throw: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Throw; break; case ILCompiler.ReadyToRunHelper.Rethrow: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Rethrow; break; case ILCompiler.ReadyToRunHelper.Overflow: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Overflow; break; case ILCompiler.ReadyToRunHelper.RngChkFail: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_RngChkFail; break; case ILCompiler.ReadyToRunHelper.FailFast: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_FailFast; break; case ILCompiler.ReadyToRunHelper.ThrowNullRef: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_ThrowNullRef; break; case ILCompiler.ReadyToRunHelper.ThrowDivZero: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_ThrowDivZero; break; // Write barriers case ILCompiler.ReadyToRunHelper.WriteBarrier: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_WriteBarrier; break; case ILCompiler.ReadyToRunHelper.CheckedWriteBarrier: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_CheckedWriteBarrier; break; case ILCompiler.ReadyToRunHelper.ByRefWriteBarrier: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_ByRefWriteBarrier; break; // Array helpers case ILCompiler.ReadyToRunHelper.Stelem_Ref: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Stelem_Ref; break; case ILCompiler.ReadyToRunHelper.Ldelema_Ref: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Ldelema_Ref; break; case ILCompiler.ReadyToRunHelper.MemSet: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_MemSet; break; case ILCompiler.ReadyToRunHelper.MemCpy: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_MemCpy; break; // Get string handle lazily case ILCompiler.ReadyToRunHelper.GetString: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_GetString; break; // Reflection helpers case ILCompiler.ReadyToRunHelper.GetRuntimeTypeHandle: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_GetRuntimeTypeHandle; break; case ILCompiler.ReadyToRunHelper.GetRuntimeMethodHandle: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_GetRuntimeMethodHandle; break; case ILCompiler.ReadyToRunHelper.GetRuntimeFieldHandle: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_GetRuntimeFieldHandle; break; case ILCompiler.ReadyToRunHelper.Box: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Box; break; case ILCompiler.ReadyToRunHelper.Box_Nullable: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Box_Nullable; break; case ILCompiler.ReadyToRunHelper.Unbox: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Unbox; break; case ILCompiler.ReadyToRunHelper.Unbox_Nullable: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Unbox_Nullable; break; case ILCompiler.ReadyToRunHelper.NewMultiDimArr: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_NewMultiDimArr; break; case ILCompiler.ReadyToRunHelper.NewMultiDimArr_NonVarArg: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_NewMultiDimArr_NonVarArg; break; // Helpers used with generic handle lookup cases case ILCompiler.ReadyToRunHelper.NewObject: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_NewObject; break; case ILCompiler.ReadyToRunHelper.NewArray: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_NewArray; break; case ILCompiler.ReadyToRunHelper.CheckCastAny: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_CheckCastAny; break; case ILCompiler.ReadyToRunHelper.CheckInstanceAny: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_CheckInstanceAny; break; case ILCompiler.ReadyToRunHelper.GenericGcStaticBase: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_GenericGcStaticBase; break; case ILCompiler.ReadyToRunHelper.GenericNonGcStaticBase: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_GenericNonGcStaticBase; break; case ILCompiler.ReadyToRunHelper.GenericGcTlsBase: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_GenericGcTlsBase; break; case ILCompiler.ReadyToRunHelper.GenericNonGcTlsBase: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_GenericNonGcTlsBase; break; case ILCompiler.ReadyToRunHelper.VirtualFuncPtr: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_VirtualFuncPtr; break; // Long mul/div/shift ops case ILCompiler.ReadyToRunHelper.LMul: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_LMul; break; case ILCompiler.ReadyToRunHelper.LMulOfv: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_LMulOfv; break; case ILCompiler.ReadyToRunHelper.ULMulOvf: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_ULMulOvf; break; case ILCompiler.ReadyToRunHelper.LDiv: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_LDiv; break; case ILCompiler.ReadyToRunHelper.LMod: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_LMod; break; case ILCompiler.ReadyToRunHelper.ULDiv: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_ULDiv; break; case ILCompiler.ReadyToRunHelper.ULMod: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_ULMod; break; case ILCompiler.ReadyToRunHelper.LLsh: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_LLsh; break; case ILCompiler.ReadyToRunHelper.LRsh: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_LRsh; break; case ILCompiler.ReadyToRunHelper.LRsz: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_LRsz; break; case ILCompiler.ReadyToRunHelper.Lng2Dbl: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Lng2Dbl; break; case ILCompiler.ReadyToRunHelper.ULng2Dbl: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_ULng2Dbl; break; // 32-bit division helpers case ILCompiler.ReadyToRunHelper.Div: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Div; break; case ILCompiler.ReadyToRunHelper.Mod: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Mod; break; case ILCompiler.ReadyToRunHelper.UDiv: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_UDiv; break; case ILCompiler.ReadyToRunHelper.UMod: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_UMod; break; // Floating point conversions case ILCompiler.ReadyToRunHelper.Dbl2Int: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Dbl2Int; break; case ILCompiler.ReadyToRunHelper.Dbl2IntOvf: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Dbl2IntOvf; break; case ILCompiler.ReadyToRunHelper.Dbl2Lng: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Dbl2Lng; break; case ILCompiler.ReadyToRunHelper.Dbl2LngOvf: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Dbl2LngOvf; break; case ILCompiler.ReadyToRunHelper.Dbl2UInt: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Dbl2UInt; break; case ILCompiler.ReadyToRunHelper.Dbl2UIntOvf: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Dbl2UIntOvf; break; case ILCompiler.ReadyToRunHelper.Dbl2ULng: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Dbl2ULng; break; case ILCompiler.ReadyToRunHelper.Dbl2ULngOvf: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Dbl2ULngOvf; break; // Floating point ops case ILCompiler.ReadyToRunHelper.DblRem: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_DblRem; break; case ILCompiler.ReadyToRunHelper.FltRem: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_FltRem; break; case ILCompiler.ReadyToRunHelper.DblRound: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_DblRound; break; case ILCompiler.ReadyToRunHelper.FltRound: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_FltRound; break; case ILCompiler.ReadyToRunHelper.GetRefAny: // TODO-PERF: currently not implemented in Crossgen ThrowHelper.ThrowInvalidProgramException(); // ThrowInvalidProgramException should never return throw new NotImplementedException(); // JIT32 x86-specific write barriers case ILCompiler.ReadyToRunHelper.WriteBarrier_EAX: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_WriteBarrier_EAX; break; case ILCompiler.ReadyToRunHelper.WriteBarrier_EBX: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_WriteBarrier_EBX; break; case ILCompiler.ReadyToRunHelper.WriteBarrier_ECX: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_WriteBarrier_ECX; break; case ILCompiler.ReadyToRunHelper.WriteBarrier_ESI: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_WriteBarrier_ESI; break; case ILCompiler.ReadyToRunHelper.WriteBarrier_EDI: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_WriteBarrier_EDI; break; case ILCompiler.ReadyToRunHelper.WriteBarrier_EBP: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_WriteBarrier_EBP; break; case ILCompiler.ReadyToRunHelper.CheckedWriteBarrier_EAX: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_CheckedWriteBarrier_EAX; break; case ILCompiler.ReadyToRunHelper.CheckedWriteBarrier_EBX: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_CheckedWriteBarrier_EBX; break; case ILCompiler.ReadyToRunHelper.CheckedWriteBarrier_ECX: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_CheckedWriteBarrier_ECX; break; case ILCompiler.ReadyToRunHelper.CheckedWriteBarrier_ESI: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_CheckedWriteBarrier_ESI; break; case ILCompiler.ReadyToRunHelper.CheckedWriteBarrier_EDI: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_CheckedWriteBarrier_EDI; break; case ILCompiler.ReadyToRunHelper.CheckedWriteBarrier_EBP: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_CheckedWriteBarrier_EBP; break; case ILCompiler.ReadyToRunHelper.EndCatch: r2rHelper = ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_EndCatch; break; default: throw new NotImplementedException(helper.ToString()); } result = _codegenNodeFactory.GetReadyToRunHelperCell(r2rHelper); _helperCache.Add(helper, result); return(result); }