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_HANDLERDECRYPT, 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_ERRORARITHMETIC_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) |
completeInitializationgatherDefinedRegisters, getProviders, getRuntime, getStackIntrospection, getSuites, newReferenceMapBuilder, profileInstructions, updateStubgetCodeCache, getConstantReflection, getForeignCalls, getMetaAccess, getTargetpublic static final int PATCHED_VERIFIED_ENTRY_POINT_INSTRUCTION_SIZE
public AMD64HotSpotBackend(HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers)
public FrameMapBuilder newFrameMapBuilder(RegisterConfig registerConfig)
BackendnewFrameMapBuilder in class Backendpublic FrameMap newFrameMap(RegisterConfig registerConfig)
newFrameMap in class Backendpublic LIRGeneratorTool newLIRGenerator(CallingConvention cc, LIRGenerationResult lirGenRes)
newLIRGenerator in class Backendpublic LIRGenerationResult newLIRGenerationResult(String compilationUnitName, LIR lir, FrameMapBuilder frameMapBuilder, ResolvedJavaMethod method, Object stub)
newLIRGenerationResult in class Backendpublic NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen)
newNodeLIRBuilder in class Backendpublic BytecodeLIRBuilder newBytecodeLIRBuilder(LIRGeneratorTool gen, BytecodeParserTool parser)
newBytecodeLIRBuilder in class Backendgen - 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)
BackendcreateAssembler in class Backendpublic CompilationResultBuilder newCompilationResultBuilder(LIRGenerationResult lirGenRen, FrameMap frameMap, CompilationResult compilationResult, CompilationResultBuilderFactory factory)
BackendnewCompilationResultBuilder in class Backendpublic void emitCode(CompilationResultBuilder crb, LIR lir, ResolvedJavaMethod installedCodeOwner)
Backendpublic 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