use of com.oracle.svm.core.graal.nodes.CEntryPointUtilityNode 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;
}
});
}
use of com.oracle.svm.core.graal.nodes.CEntryPointUtilityNode in project graal by oracle.
the class CEntryPointSupport method registerEntryPointContextPlugins.
private static void registerEntryPointContextPlugins(InvocationPlugins plugins) {
Registration r = new Registration(plugins, CEntryPointContext.class);
r.register0("getCurrentIsolateThread", new InvocationPlugin() {
@Override
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
if (SubstrateOptions.MultiThreaded.getValue()) {
b.addPush(JavaKind.Object, ReadRegisterFixedNode.forIsolateThread());
} else if (SubstrateOptions.SpawnIsolates.getValue()) {
ValueNode heapBase = b.add(ReadRegisterFixedNode.forHeapBase());
ConstantNode addend = b.add(ConstantNode.forIntegerKind(FrameAccess.getWordKind(), CEntryPointSetup.SINGLE_ISOLATE_TO_SINGLE_THREAD_ADDEND));
b.addPush(JavaKind.Object, new AddNode(heapBase, addend));
} else {
b.addPush(JavaKind.Object, ConstantNode.forIntegerKind(FrameAccess.getWordKind(), CEntryPointSetup.SINGLE_THREAD_SENTINEL.rawValue()));
}
return true;
}
});
r.register0("getCurrentIsolate", new InvocationPlugin() {
@Override
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
if (SubstrateOptions.SpawnIsolates.getValue()) {
b.addPush(JavaKind.Object, ReadRegisterFixedNode.forHeapBase());
} else {
b.addPush(JavaKind.Object, ConstantNode.forIntegerKind(FrameAccess.getWordKind(), CEntryPointSetup.SINGLE_ISOLATE_SENTINEL.rawValue()));
}
return true;
}
});
r.register1("isCurrentThreadAttachedTo", Isolate.class, new InvocationPlugin() {
@Override
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode isolate) {
b.addPush(JavaKind.Boolean, new CEntryPointUtilityNode(UtilityAction.IsAttached, isolate));
return true;
}
});
}
Aggregations