Target.cpp revision 198090
1193323Sed//===-- Target.cpp --------------------------------------------------------===// 2193323Sed// 3193323Sed// The LLVM Compiler Infrastructure 4193323Sed// 5193323Sed// This file is distributed under the University of Illinois Open Source 6193323Sed// License. See LICENSE.TXT for details. 7193323Sed// 8193323Sed//===----------------------------------------------------------------------===// 9193323Sed// 10193323Sed// This file implements the C bindings for libLLVMTarget.a, which implements 11193323Sed// target information. 12193323Sed// 13193323Sed//===----------------------------------------------------------------------===// 14193323Sed 15193323Sed#include "llvm-c/Target.h" 16193323Sed#include "llvm/PassManager.h" 17193323Sed#include "llvm/Target/TargetData.h" 18193323Sed#include <cstring> 19193323Sed 20193323Sedusing namespace llvm; 21193323Sed 22193323SedLLVMTargetDataRef LLVMCreateTargetData(const char *StringRep) { 23193323Sed return wrap(new TargetData(StringRep)); 24193323Sed} 25193323Sed 26193323Sedvoid LLVMAddTargetData(LLVMTargetDataRef TD, LLVMPassManagerRef PM) { 27193323Sed unwrap(PM)->add(new TargetData(*unwrap(TD))); 28193323Sed} 29193323Sed 30193323Sedchar *LLVMCopyStringRepOfTargetData(LLVMTargetDataRef TD) { 31193323Sed std::string StringRep = unwrap(TD)->getStringRepresentation(); 32193323Sed return strdup(StringRep.c_str()); 33193323Sed} 34193323Sed 35193323SedLLVMByteOrdering LLVMByteOrder(LLVMTargetDataRef TD) { 36193323Sed return unwrap(TD)->isLittleEndian(); 37193323Sed} 38193323Sed 39193323Sedunsigned LLVMPointerSize(LLVMTargetDataRef TD) { 40193323Sed return unwrap(TD)->getPointerSize(); 41193323Sed} 42193323Sed 43193323SedLLVMTypeRef LLVMIntPtrType(LLVMTargetDataRef TD) { 44198090Srdivacky return wrap(unwrap(TD)->getIntPtrType(getGlobalContext())); 45193323Sed} 46193323Sed 47193323Sedunsigned long long LLVMSizeOfTypeInBits(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 48193323Sed return unwrap(TD)->getTypeSizeInBits(unwrap(Ty)); 49193323Sed} 50193323Sed 51193323Sedunsigned long long LLVMStoreSizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 52193323Sed return unwrap(TD)->getTypeStoreSize(unwrap(Ty)); 53193323Sed} 54193323Sed 55193323Sedunsigned long long LLVMABISizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 56193323Sed return unwrap(TD)->getTypeAllocSize(unwrap(Ty)); 57193323Sed} 58193323Sed 59193323Sedunsigned LLVMABIAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 60193323Sed return unwrap(TD)->getABITypeAlignment(unwrap(Ty)); 61193323Sed} 62193323Sed 63193323Sedunsigned LLVMCallFrameAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 64193323Sed return unwrap(TD)->getCallFrameTypeAlignment(unwrap(Ty)); 65193323Sed} 66193323Sed 67193323Sedunsigned LLVMPreferredAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 68193323Sed return unwrap(TD)->getPrefTypeAlignment(unwrap(Ty)); 69193323Sed} 70193323Sed 71193323Sedunsigned LLVMPreferredAlignmentOfGlobal(LLVMTargetDataRef TD, 72193323Sed LLVMValueRef GlobalVar) { 73193323Sed return unwrap(TD)->getPreferredAlignment(unwrap<GlobalVariable>(GlobalVar)); 74193323Sed} 75193323Sed 76193323Sedunsigned LLVMElementAtOffset(LLVMTargetDataRef TD, LLVMTypeRef StructTy, 77193323Sed unsigned long long Offset) { 78193323Sed const StructType *STy = unwrap<StructType>(StructTy); 79193323Sed return unwrap(TD)->getStructLayout(STy)->getElementContainingOffset(Offset); 80193323Sed} 81193323Sed 82193323Sedunsigned long long LLVMOffsetOfElement(LLVMTargetDataRef TD, LLVMTypeRef StructTy, 83193323Sed unsigned Element) { 84193323Sed const StructType *STy = unwrap<StructType>(StructTy); 85193323Sed return unwrap(TD)->getStructLayout(STy)->getElementOffset(Element); 86193323Sed} 87193323Sed 88193323Sedvoid LLVMInvalidateStructLayout(LLVMTargetDataRef TD, LLVMTypeRef StructTy) { 89193323Sed unwrap(TD)->InvalidateStructLayoutInfo(unwrap<StructType>(StructTy)); 90193323Sed} 91193323Sed 92193323Sedvoid LLVMDisposeTargetData(LLVMTargetDataRef TD) { 93193323Sed delete unwrap(TD); 94193323Sed} 95