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, wait
getNativeABICallerSaveRegisters
public 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 address
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 HotSpotForeignCallLinkage lookupForeignCall(ForeignCallDescriptor descriptor)
ForeignCallsProvider
lookupForeignCall
in interface ForeignCallsProvider
public boolean isReexecutable(ForeignCallDescriptor descriptor)
ForeignCallsProvider
isReexecutable
in interface ForeignCallsProvider
public boolean canDeoptimize(ForeignCallDescriptor descriptor)
ForeignCallsProvider
canDeoptimize
in interface ForeignCallsProvider
public LocationIdentity[] getKilledLocations(ForeignCallDescriptor descriptor)
ForeignCallsProvider
LocationIdentity.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