@Override public void generate(NodeLIRBuilderTool gen) { ((SubstrateNodeLIRBuilder) gen).emitCGlobalDataLoadAddress(this); } }
public HostedRuntimeConfigurationBuilder(OptionValues options, SVMHost hostVM, HostedUniverse universe, HostedMetaAccess metaAccess, HostedProviders analysisProviders) { super(options, hostVM, metaAccess, SubstrateBackendFactory.get()::newBackend); this.universe = universe; this.analysisProviders = analysisProviders; }
@Override public CompiledCode createCompiledCode(ResolvedJavaMethod method, CompilationRequest compilationRequest, CompilationResult compilationResult, boolean isDefault, OptionValues options) { return new SubstrateCompiledCode(compilationResult); }
public SubstrateBackend createBackend(Providers newProviders) { return SubstrateBackendFactory.get().newBackend(newProviders); }
private void patchData(Map<Integer, NativeImagePatcher> patcher, @SuppressWarnings("unused") ObjectConstantsHolder objectConstants) { for (DataPatch dataPatch : compilation.getDataPatches()) { NativeImagePatcher patch = patcher.get(dataPatch.pcOffset); if (dataPatch.reference instanceof DataSectionReference) { DataSectionReference ref = (DataSectionReference) dataPatch.reference; int pcDisplacement = constantsOffset + ref.getOffset() - dataPatch.pcOffset; patch.patch(dataPatch.pcOffset, pcDisplacement, compiledBytes); } else if (dataPatch.reference instanceof ConstantReference) { ConstantReference ref = (ConstantReference) dataPatch.reference; SubstrateObjectConstant refConst = (SubstrateObjectConstant) ref.getConstant(); objectConstants.add(patch, refConst); } } }
@Override public RegisterAllocationConfig newRegisterAllocationConfig(RegisterConfig registerConfig, String[] allocationRestrictedTo) { RegisterConfig registerConfigNonNull = registerConfig == null ? getCodeCache().getRegisterConfig() : registerConfig; return new RegisterAllocationConfig(registerConfigNonNull, allocationRestrictedTo); }
@Override public <T extends Architecture> Backend getBackend(Class<T> arch) { assert arch.isInstance(GraalSupport.getRuntimeConfig().getBackendForNormalMethod().getTarget().arch); return GraalSupport.getRuntimeConfig().getBackendForNormalMethod(); } }
@Override protected CompilationResult createCompilationResult(String name, CompilationIdentifier compilationIdentifier, CompilableTruffleAST compilable) { return new SubstrateCompilationResult(compilationIdentifier, name); }
protected StringBuilder buildName(StringBuilder sb) { return buildID(sb); } }
@Override public void emitCode(CompilationResultBuilder crb) { ((SubstrateCompilationResult) crb.compilationResult).setDeoptimizationSourcePositions(deoptimzationSourcePositions); }
@Override public final String toString() { return toString(Verbosity.DETAILED); }
@Override public String toString(Verbosity verbosity) { return buildString(new StringBuilder(), verbosity).toString(); }
@Uninterruptible(reason = "Operates on raw pointers to objects") private void writeObjectConstantsToCode(ObjectConstantsHolder objectConstants) { for (int i = 0; i < objectConstants.count; i++) { objectConstants.patchers[i].patchData(code, objectConstants.values[i]); } /* From now on the constantsWalker will operate on the constants area. */ constantsWalker.pointerMapValid = true; }
@Override public void generate(NodeLIRBuilderTool gen) { ((SubstrateLIRGenerator) gen.getLIRGeneratorTool()).emitDeadEnd(); } }
public CGlobalDataInfo registerAsAccessed(CGlobalData<?> obj) { CGlobalDataImpl<?> data = (CGlobalDataImpl<?>) obj; assert !isLayouted() || map.containsKey(data) : "CGlobalData instance must have been discovered/registered before or during analysis"; return map.computeIfAbsent((CGlobalDataImpl<?>) obj, o -> new CGlobalDataInfo(data)); }
@Override public void generate(NodeLIRBuilderTool generator) { SubstrateLIRGenerator sgenerator = (SubstrateLIRGenerator) generator.getLIRGeneratorTool(); Value result = sgenerator.emitReadInstructionPointer(); generator.setResult(this, result); } }
public void layoutConstants() { for (CompilationResult compilation : compilations.values()) { for (DataSection.Data data : compilation.getDataSection()) { if (data instanceof SubstrateDataBuilder.ObjectData) { JavaConstant constant = ((SubstrateDataBuilder.ObjectData) data).getConstant(); constantReasons.put(constant, compilation.getName()); } } dataSection.addAll(compilation.getDataSection()); } dataSection.close(); }
@Platforms(Platform.HOSTED_ONLY.class) public static void setRuntimeConfig(RuntimeConfiguration runtimeConfig, Suites suites, LIRSuites lirSuites, Suites firstTierSuites, LIRSuites firstTierLirSuites) { get().runtimeConfig = runtimeConfig; get().suites = suites; get().lirSuites = lirSuites; get().firstTierSuites = firstTierSuites; get().firstTierLirSuites = firstTierLirSuites; get().firstTierProviders = runtimeConfig.getBackendForNormalMethod().getProviders(); }
private void createCodeChunkInfos() { CodeInfoEncoder codeInfoEncoder = new CodeInfoEncoder(new FrameInfoEncoder.NamesFromImage(), metaInfoAllocator); codeInfoEncoder.addMethod(method, compilation, 0); codeInfoEncoder.encodeAll(); codeInfoEncoder.install(runtimeMethodInfo); assert codeInfoEncoder.verifyMethod(compilation, 0); DeoptimizationSourcePositionEncoder sourcePositionEncoder = new DeoptimizationSourcePositionEncoder(metaInfoAllocator); sourcePositionEncoder.encode(compilation.getDeoptimizationSourcePositions()); sourcePositionEncoder.install(runtimeMethodInfo); }
@Platforms(Platform.HOSTED_ONLY.class) public GraalSupport() { /* By default the backend configuration is the same as for the native image. */ runtimeBackendProvider = SubstrateBackendFactory.get()::newBackend; for (DebugHandlersFactory c : GraalServices.load(DebugHandlersFactory.class)) { debugHandlersFactories.add(c); } }