public abstract class HotSpotForeignCallsProviderImpl extends Object implements HotSpotForeignCallsProvider
HotSpotForeignCallsProvider.| Modifier and Type | Field and Description |
|---|---|
protected CodeCacheProvider |
codeCache |
static boolean |
DONT_PREPEND_THREAD |
protected Map<ForeignCallDescriptor,HotSpotForeignCallLinkage> |
foreignCalls |
static ForeignCallDescriptor |
IDENTITY_HASHCODE |
static ForeignCallDescriptor |
LOAD_AND_CLEAR_EXCEPTION |
protected MetaAccessProvider |
metaAccess |
static LocationIdentity[] |
NO_LOCATIONS |
static boolean |
NOT_REEXECUTABLE |
static ForeignCallDescriptor |
OSR_MIGRATION_END |
static boolean |
PREPEND_THREAD |
static boolean |
REEXECUTABLE |
protected HotSpotGraalRuntimeProvider |
runtime |
static ForeignCallDescriptor |
TEST_DEOPTIMIZE_CALL_INT |
static ForeignCallDescriptor |
VERIFY_OOP |
| Constructor and Description |
|---|
HotSpotForeignCallsProviderImpl(HotSpotGraalRuntimeProvider runtime,
MetaAccessProvider metaAccess,
CodeCacheProvider codeCache) |
| Modifier and Type | Method and Description |
|---|---|
boolean |
canDeoptimize(ForeignCallDescriptor descriptor)
Determines if deoptimization can occur during a given foreign call.
|
LocationIdentity[] |
getKilledLocations(ForeignCallDescriptor descriptor)
Gets the set of memory locations killed by a given foreign call.
|
boolean |
isReexecutable(ForeignCallDescriptor descriptor)
Determines if a given foreign call is side-effect free.
|
void |
linkForeignCall(HotSpotProviders providers,
ForeignCallDescriptor descriptor,
long address,
boolean prependThread,
HotSpotForeignCallLinkage.Transition transition,
boolean reexecutable,
LocationIdentity... killedLocations)
Creates a stub for a foreign call.
|
HotSpotForeignCallLinkage |
lookupForeignCall(ForeignCallDescriptor descriptor)
Gets the linkage for a foreign call.
|
HotSpotForeignCallLinkage |
register(HotSpotForeignCallLinkage linkage)
Registers the linkage for a foreign call.
|
HotSpotForeignCallLinkage |
registerForeignCall(ForeignCallDescriptor descriptor,
long address,
CallingConvention.Type outgoingCcType,
HotSpotForeignCallLinkage.RegisterEffect effect,
HotSpotForeignCallLinkage.Transition transition,
boolean reexecutable,
LocationIdentity... killedLocations)
Creates and registers the linkage for a foreign call.
|
HotSpotForeignCallLinkage |
registerStubCall(ForeignCallDescriptor descriptor,
boolean reexecutable,
HotSpotForeignCallLinkage.Transition transition,
LocationIdentity... killedLocations)
Creates and registers the details for linking a foreign call to a
Stub. |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetNativeABICallerSaveRegisterspublic static final ForeignCallDescriptor OSR_MIGRATION_END
public static final ForeignCallDescriptor IDENTITY_HASHCODE
public static final ForeignCallDescriptor VERIFY_OOP
public static final ForeignCallDescriptor LOAD_AND_CLEAR_EXCEPTION
public static final ForeignCallDescriptor TEST_DEOPTIMIZE_CALL_INT
protected final HotSpotGraalRuntimeProvider runtime
protected final Map<ForeignCallDescriptor,HotSpotForeignCallLinkage> foreignCalls
protected final MetaAccessProvider metaAccess
protected final CodeCacheProvider codeCache
public static final boolean PREPEND_THREAD
public static final boolean DONT_PREPEND_THREAD
public static final boolean REEXECUTABLE
public static final boolean NOT_REEXECUTABLE
public static final LocationIdentity[] NO_LOCATIONS
public HotSpotForeignCallsProviderImpl(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, CodeCacheProvider codeCache)
public HotSpotForeignCallLinkage register(HotSpotForeignCallLinkage linkage)
public HotSpotForeignCallLinkage registerStubCall(ForeignCallDescriptor descriptor, boolean reexecutable, HotSpotForeignCallLinkage.Transition transition, LocationIdentity... killedLocations)
Stub.descriptor - the signature of the call to the stubreexecutable - 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.transition - specifies if this is a leaf callkilledLocations - the memory locations killed by the stub callpublic HotSpotForeignCallLinkage registerForeignCall(ForeignCallDescriptor descriptor, long address, CallingConvention.Type outgoingCcType, HotSpotForeignCallLinkage.RegisterEffect effect, HotSpotForeignCallLinkage.Transition transition, boolean reexecutable, LocationIdentity... killedLocations)
descriptor - the signature of the foreign calladdress - the address of the code to calloutgoingCcType - outgoing (caller) calling convention typeeffect - specifies if the call destroys or preserves all registers (apart from
temporaries which are always destroyed)transition - specifies if this is a leaf callreexecutable - 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.killedLocations - the memory locations killed by the foreign callpublic void linkForeignCall(HotSpotProviders providers, ForeignCallDescriptor descriptor, long address, boolean prependThread, HotSpotForeignCallLinkage.Transition transition, boolean reexecutable, LocationIdentity... killedLocations)
descriptor - the signature of the call to the stubaddress - the address of the foreign code to callprependThread - true if the JavaThread value for the current thread is to be prepended
to the arguments for the call to addresstransition - specifies if this is a leaf callreexecutable - 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.killedLocations - the memory locations killed by the foreign callpublic HotSpotForeignCallLinkage lookupForeignCall(ForeignCallDescriptor descriptor)
ForeignCallsProviderlookupForeignCall in interface ForeignCallsProviderpublic boolean isReexecutable(ForeignCallDescriptor descriptor)
ForeignCallsProviderisReexecutable in interface ForeignCallsProviderpublic boolean canDeoptimize(ForeignCallDescriptor descriptor)
ForeignCallsProvidercanDeoptimize in interface ForeignCallsProviderpublic LocationIdentity[] getKilledLocations(ForeignCallDescriptor descriptor)
ForeignCallsProviderLocationIdentity.any() denotes that the call kills all memory locations. Returning
any empty array denotes that the call does not kill any memory locations.getKilledLocations in interface ForeignCallsProvider