< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64IndirectCallOp.java

Print this page




  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 }
< prev index next >