56 * Vtable stubs expect the metaspace Method in r12. 57 */ 58 public static final Register METHOD = r12; 59 60 @Use({REG}) private Value metaspaceMethod; 61 62 private final GraalHotSpotVMConfig config; 63 64 AArch64IndirectCallOp(ResolvedJavaMethod callTarget, Value result, Value[] parameters, Value[] temps, Value metaspaceMethod, Value targetAddress, LIRFrameState state, 65 GraalHotSpotVMConfig config) { 66 super(TYPE, callTarget, result, parameters, temps, targetAddress, state); 67 this.metaspaceMethod = metaspaceMethod; 68 this.config = config; 69 } 70 71 @Override 72 public void emitCode(CompilationResultBuilder crb, AArch64MacroAssembler masm) { 73 crb.recordMark(config.MARKID_INLINE_INVOKE); 74 Register callReg = asRegister(targetAddress); 75 assert !callReg.equals(METHOD); 76 AArch64Call.indirectCall(crb, masm, callReg, callTarget, state); 77 } 78 79 @Override 80 public void verify() { 81 super.verify(); 82 assert asRegister(metaspaceMethod).equals(METHOD); 83 } 84 } | 56 * Vtable stubs expect the metaspace Method in r12. 57 */ 58 public static final Register METHOD = r12; 59 60 @Use({REG}) private Value metaspaceMethod; 61 62 private final GraalHotSpotVMConfig config; 63 64 AArch64IndirectCallOp(ResolvedJavaMethod callTarget, Value result, Value[] parameters, Value[] temps, Value metaspaceMethod, Value targetAddress, LIRFrameState state, 65 GraalHotSpotVMConfig config) { 66 super(TYPE, callTarget, result, parameters, temps, targetAddress, state); 67 this.metaspaceMethod = metaspaceMethod; 68 this.config = config; 69 } 70 71 @Override 72 public void emitCode(CompilationResultBuilder crb, AArch64MacroAssembler masm) { 73 crb.recordMark(config.MARKID_INLINE_INVOKE); 74 Register callReg = asRegister(targetAddress); 75 assert !callReg.equals(METHOD); 76 int pcOffset = masm.position(); 77 AArch64Call.indirectCall(crb, masm, callReg, callTarget, state); 78 crb.recordInlineInvokeCallOp(pcOffset, getPosition()); 79 } 80 81 @Override 82 public void verify() { 83 super.verify(); 84 assert asRegister(metaspaceMethod).equals(METHOD); 85 } 86 } |