use of com.oracle.truffle.llvm.runtime.types.Type in project sulong by graalvm.
the class Module method createFunction.
private void createFunction(long[] args) {
final int recordOffset = useStrTab() ? STRTAB_RECORD_OFFSET : 0;
Type type = types.get(args[FUNCTION_TYPE + recordOffset]);
if (type instanceof PointerType) {
type = ((PointerType) type).getPointeeType();
}
final FunctionType functionType = (FunctionType) type;
final boolean isPrototype = args[FUNCTION_ISPROTOTYPE + recordOffset] != 0;
final Linkage linkage = Linkage.decode(args[FUNCTION_LINKAGE + recordOffset]);
final AttributesCodeEntry paramAttr = paramAttributes.getCodeEntry(args[FUNCTION_PARAMATTR + recordOffset]);
if (isPrototype) {
final FunctionDeclaration function = new FunctionDeclaration(functionType, linkage, paramAttr);
module.addFunctionDeclaration(function);
scope.addSymbol(function, function.getType());
if (useStrTab()) {
readNameFromStrTab(args, function);
}
} else {
final FunctionDefinition function = new FunctionDefinition(functionType, linkage, paramAttr);
module.addFunctionDefinition(function);
scope.addSymbol(function, function.getType());
if (useStrTab()) {
readNameFromStrTab(args, function);
}
functionQueue.addLast(function);
}
}
use of com.oracle.truffle.llvm.runtime.types.Type in project sulong by graalvm.
the class StackManager method createFrame.
public static FrameDescriptor createFrame(FunctionDefinition function) {
final FrameDescriptor frame = new FrameDescriptor();
frame.addFrameSlot(LLVMException.FRAME_SLOT_ID, null, FrameSlotKind.Object);
frame.addFrameSlot(LLVMStack.FRAME_ID, PointerType.VOID, FrameSlotKind.Object);
for (FunctionParameter parameter : function.getParameters()) {
Type type = parameter.getType();
if (parameter.isSourceVariable()) {
type = type.shallowCopy();
}
frame.addFrameSlot(parameter.getName(), type, Type.getFrameSlotKind(type));
}
final StackAllocationFunctionVisitor functionVisitor = new StackAllocationFunctionVisitor(frame);
function.accept((FunctionVisitor) functionVisitor);
return frame;
}
use of com.oracle.truffle.llvm.runtime.types.Type in project sulong by graalvm.
the class LLVMSetInteropTypeNode method executeGeneric.
@Override
public Object executeGeneric(VirtualFrame frame) {
final Type type = (Type) frameSlot.getInfo();
type.setInteropType(interopType);
return null;
}
use of com.oracle.truffle.llvm.runtime.types.Type in project sulong by graalvm.
the class BasicNodeFactory method createVectorLiteralNode.
@Override
public LLVMExpressionNode createVectorLiteralNode(LLVMParserRuntime runtime, List<LLVMExpressionNode> listValues, Type type) {
LLVMExpressionNode[] vals = listValues.toArray(new LLVMExpressionNode[listValues.size()]);
Type llvmType = ((VectorType) type).getElementType();
if (llvmType instanceof PrimitiveType) {
switch(((PrimitiveType) llvmType).getPrimitiveKind()) {
case I1:
return LLVMVectorI1LiteralNodeGen.create(vals);
case I8:
return LLVMVectorI8LiteralNodeGen.create(vals);
case I16:
return LLVMVectorI16LiteralNodeGen.create(vals);
case I32:
return LLVMVectorI32LiteralNodeGen.create(vals);
case I64:
return LLVMVectorI64LiteralNodeGen.create(vals);
case FLOAT:
return LLVMVectorFloatLiteralNodeGen.create(vals);
case DOUBLE:
return LLVMVectorDoubleLiteralNodeGen.create(vals);
default:
throw new AssertionError();
}
} else if (llvmType instanceof PointerType) {
if (((PointerType) llvmType).getPointeeType() instanceof FunctionType) {
return LLVMVectorFunctionLiteralNodeGen.create(vals);
} else {
return LLVMVectorAddressLiteralNodeGen.create(vals);
}
} else {
throw new AssertionError(llvmType + " not yet supported");
}
}
use of com.oracle.truffle.llvm.runtime.types.Type in project sulong by graalvm.
the class BasicNodeFactory method allocateGlobalIntern.
private static Object allocateGlobalIntern(LLVMParserRuntime runtime, final GlobalValueSymbol global, LLVMSourceSymbol sourceSymbol) {
final Type resolvedType = ((PointerType) global.getType()).getPointeeType();
final String name = global.getName();
LLVMContext context = runtime.getContext();
if (global.isExternal()) {
NFIContextExtension nfiContextExtension = context.getContextExtension(NFIContextExtension.class);
return LLVMGlobal.external(context, global, name, resolvedType, LLVMAddress.fromLong(nfiContextExtension.getNativeHandle(context, name)), sourceSymbol);
} else {
return LLVMGlobal.internal(context, global, name, resolvedType, sourceSymbol);
}
}
Aggregations