@SuppressWarnings("unused") public static void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { for (SubstrateForeignCallDescriptor descriptor : FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } }
@Override public Optional<AnalysisMethod> handleForeignCall(ForeignCallDescriptor foreignCallDescriptor, ForeignCallsProvider foreignCallsProvider) { SubstrateForeignCallsProvider foreignCalls = (SubstrateForeignCallsProvider) foreignCallsProvider; /* In unit tests, we run with no registered foreign calls. */ Optional<AnalysisMethod> targetMethod = Optional.empty(); if (foreignCalls.getForeignCalls().size() > 0) { SubstrateForeignCallLinkage linkage = foreignCalls.lookupForeignCall(foreignCallDescriptor); targetMethod = Optional.of((AnalysisMethod) linkage.getMethod()); } return targetMethod; }
@Override public boolean isReexecutable(ForeignCallDescriptor descriptor) { return lookupForeignCall(descriptor).getDescriptor().isReexecutable(); }
@Override protected void emitForeignCallOp(ForeignCallLinkage linkage, Value result, Value[] arguments, Value[] temps, LIRFrameState info) { SubstrateForeignCallLinkage callTarget = (SubstrateForeignCallLinkage) linkage; ResolvedJavaMethod targetMethod = callTarget.getMethod(); append(new SubstrateAMD64DirectCallOp(targetMethod, result, arguments, temps, info)); }
@Override public LocationIdentity[] getKilledLocations(ForeignCallDescriptor descriptor) { return lookupForeignCall(descriptor).getDescriptor().getKilledLocations(); }
@Override public void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { for (SubstrateForeignCallDescriptor descriptor : Safepoint.FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } }
@Override public void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { for (SubstrateForeignCallDescriptor descriptor : AMD64ArrayIndexOfForeignCalls.FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } } }
@Override public void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { for (SubstrateForeignCallDescriptor descriptor : ImplicitExceptions.FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } } }
@Override public void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { for (SubstrateForeignCallDescriptor descriptor : ForeignCalls.FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } } }
@Override public void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { for (SubstrateForeignCallDescriptor descriptor : ArraycopySnippets.FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } }
@SuppressWarnings("unused") public static void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { for (SubstrateForeignCallDescriptor descriptor : FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } }
@Override public void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { foreignCalls.put(DeoptimizationRuntime.DEOPTIMIZE, new SubstrateForeignCallLinkage(providers, DeoptimizationRuntime.DEOPTIMIZE)); if (DeoptTester.enabled()) { foreignCalls.put(DeoptTester.DEOPTTEST, new SubstrateForeignCallLinkage(providers, DeoptTester.DEOPTTEST)); } }
@Override public void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { if (!StackOverflowCheckImpl.supportedByOS()) { return; } for (SubstrateForeignCallDescriptor descriptor : StackOverflowCheckSnippets.FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } }
SubstrateForeignCallsProvider foreignCallsProvider = (SubstrateForeignCallsProvider) providers.getForeignCalls(); for (SubstrateForeignCallDescriptor descriptor : SnippetRuntime.getRuntimeCalls()) { foreignCallsProvider.getForeignCalls().put(descriptor, new SubstrateForeignCallLinkage(runtimeCallProviders, descriptor));