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