public class AMD64HotSpotBackend extends HotSpotHostBackend
Modifier and Type | Class and Description |
---|---|
(package private) class |
AMD64HotSpotBackend.HotSpotFrameContext
Emits code at the verified entry point and return point(s) of a method.
|
HotSpotBackend.Options
Modifier and Type | Field and Description |
---|---|
static int |
PATCHED_VERIFIED_ENTRY_POINT_INSTRUCTION_SIZE
The size of the instruction used to patch the verified entry point of an nmethod when the
nmethod is made non-entrant or a zombie (e.g.
|
DEOPTIMIZATION_HANDLER, pagesToBang, UNCOMMON_TRAP_HANDLER
DECRYPT, DECRYPT_BLOCK, ENCRYPT, ENCRYPT_BLOCK, EXCEPTION_HANDLER, EXCEPTION_HANDLER_IN_CALLER, FETCH_UNROLL_INFO, IC_MISS_HANDLER, NEW_ARRAY, NEW_INSTANCE, NEW_MULTI_ARRAY, UNCOMMON_TRAP, UNPACK_FRAMES, UNWIND_EXCEPTION_TO_CALLER, VM_ERROR
ARITHMETIC_COS, ARITHMETIC_EXP, ARITHMETIC_LOG, ARITHMETIC_LOG10, ARITHMETIC_POW, ARITHMETIC_SIN, ARITHMETIC_TAN
Constructor and Description |
---|
AMD64HotSpotBackend(HotSpotGraalRuntimeProvider runtime,
HotSpotProviders providers) |
Modifier and Type | Method and Description |
---|---|
protected Assembler |
createAssembler(FrameMap frameMap)
Creates the assembler used to emit the machine code.
|
void |
emitCode(CompilationResultBuilder crb,
LIR lir,
ResolvedJavaMethod installedCodeOwner)
Emits the code for a given graph.
|
void |
emitCodeBody(ResolvedJavaMethod installedCodeOwner,
CompilationResultBuilder crb,
LIR lir)
Emits the code which starts at the verified entry point.
|
void |
emitCodePrefix(ResolvedJavaMethod installedCodeOwner,
CompilationResultBuilder crb,
AMD64MacroAssembler asm,
RegisterConfig regConfig,
HotSpotVMConfig config,
Label verifiedEntry)
Emits the code prior to the verified entry point.
|
void |
emitCodeSuffix(ResolvedJavaMethod installedCodeOwner,
CompilationResultBuilder crb,
AMD64MacroAssembler asm,
HotSpotVMConfig config,
FrameMap frameMap) |
protected static void |
emitStackOverflowCheck(CompilationResultBuilder crb,
int pagesToBang,
boolean afterFrameInit,
boolean isVerifiedEntryPoint)
Emits code to do stack overflow checking.
|
BytecodeLIRBuilder |
newBytecodeLIRBuilder(LIRGeneratorTool gen,
BytecodeParserTool parser) |
CompilationResultBuilder |
newCompilationResultBuilder(LIRGenerationResult lirGenRen,
FrameMap frameMap,
CompilationResult compilationResult,
CompilationResultBuilderFactory factory)
Creates the object used to fill in the details of a given compilation result.
|
FrameMap |
newFrameMap(RegisterConfig registerConfig) |
FrameMapBuilder |
newFrameMapBuilder(RegisterConfig registerConfig)
The given registerConfig is optional, in case null is passed the default RegisterConfig from
the CodeCacheProvider will be used.
|
LIRGenerationResult |
newLIRGenerationResult(String compilationUnitName,
LIR lir,
FrameMapBuilder frameMapBuilder,
ResolvedJavaMethod method,
Object stub) |
LIRGeneratorTool |
newLIRGenerator(CallingConvention cc,
LIRGenerationResult lirGenRes) |
NodeLIRBuilderTool |
newNodeLIRBuilder(StructuredGraph graph,
LIRGeneratorTool lirGen) |
RegisterAllocationConfig |
newRegisterAllocationConfig(RegisterConfig registerConfig) |
completeInitialization
gatherDefinedRegisters, getProviders, getRuntime, getStackIntrospection, getSuites, newReferenceMapBuilder, profileInstructions, updateStub
getCodeCache, getConstantReflection, getForeignCalls, getMetaAccess, getTarget
public static final int PATCHED_VERIFIED_ENTRY_POINT_INSTRUCTION_SIZE
public AMD64HotSpotBackend(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers)
public FrameMapBuilder newFrameMapBuilder(RegisterConfig registerConfig)
Backend
newFrameMapBuilder
in class Backend
public FrameMap newFrameMap(RegisterConfig registerConfig)
newFrameMap
in class Backend
public LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes)
newLIRGenerator
in class Backend
public LIRGenerationResult newLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, ResolvedJavaMethod method, Object stub)
newLIRGenerationResult
in class Backend
public NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen)
newNodeLIRBuilder
in class Backend
public BytecodeLIRBuilder newBytecodeLIRBuilder(LIRGeneratorTool gen, BytecodeParserTool parser)
newBytecodeLIRBuilder
in class Backend
gen
- the LIRGenerator the BytecodeLIRBuilder should useparser
- the bytecode parser the BytecodeLIRBuilder should useprotected static void emitStackOverflowCheck(CompilationResultBuilder crb, int pagesToBang, boolean afterFrameInit, boolean isVerifiedEntryPoint)
afterFrameInit
- specifies if the stack pointer has already been adjusted to allocate
the current frameisVerifiedEntryPoint
- specifies if the code buffer is currently at the verified entry
pointprotected Assembler createAssembler(FrameMap frameMap)
Backend
createAssembler
in class Backend
public CompilationResultBuilder newCompilationResultBuilder(LIRGenerationResult lirGenRen, FrameMap frameMap, CompilationResult compilationResult, CompilationResultBuilderFactory factory)
Backend
newCompilationResultBuilder
in class Backend
public void emitCode(CompilationResultBuilder crb, LIR lir, ResolvedJavaMethod installedCodeOwner)
Backend
public void emitCodePrefix(ResolvedJavaMethod installedCodeOwner, CompilationResultBuilder crb, AMD64MacroAssembler asm, RegisterConfig regConfig, HotSpotVMConfig config, Label verifiedEntry)
installedCodeOwner
- see Backend.emitCode(com.oracle.graal.lir.asm.CompilationResultBuilder, com.oracle.graal.lir.LIR, jdk.internal.jvmci.meta.ResolvedJavaMethod)
public void emitCodeBody(ResolvedJavaMethod installedCodeOwner, CompilationResultBuilder crb, LIR lir)
installedCodeOwner
- see Backend.emitCode(com.oracle.graal.lir.asm.CompilationResultBuilder, com.oracle.graal.lir.LIR, jdk.internal.jvmci.meta.ResolvedJavaMethod)
public void emitCodeSuffix(ResolvedJavaMethod installedCodeOwner, CompilationResultBuilder crb, AMD64MacroAssembler asm, HotSpotVMConfig config, FrameMap frameMap)
installedCodeOwner
- see Backend.emitCode(com.oracle.graal.lir.asm.CompilationResultBuilder, com.oracle.graal.lir.LIR, jdk.internal.jvmci.meta.ResolvedJavaMethod)
config
- public RegisterAllocationConfig newRegisterAllocationConfig(RegisterConfig registerConfig)
newRegisterAllocationConfig
in class Backend