diff options
Diffstat (limited to 'bindings/go/llvm/target.go')
-rw-r--r-- | bindings/go/llvm/target.go | 296 |
1 files changed, 0 insertions, 296 deletions
diff --git a/bindings/go/llvm/target.go b/bindings/go/llvm/target.go deleted file mode 100644 index 268cc0eb1979..000000000000 --- a/bindings/go/llvm/target.go +++ /dev/null @@ -1,296 +0,0 @@ -//===- target.go - Bindings for target ------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines bindings for the target component. -// -//===----------------------------------------------------------------------===// - -package llvm - -/* -#include "llvm-c/Core.h" -#include "llvm-c/Target.h" -#include "llvm-c/TargetMachine.h" -#include <stdlib.h> -*/ -import "C" -import "unsafe" -import "errors" - -type ( - TargetData struct { - C C.LLVMTargetDataRef - } - Target struct { - C C.LLVMTargetRef - } - TargetMachine struct { - C C.LLVMTargetMachineRef - } - ByteOrdering C.enum_LLVMByteOrdering - RelocMode C.LLVMRelocMode - CodeGenOptLevel C.LLVMCodeGenOptLevel - CodeGenFileType C.LLVMCodeGenFileType - CodeModel C.LLVMCodeModel -) - -const ( - BigEndian ByteOrdering = C.LLVMBigEndian - LittleEndian ByteOrdering = C.LLVMLittleEndian -) - -const ( - RelocDefault RelocMode = C.LLVMRelocDefault - RelocStatic RelocMode = C.LLVMRelocStatic - RelocPIC RelocMode = C.LLVMRelocPIC - RelocDynamicNoPic RelocMode = C.LLVMRelocDynamicNoPic -) - -const ( - CodeGenLevelNone CodeGenOptLevel = C.LLVMCodeGenLevelNone - CodeGenLevelLess CodeGenOptLevel = C.LLVMCodeGenLevelLess - CodeGenLevelDefault CodeGenOptLevel = C.LLVMCodeGenLevelDefault - CodeGenLevelAggressive CodeGenOptLevel = C.LLVMCodeGenLevelAggressive -) - -const ( - CodeModelDefault CodeModel = C.LLVMCodeModelDefault - CodeModelJITDefault CodeModel = C.LLVMCodeModelJITDefault - CodeModelSmall CodeModel = C.LLVMCodeModelSmall - CodeModelKernel CodeModel = C.LLVMCodeModelKernel - CodeModelMedium CodeModel = C.LLVMCodeModelMedium - CodeModelLarge CodeModel = C.LLVMCodeModelLarge -) - -const ( - AssemblyFile CodeGenFileType = C.LLVMAssemblyFile - ObjectFile CodeGenFileType = C.LLVMObjectFile -) - -// InitializeAllTargetInfos - The main program should call this function if it -// wants access to all available targets that LLVM is configured to support. -func InitializeAllTargetInfos() { C.LLVMInitializeAllTargetInfos() } - -// InitializeAllTargets - The main program should call this function if it wants -// to link in all available targets that LLVM is configured to support. -func InitializeAllTargets() { C.LLVMInitializeAllTargets() } - -func InitializeAllTargetMCs() { C.LLVMInitializeAllTargetMCs() } - -func InitializeAllAsmParsers() { C.LLVMInitializeAllAsmParsers() } - -func InitializeAllAsmPrinters() { C.LLVMInitializeAllAsmPrinters() } - -var initializeNativeTargetError = errors.New("Failed to initialize native target") - -// InitializeNativeTarget - The main program should call this function to -// initialize the native target corresponding to the host. This is useful -// for JIT applications to ensure that the target gets linked in correctly. -func InitializeNativeTarget() error { - fail := C.LLVMInitializeNativeTarget() - if fail != 0 { - return initializeNativeTargetError - } - return nil -} - -func InitializeNativeAsmPrinter() error { - fail := C.LLVMInitializeNativeAsmPrinter() - if fail != 0 { - return initializeNativeTargetError - } - return nil -} - -//------------------------------------------------------------------------- -// llvm.TargetData -//------------------------------------------------------------------------- - -// Creates target data from a target layout string. -// See the constructor llvm::TargetData::TargetData. -func NewTargetData(rep string) (td TargetData) { - crep := C.CString(rep) - defer C.free(unsafe.Pointer(crep)) - td.C = C.LLVMCreateTargetData(crep) - return -} - -// Converts target data to a target layout string. The string must be disposed -// with LLVMDisposeMessage. -// See the constructor llvm::TargetData::TargetData. -func (td TargetData) String() (s string) { - cmsg := C.LLVMCopyStringRepOfTargetData(td.C) - s = C.GoString(cmsg) - C.LLVMDisposeMessage(cmsg) - return -} - -// Returns the byte order of a target, either BigEndian or LittleEndian. -// See the method llvm::TargetData::isLittleEndian. -func (td TargetData) ByteOrder() ByteOrdering { return ByteOrdering(C.LLVMByteOrder(td.C)) } - -// Returns the pointer size in bytes for a target. -// See the method llvm::TargetData::getPointerSize. -func (td TargetData) PointerSize() int { return int(C.LLVMPointerSize(td.C)) } - -// Returns the integer type that is the same size as a pointer on a target. -// See the method llvm::TargetData::getIntPtrType. -func (td TargetData) IntPtrType() (t Type) { t.C = C.LLVMIntPtrType(td.C); return } - -// Computes the size of a type in bytes for a target. -// See the method llvm::TargetData::getTypeSizeInBits. -func (td TargetData) TypeSizeInBits(t Type) uint64 { - return uint64(C.LLVMSizeOfTypeInBits(td.C, t.C)) -} - -// Computes the storage size of a type in bytes for a target. -// See the method llvm::TargetData::getTypeStoreSize. -func (td TargetData) TypeStoreSize(t Type) uint64 { - return uint64(C.LLVMStoreSizeOfType(td.C, t.C)) -} - -// Computes the ABI size of a type in bytes for a target. -// See the method llvm::TargetData::getTypeAllocSize. -func (td TargetData) TypeAllocSize(t Type) uint64 { - return uint64(C.LLVMABISizeOfType(td.C, t.C)) -} - -// Computes the ABI alignment of a type in bytes for a target. -// See the method llvm::TargetData::getABITypeAlignment. -func (td TargetData) ABITypeAlignment(t Type) int { - return int(C.LLVMABIAlignmentOfType(td.C, t.C)) -} - -// Computes the call frame alignment of a type in bytes for a target. -// See the method llvm::TargetData::getCallFrameTypeAlignment. -func (td TargetData) CallFrameTypeAlignment(t Type) int { - return int(C.LLVMCallFrameAlignmentOfType(td.C, t.C)) -} - -// Computes the preferred alignment of a type in bytes for a target. -// See the method llvm::TargetData::getPrefTypeAlignment. -func (td TargetData) PrefTypeAlignment(t Type) int { - return int(C.LLVMPreferredAlignmentOfType(td.C, t.C)) -} - -// Computes the preferred alignment of a global variable in bytes for a target. -// See the method llvm::TargetData::getPreferredAlignment. -func (td TargetData) PreferredAlignment(g Value) int { - return int(C.LLVMPreferredAlignmentOfGlobal(td.C, g.C)) -} - -// Computes the structure element that contains the byte offset for a target. -// See the method llvm::StructLayout::getElementContainingOffset. -func (td TargetData) ElementContainingOffset(t Type, offset uint64) int { - return int(C.LLVMElementAtOffset(td.C, t.C, C.ulonglong(offset))) -} - -// Computes the byte offset of the indexed struct element for a target. -// See the method llvm::StructLayout::getElementOffset. -func (td TargetData) ElementOffset(t Type, element int) uint64 { - return uint64(C.LLVMOffsetOfElement(td.C, t.C, C.unsigned(element))) -} - -// Deallocates a TargetData. -// See the destructor llvm::TargetData::~TargetData. -func (td TargetData) Dispose() { C.LLVMDisposeTargetData(td.C) } - -//------------------------------------------------------------------------- -// llvm.Target -//------------------------------------------------------------------------- - -func FirstTarget() Target { - return Target{C.LLVMGetFirstTarget()} -} - -func (t Target) NextTarget() Target { - return Target{C.LLVMGetNextTarget(t.C)} -} - -func GetTargetFromTriple(triple string) (t Target, err error) { - var errstr *C.char - ctriple := C.CString(triple) - defer C.free(unsafe.Pointer(ctriple)) - fail := C.LLVMGetTargetFromTriple(ctriple, &t.C, &errstr) - if fail != 0 { - err = errors.New(C.GoString(errstr)) - C.free(unsafe.Pointer(errstr)) - } - return -} - -func (t Target) Name() string { - return C.GoString(C.LLVMGetTargetName(t.C)) -} - -func (t Target) Description() string { - return C.GoString(C.LLVMGetTargetDescription(t.C)) -} - -//------------------------------------------------------------------------- -// llvm.TargetMachine -//------------------------------------------------------------------------- - -// CreateTargetMachine creates a new TargetMachine. -func (t Target) CreateTargetMachine(Triple string, CPU string, Features string, - Level CodeGenOptLevel, Reloc RelocMode, - CodeModel CodeModel) (tm TargetMachine) { - cTriple := C.CString(Triple) - defer C.free(unsafe.Pointer(cTriple)) - cCPU := C.CString(CPU) - defer C.free(unsafe.Pointer(cCPU)) - cFeatures := C.CString(Features) - defer C.free(unsafe.Pointer(cFeatures)) - tm.C = C.LLVMCreateTargetMachine(t.C, cTriple, cCPU, cFeatures, - C.LLVMCodeGenOptLevel(Level), - C.LLVMRelocMode(Reloc), - C.LLVMCodeModel(CodeModel)) - return -} - -// CreateTargetData returns a new TargetData describing the TargetMachine's -// data layout. The returned TargetData is owned by the caller, who is -// responsible for disposing of it by calling the TargetData.Dispose method. -func (tm TargetMachine) CreateTargetData() TargetData { - return TargetData{C.LLVMCreateTargetDataLayout(tm.C)} -} - -// Triple returns the triple describing the machine (arch-vendor-os). -func (tm TargetMachine) Triple() string { - cstr := C.LLVMGetTargetMachineTriple(tm.C) - return C.GoString(cstr) -} - -func (tm TargetMachine) EmitToMemoryBuffer(m Module, ft CodeGenFileType) (MemoryBuffer, error) { - var errstr *C.char - var mb MemoryBuffer - fail := C.LLVMTargetMachineEmitToMemoryBuffer(tm.C, m.C, C.LLVMCodeGenFileType(ft), &errstr, &mb.C) - if fail != 0 { - err := errors.New(C.GoString(errstr)) - C.free(unsafe.Pointer(errstr)) - return MemoryBuffer{}, err - } - return mb, nil -} - -func (tm TargetMachine) AddAnalysisPasses(pm PassManager) { - C.LLVMAddAnalysisPasses(tm.C, pm.C) -} - -// Dispose releases resources related to the TargetMachine. -func (tm TargetMachine) Dispose() { - C.LLVMDisposeTargetMachine(tm.C) -} - -func DefaultTargetTriple() (triple string) { - cTriple := C.LLVMGetDefaultTargetTriple() - defer C.free(unsafe.Pointer(cTriple)) - triple = C.GoString(cTriple) - return -} |