< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotForeignCallsProviderImpl.java

Print this page
rev 52509 : [mq]: graal2

*** 107,146 **** * @param reexecutability specifies if the stub call can be re-executed without (meaningful) * side effects. Deoptimization will not return to a point before a stub call that * cannot be re-executed. * @param killedLocations the memory locations killed by the stub call */ ! public HotSpotForeignCallLinkage registerStubCall(ForeignCallDescriptor descriptor, Transition transition, Reexecutability reexecutability, LocationIdentity... killedLocations) { ! return register(HotSpotForeignCallLinkageImpl.create(metaAccess, codeCache, wordTypes, this, descriptor, 0L, PRESERVES_REGISTERS, JavaCall, JavaCallee, transition, reexecutability, killedLocations)); } /** * Creates and registers the linkage for a foreign call. * * @param descriptor the signature of the foreign call ! * @param address the address of the code to call * @param outgoingCcType outgoing (caller) calling convention type * @param effect specifies if the call destroys or preserves all registers (apart from * temporaries which are always destroyed) * @param transition specifies if this is a {@linkplain Transition#LEAF leaf} call * @param reexecutability specifies if the foreign call can be re-executed without (meaningful) * side effects. Deoptimization will not return to a point before a foreign call that * cannot be re-executed. * @param killedLocations the memory locations killed by the foreign call */ ! public HotSpotForeignCallLinkage registerForeignCall(ForeignCallDescriptor descriptor, long address, CallingConvention.Type outgoingCcType, RegisterEffect effect, Transition transition, ! Reexecutability reexecutability, LocationIdentity... killedLocations) { Class<?> resultType = descriptor.getResultType(); ! assert address != 0; assert transition != SAFEPOINT || resultType.isPrimitive() || Word.class.isAssignableFrom(resultType) : "non-leaf foreign calls must return objects in thread local storage: " + descriptor; ! return register(HotSpotForeignCallLinkageImpl.create(metaAccess, codeCache, wordTypes, this, descriptor, address, effect, outgoingCcType, null, transition, reexecutability, killedLocations)); } /** ! * Creates a {@linkplain ForeignCallStub stub} for a foreign call. * * @param descriptor the signature of the call to the stub * @param address the address of the foreign code to call * @param prependThread true if the JavaThread value for the current thread is to be prepended * to the arguments for the call to {@code address} --- 107,176 ---- * @param reexecutability specifies if the stub call can be re-executed without (meaningful) * side effects. Deoptimization will not return to a point before a stub call that * cannot be re-executed. * @param killedLocations the memory locations killed by the stub call */ ! public HotSpotForeignCallLinkage registerStubCall( ! ForeignCallDescriptor descriptor, ! Transition transition, ! Reexecutability reexecutability, LocationIdentity... killedLocations) { ! return register(HotSpotForeignCallLinkageImpl.create(metaAccess, ! codeCache, ! wordTypes, ! this, ! descriptor, ! 0L, PRESERVES_REGISTERS, ! JavaCall, ! JavaCallee, ! transition, ! reexecutability, killedLocations)); } /** * Creates and registers the linkage for a foreign call. * * @param descriptor the signature of the foreign call ! * @param address the address of the code to call (must be non-zero) * @param outgoingCcType outgoing (caller) calling convention type * @param effect specifies if the call destroys or preserves all registers (apart from * temporaries which are always destroyed) * @param transition specifies if this is a {@linkplain Transition#LEAF leaf} call * @param reexecutability specifies if the foreign call can be re-executed without (meaningful) * side effects. Deoptimization will not return to a point before a foreign call that * cannot be re-executed. * @param killedLocations the memory locations killed by the foreign call */ ! public HotSpotForeignCallLinkage registerForeignCall( ! ForeignCallDescriptor descriptor, ! long address, ! CallingConvention.Type outgoingCcType, ! RegisterEffect effect, ! Transition transition, ! Reexecutability reexecutability, ! LocationIdentity... killedLocations) { Class<?> resultType = descriptor.getResultType(); ! assert address != 0 : descriptor; assert transition != SAFEPOINT || resultType.isPrimitive() || Word.class.isAssignableFrom(resultType) : "non-leaf foreign calls must return objects in thread local storage: " + descriptor; ! return register(HotSpotForeignCallLinkageImpl.create(metaAccess, ! codeCache, ! wordTypes, ! this, ! descriptor, ! address, ! effect, ! outgoingCcType, ! null, // incomingCcType ! transition, ! reexecutability, ! killedLocations)); } /** ! * Creates a {@linkplain ForeignCallStub stub} for the foreign call described by ! * {@code descriptor} if {@code address != 0}. * * @param descriptor the signature of the call to the stub * @param address the address of the foreign code to call * @param prependThread true if the JavaThread value for the current thread is to be prepended * to the arguments for the call to {@code address}
*** 148,166 **** * @param reexecutability specifies if the foreign call can be re-executed without (meaningful) * side effects. Deoptimization will not return to a point before a foreign call that * cannot be re-executed. * @param killedLocations the memory locations killed by the foreign call */ ! public void linkForeignCall(OptionValues options, HotSpotProviders providers, ForeignCallDescriptor descriptor, long address, boolean prependThread, Transition transition, ! Reexecutability reexecutability, LocationIdentity... killedLocations) { ForeignCallStub stub = new ForeignCallStub(options, jvmciRuntime, providers, address, descriptor, prependThread, transition, reexecutability, killedLocations); HotSpotForeignCallLinkage linkage = stub.getLinkage(); HotSpotForeignCallLinkage targetLinkage = stub.getTargetLinkage(); linkage.setCompiledStub(stub); register(linkage); register(targetLinkage); } public static final boolean PREPEND_THREAD = true; public static final boolean DONT_PREPEND_THREAD = !PREPEND_THREAD; public static final LocationIdentity[] NO_LOCATIONS = {}; --- 178,204 ---- * @param reexecutability specifies if the foreign call can be re-executed without (meaningful) * side effects. Deoptimization will not return to a point before a foreign call that * cannot be re-executed. * @param killedLocations the memory locations killed by the foreign call */ ! public void linkForeignCall(OptionValues options, ! HotSpotProviders providers, ! ForeignCallDescriptor descriptor, ! long address, ! boolean prependThread, ! Transition transition, ! Reexecutability reexecutability, ! LocationIdentity... killedLocations) { ! if (address != 0) { ForeignCallStub stub = new ForeignCallStub(options, jvmciRuntime, providers, address, descriptor, prependThread, transition, reexecutability, killedLocations); HotSpotForeignCallLinkage linkage = stub.getLinkage(); HotSpotForeignCallLinkage targetLinkage = stub.getTargetLinkage(); linkage.setCompiledStub(stub); register(linkage); register(targetLinkage); } + } public static final boolean PREPEND_THREAD = true; public static final boolean DONT_PREPEND_THREAD = !PREPEND_THREAD; public static final LocationIdentity[] NO_LOCATIONS = {};
< prev index next >