/// <summary> /// Create a thunk that calls an externally defined (e.g., native) function, passing /// a dependency node to the function it calls. /// </summary> internal SingleArgumentJumpThunk JumpThunk(ExternSymbolNode target, ISymbolNode argument) { return(_jumpThunks.GetOrAdd(new Tuple <ExternSymbolNode, ISymbolNode>(target, argument))); }
protected override void EmitCode(NodeFactory factory, ref ARMEmitter encoder, bool relocsOnly) { NYI_Assert = new ExternSymbolNode("NYI_Assert"); switch (Id) { case ReadyToRunHelperId.NewHelper: { TypeDesc target = (TypeDesc)Target; encoder.EmitJMP(NYI_Assert); } break; case ReadyToRunHelperId.VirtualCall: { MethodDesc targetMethod = (MethodDesc)Target; encoder.EmitJMP(NYI_Assert); } break; case ReadyToRunHelperId.IsInstanceOf: { TypeDesc target = (TypeDesc)Target; encoder.EmitJMP(NYI_Assert); } break; case ReadyToRunHelperId.CastClass: { TypeDesc target = (TypeDesc)Target; encoder.EmitJMP(NYI_Assert); } break; case ReadyToRunHelperId.NewArr1: { TypeDesc target = (TypeDesc)Target; encoder.EmitJMP(NYI_Assert); } break; case ReadyToRunHelperId.GetNonGCStaticBase: { MetadataType target = (MetadataType)Target; encoder.EmitJMP(NYI_Assert); } break; case ReadyToRunHelperId.GetThreadStaticBase: { MetadataType target = (MetadataType)Target; encoder.EmitJMP(NYI_Assert); } break; case ReadyToRunHelperId.GetGCStaticBase: { MetadataType target = (MetadataType)Target; encoder.EmitJMP(NYI_Assert); } break; case ReadyToRunHelperId.DelegateCtor: { DelegateCreationInfo target = (DelegateCreationInfo)Target; encoder.EmitJMP(NYI_Assert); } break; case ReadyToRunHelperId.ResolveVirtualFunction: { MethodDesc targetMethod = (MethodDesc)Target; encoder.EmitJMP(NYI_Assert); } break; default: throw new NotImplementedException(); } }