< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.aarch64/src/org/graalvm/compiler/lir/aarch64/AArch64Call.java

Print this page

        

@@ -38,10 +38,11 @@
 import org.graalvm.compiler.asm.aarch64.AArch64MacroAssembler;
 import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
 import org.graalvm.compiler.lir.LIRFrameState;
 import org.graalvm.compiler.lir.LIRInstructionClass;
 import org.graalvm.compiler.lir.Opcode;
+import org.graalvm.compiler.lir.StandardOp.LabelHoldingOp;
 import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
 
 import jdk.vm.ci.code.Register;
 import jdk.vm.ci.meta.InvokeTarget;
 import jdk.vm.ci.meta.ResolvedJavaMethod;

@@ -124,11 +125,11 @@
         public void emitCode(CompilationResultBuilder crb, AArch64MacroAssembler masm) {
             directCall(crb, masm, callTarget, null, state);
         }
     }
 
-    public abstract static class ForeignCallOp extends CallOp {
+    public abstract static class ForeignCallOp extends CallOp implements LabelHoldingOp {
         protected final ForeignCallLinkage callTarget;
         protected final Label label;
 
         protected ForeignCallOp(LIRInstructionClass<? extends ForeignCallOp> c, ForeignCallLinkage callTarget, Value result, Value[] parameters, Value[] temps, LIRFrameState state, Label label) {
             super(c, result, parameters, temps, state);

@@ -145,10 +146,15 @@
         public void emitCode(CompilationResultBuilder crb, AArch64MacroAssembler masm) {
             emitCall(crb, masm);
         }
 
         protected abstract void emitCall(CompilationResultBuilder crb, AArch64MacroAssembler masm);
+
+        @Override
+        public Label getLabel() {
+            return label;
+        }
     }
 
     @Opcode("NEAR_FOREIGN_CALL")
     public static class DirectNearForeignCallOp extends ForeignCallOp {
         public static final LIRInstructionClass<DirectNearForeignCallOp> TYPE = LIRInstructionClass.create(DirectNearForeignCallOp.class);
< prev index next >