209 }
210
211 }
212
213 @Override
214 protected Assembler createAssembler(FrameMap frameMap) {
215 return new AArch64MacroAssembler(getTarget());
216 }
217
218 @Override
219 public CompilationResultBuilder newCompilationResultBuilder(LIRGenerationResult lirGenRen, FrameMap frameMap, CompilationResult compilationResult, CompilationResultBuilderFactory factory) {
220 HotSpotLIRGenerationResult gen = (HotSpotLIRGenerationResult) lirGenRen;
221 LIR lir = gen.getLIR();
222 assert gen.getDeoptimizationRescueSlot() == null || frameMap.frameNeedsAllocating() : "method that can deoptimize must have a frame";
223
224 Stub stub = gen.getStub();
225 Assembler masm = createAssembler(frameMap);
226 HotSpotFrameContext frameContext = new HotSpotFrameContext(stub != null);
227
228 DataBuilder dataBuilder = new HotSpotDataBuilder(getCodeCache().getTarget());
229 CompilationResultBuilder crb = factory.createBuilder(getCodeCache(), getForeignCalls(), frameMap, masm, dataBuilder, frameContext, lir.getOptions(), compilationResult);
230 crb.setTotalFrameSize(frameMap.totalFrameSize());
231 crb.setMaxInterpreterFrameSize(gen.getMaxInterpreterFrameSize());
232 StackSlot deoptimizationRescueSlot = gen.getDeoptimizationRescueSlot();
233 if (deoptimizationRescueSlot != null && stub == null) {
234 crb.compilationResult.setCustomStackAreaOffset(deoptimizationRescueSlot);
235 }
236
237 if (stub != null) {
238 EconomicSet<Register> destroyedCallerRegisters = gatherDestroyedCallerRegisters(lir);
239 updateStub(stub, destroyedCallerRegisters, gen.getCalleeSaveInfo(), frameMap);
240 }
241 return crb;
242 }
243
244 @Override
245 public void emitCode(CompilationResultBuilder crb, LIR lir, ResolvedJavaMethod installedCodeOwner) {
246 AArch64MacroAssembler masm = (AArch64MacroAssembler) crb.asm;
247 FrameMap frameMap = crb.frameMap;
248 RegisterConfig regConfig = frameMap.getRegisterConfig();
249 Label verifiedStub = new Label();
|
209 }
210
211 }
212
213 @Override
214 protected Assembler createAssembler(FrameMap frameMap) {
215 return new AArch64MacroAssembler(getTarget());
216 }
217
218 @Override
219 public CompilationResultBuilder newCompilationResultBuilder(LIRGenerationResult lirGenRen, FrameMap frameMap, CompilationResult compilationResult, CompilationResultBuilderFactory factory) {
220 HotSpotLIRGenerationResult gen = (HotSpotLIRGenerationResult) lirGenRen;
221 LIR lir = gen.getLIR();
222 assert gen.getDeoptimizationRescueSlot() == null || frameMap.frameNeedsAllocating() : "method that can deoptimize must have a frame";
223
224 Stub stub = gen.getStub();
225 Assembler masm = createAssembler(frameMap);
226 HotSpotFrameContext frameContext = new HotSpotFrameContext(stub != null);
227
228 DataBuilder dataBuilder = new HotSpotDataBuilder(getCodeCache().getTarget());
229 CompilationResultBuilder crb = factory.createBuilder(getCodeCache(), getForeignCalls(), frameMap, masm, dataBuilder, frameContext, lir.getOptions(), lir.getDebug(), compilationResult);
230 crb.setTotalFrameSize(frameMap.totalFrameSize());
231 crb.setMaxInterpreterFrameSize(gen.getMaxInterpreterFrameSize());
232 StackSlot deoptimizationRescueSlot = gen.getDeoptimizationRescueSlot();
233 if (deoptimizationRescueSlot != null && stub == null) {
234 crb.compilationResult.setCustomStackAreaOffset(deoptimizationRescueSlot);
235 }
236
237 if (stub != null) {
238 EconomicSet<Register> destroyedCallerRegisters = gatherDestroyedCallerRegisters(lir);
239 updateStub(stub, destroyedCallerRegisters, gen.getCalleeSaveInfo(), frameMap);
240 }
241 return crb;
242 }
243
244 @Override
245 public void emitCode(CompilationResultBuilder crb, LIR lir, ResolvedJavaMethod installedCodeOwner) {
246 AArch64MacroAssembler masm = (AArch64MacroAssembler) crb.asm;
247 FrameMap frameMap = crb.frameMap;
248 RegisterConfig regConfig = frameMap.getRegisterConfig();
249 Label verifiedStub = new Label();
|