< prev index next >
src/jdk.vm.ci/share/classes/jdk.vm.ci.code/src/jdk/vm/ci/code/CodeCacheProvider.java
Print this page
*** 20,59 ****
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package jdk.vm.ci.code;
! import jdk.vm.ci.code.CompilationResult.*;
! import jdk.vm.ci.code.DataSection.*;
! import jdk.vm.ci.meta.*;
/**
* Access to code cache related details and requirements.
*/
public interface CodeCacheProvider {
/**
! * Adds the given compilation result as an implementation of the given method without making it
! * the default implementation.
*
! * @param method a method to which the executable code is begin added
* @param compResult the compilation result to be added
! * @param speculationLog the speculation log to be used
! * @return a reference to the compiled and ready-to-run code or throws a
! * {@link BailoutException} if the code installation failed
*/
! InstalledCode addMethod(ResolvedJavaMethod method, CompilationResult compResult, SpeculationLog speculationLog, InstalledCode predefinedInstalledCode);
/**
! * Sets the given compilation result as the default implementation of the given method.
*
! * @param method a method to which the executable code is begin added
* @param compResult the compilation result to be added
! * @return a reference to the compiled and ready-to-run code or null if the code installation
! * failed
*/
! InstalledCode setDefaultMethod(ResolvedJavaMethod method, CompilationResult compResult);
/**
* Gets a name for a {@link Mark} mark.
*/
default String getMarkName(Mark mark) {
--- 20,100 ----
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package jdk.vm.ci.code;
! import jdk.vm.ci.code.CompilationResult.Call;
! import jdk.vm.ci.code.CompilationResult.DataPatch;
! import jdk.vm.ci.code.CompilationResult.Mark;
! import jdk.vm.ci.code.DataSection.Data;
! import jdk.vm.ci.meta.Constant;
! import jdk.vm.ci.meta.JavaConstant;
! import jdk.vm.ci.meta.ResolvedJavaMethod;
! import jdk.vm.ci.meta.SpeculationLog;
/**
* Access to code cache related details and requirements.
*/
public interface CodeCacheProvider {
/**
! * Installs code for a given method based on a given compilation result without making it the
! * default implementation of the method.
*
! * @param method a method implemented by the installed code
* @param compResult the compilation result to be added
! * @param log the speculation log to be used
! * @param installedCode a predefined {@link InstalledCode} object to use as a reference to the
! * installed code. If {@code null}, a new {@link InstalledCode} object will be
! * created.
! * @return a reference to the ready-to-run code
! * @throws BailoutException if the code installation failed
*/
! default InstalledCode addCode(ResolvedJavaMethod method, CompilationResult compResult, SpeculationLog log, InstalledCode installedCode) {
! return installCode(new CompilationRequest(method), compResult, installedCode, log, false);
! }
!
! /**
! * Installs code for a given method based on a given compilation result and makes it the default
! * implementation of the method.
! *
! * @param method a method implemented by the installed code and for which the installed code
! * becomes the default implementation
! * @param compResult the compilation result to be added
! * @return a reference to the ready-to-run code
! * @throws BailoutException if the code installation failed
! */
! default InstalledCode setDefaultCode(ResolvedJavaMethod method, CompilationResult compResult) {
! return installCode(new CompilationRequest(method), compResult, null, null, true);
! }
/**
! * Installs code based on a given compilation result.
*
! * @param compRequest details of the method compiled to produce {@code compResult} or
! * {@code null} if the input to {@code compResult} was not a
! * {@link ResolvedJavaMethod}
* @param compResult the compilation result to be added
! * @param installedCode a pre-allocated {@link InstalledCode} object to use as a reference to
! * the installed code. If {@code null}, a new {@link InstalledCode} object will be
! * created.
! * @param log the speculation log to be used
! * @param isDefault specifies if the installed code should be made the default implementation of
! * {@code compRequest.getMethod()}. The default implementation for a method is the
! * code executed for standard calls to the method. This argument is ignored if
! * {@code compRequest == null}.
! * @return a reference to the compiled and ready-to-run installed code
! * @throws BailoutException if the code installation failed
! */
! InstalledCode installCode(CompilationRequest compRequest, CompilationResult compResult, InstalledCode installedCode, SpeculationLog log, boolean isDefault);
!
! /**
! * Invalidates {@code installedCode} such that {@link InvalidInstalledCodeException} will be
! * raised the next time {@code installedCode} is
! * {@linkplain InstalledCode#executeVarargs(Object...) executed}.
*/
! void invalidateInstalledCode(InstalledCode installedCode);
/**
* Gets a name for a {@link Mark} mark.
*/
default String getMarkName(Mark mark) {
*** 100,105 ****
--- 141,158 ----
/**
* Create a new speculation log for the target runtime.
*/
SpeculationLog createSpeculationLog();
+
+ /**
+ * Returns the maximum absolute offset of a PC relative call to a given address from any
+ * position in the code cache or -1 when not applicable. Intended for determining the required
+ * size of address/offset fields.
+ */
+ long getMaxCallTargetOffset(long address);
+
+ /**
+ * Determines if debug info should also be emitted at non-safepoint locations.
+ */
+ boolean shouldDebugNonSafepoints();
}
< prev index next >