@Override public CompilationResultBuilder newCompilationResultBuilder(LIRGenerationResult lirGenResult, FrameMap frameMap, CompilationResult compilationResult, CompilationResultBuilderFactory factory) { AMD64MacroAssembler masm = new AMD64MacroAssembler(getTarget()); PatchConsumerFactory patchConsumerFactory; if (SubstrateUtil.HOSTED) { patchConsumerFactory = PatchConsumerFactory.HostedPatchConsumerFactory.factory(); } else { patchConsumerFactory = PatchConsumerFactory.NativePatchConsumerFactory.factory(); } masm.setCodePatchingAnnotationConsumer(patchConsumerFactory.newConsumer(compilationResult)); SharedMethod method = ((SubstrateLIRGenerationResult) lirGenResult).getMethod(); Deoptimizer.StubType stubType = method.getDeoptStubType(); DataBuilder dataBuilder = new SubstrateDataBuilder(); final FrameContext frameContext; if (stubType == Deoptimizer.StubType.EntryStub) { frameContext = new DeoptEntryStubContext(); } else if (stubType == Deoptimizer.StubType.ExitStub) { frameContext = new DeoptExitStubContext(); } else { frameContext = new SubstrateAMD64FrameContext(); } LIR lir = lirGenResult.getLIR(); OptionValues options = lir.getOptions(); DebugContext debug = lir.getDebug(); Register nullRegister = useLinearPointerCompression() ? getHeapBaseRegister(lirGenResult) : Register.None; CompilationResultBuilder tasm = factory.createBuilder(getCodeCache(), getForeignCalls(), lirGenResult.getFrameMap(), masm, dataBuilder, frameContext, options, debug, compilationResult, nullRegister); tasm.setTotalFrameSize(lirGenResult.getFrameMap().totalFrameSize()); return tasm; }