Search in sources :

Example 6 with CEntryPointLeaveNode

use of com.oracle.svm.core.graal.nodes.CEntryPointLeaveNode in project graal by oracle.

the class CEntryPointSupport method registerEntryPointActionsPlugins.

private static void registerEntryPointActionsPlugins(InvocationPlugins plugins) {
    Registration r = new Registration(plugins, CEntryPointActions.class);
    r.register1("enterCreateIsolate", CEntryPointCreateIsolateParameters.class, new InvocationPlugin() {

        @Override
        public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode parameters) {
            b.addPush(JavaKind.Int, new CEntryPointEnterNode(EnterAction.CreateIsolate, parameters));
            return true;
        }
    });
    r.register1("enterAttachThread", Isolate.class, new InvocationPlugin() {

        @Override
        public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode isolate) {
            b.addPush(JavaKind.Int, new CEntryPointEnterNode(EnterAction.AttachThread, isolate));
            return true;
        }
    });
    r.register1("enter", IsolateThread.class, new InvocationPlugin() {

        @Override
        public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode thread) {
            b.addPush(JavaKind.Int, new CEntryPointEnterNode(EnterAction.Enter, thread));
            return true;
        }
    });
    r.register1("enterIsolate", Isolate.class, new InvocationPlugin() {

        @Override
        public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode isolate) {
            b.addPush(JavaKind.Int, new CEntryPointEnterNode(EnterAction.EnterIsolate, isolate));
            return true;
        }
    });
    InvocationPlugin bailoutPlugin = new InvocationPlugin() {

        @Override
        public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) {
            b.add(new CEntryPointPrologueBailoutNode(value));
            return true;
        }
    };
    r.register1("bailoutInPrologue", WordBase.class, bailoutPlugin);
    r.register1("bailoutInPrologue", long.class, bailoutPlugin);
    r.register1("bailoutInPrologue", double.class, bailoutPlugin);
    r.register1("bailoutInPrologue", boolean.class, bailoutPlugin);
    r.register0("bailoutInPrologue", new InvocationPlugin() {

        @Override
        public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
            b.add(new CEntryPointPrologueBailoutNode(null));
            return true;
        }
    });
    r.register0("leave", new InvocationPlugin() {

        @Override
        public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
            b.addPush(JavaKind.Int, new CEntryPointLeaveNode(LeaveAction.Leave));
            return true;
        }
    });
    r.register0("leaveDetachThread", new InvocationPlugin() {

        @Override
        public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
            b.addPush(JavaKind.Int, new CEntryPointLeaveNode(LeaveAction.DetachThread));
            return true;
        }
    });
    r.register0("leaveTearDownIsolate", new InvocationPlugin() {

        @Override
        public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
            b.addPush(JavaKind.Int, new CEntryPointLeaveNode(LeaveAction.TearDownIsolate));
            return true;
        }
    });
    r.register2("failFatally", int.class, CCharPointer.class, new InvocationPlugin() {

        @Override
        public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode arg1, ValueNode arg2) {
            b.add(new CEntryPointUtilityNode(UtilityAction.FailFatally, arg1, arg2));
            return true;
        }
    });
}
Also used : CEntryPointPrologueBailoutNode(com.oracle.svm.core.graal.nodes.CEntryPointPrologueBailoutNode) GraphBuilderContext(org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext) CEntryPointEnterNode(com.oracle.svm.core.graal.nodes.CEntryPointEnterNode) Registration(org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Registration) CEntryPointUtilityNode(com.oracle.svm.core.graal.nodes.CEntryPointUtilityNode) ValueNode(org.graalvm.compiler.nodes.ValueNode) InvocationPlugin(org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin) CEntryPointLeaveNode(com.oracle.svm.core.graal.nodes.CEntryPointLeaveNode) ResolvedJavaMethod(jdk.vm.ci.meta.ResolvedJavaMethod)

Aggregations

CEntryPointLeaveNode (com.oracle.svm.core.graal.nodes.CEntryPointLeaveNode)6 ValueNode (org.graalvm.compiler.nodes.ValueNode)6 CEntryPointEnterNode (com.oracle.svm.core.graal.nodes.CEntryPointEnterNode)4 JavaKind (jdk.vm.ci.meta.JavaKind)4 ResolvedJavaMethod (jdk.vm.ci.meta.ResolvedJavaMethod)4 StructuredGraph (org.graalvm.compiler.nodes.StructuredGraph)4 ResolvedJavaType (jdk.vm.ci.meta.ResolvedJavaType)3 FrameStateBuilder (org.graalvm.compiler.java.FrameStateBuilder)3 UniverseMetaAccess (com.oracle.graal.pointsto.infrastructure.UniverseMetaAccess)2 CEntryPointOptions (com.oracle.svm.core.c.function.CEntryPointOptions)2 CEntryPointPrologueBailoutNode (com.oracle.svm.core.graal.nodes.CEntryPointPrologueBailoutNode)2 DeadEndNode (com.oracle.svm.core.graal.nodes.DeadEndNode)2 JavaType (jdk.vm.ci.meta.JavaType)2 Signature (jdk.vm.ci.meta.Signature)2 InvokeKind (org.graalvm.compiler.nodes.CallTargetNode.InvokeKind)2 ConstantNode (org.graalvm.compiler.nodes.ConstantNode)2 InvokeWithExceptionNode (org.graalvm.compiler.nodes.InvokeWithExceptionNode)2 FloatConvertNode (org.graalvm.compiler.nodes.calc.FloatConvertNode)2 SignExtendNode (org.graalvm.compiler.nodes.calc.SignExtendNode)2 ZeroExtendNode (org.graalvm.compiler.nodes.calc.ZeroExtendNode)2