< 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 >