1 |
(*===-- llvm_target.mli - LLVM Ocaml Interface -----------------*- OCaml -*-===* |
2 |
* |
3 |
* The LLVM Compiler Infrastructure |
4 |
* |
5 |
* This file is distributed under the University of Illinois Open Source |
6 |
* License. See LICENSE.TXT for details. |
7 |
* |
8 |
*===----------------------------------------------------------------------===*) |
9 |
|
10 |
(** Target Information. |
11 |
|
12 |
This interface provides an ocaml API for LLVM target information, |
13 |
the classes in the Target library. *) |
14 |
|
15 |
module Endian : sig |
16 |
type t = |
17 |
| Big |
18 |
| Little |
19 |
end |
20 |
|
21 |
module DataLayout : sig |
22 |
type t |
23 |
|
24 |
(** [DataLayout.create rep] parses the target data string representation [rep]. |
25 |
See the constructor llvm::DataLayout::DataLayout. *) |
26 |
external create : string -> t = "llvm_targetdata_create" |
27 |
|
28 |
(** [add_target_data td pm] adds the target data [td] to the pass manager [pm]. |
29 |
Does not take ownership of the target data. |
30 |
See the method llvm::PassManagerBase::add. *) |
31 |
external add : t -> [<Llvm.PassManager.any] Llvm.PassManager.t -> unit |
32 |
= "llvm_targetdata_add" |
33 |
|
34 |
(** [as_string td] is the string representation of the target data [td]. |
35 |
See the constructor llvm::DataLayout::DataLayout. *) |
36 |
external as_string : t -> string = "llvm_targetdata_as_string" |
37 |
|
38 |
(** Deallocates a DataLayout. |
39 |
See the destructor llvm::DataLayout::~DataLayout. *) |
40 |
external dispose : t -> unit = "llvm_targetdata_dispose" |
41 |
end |
42 |
|
43 |
(** Returns the byte order of a target, either LLVMBigEndian or |
44 |
LLVMLittleEndian. |
45 |
See the method llvm::DataLayout::isLittleEndian. *) |
46 |
external byte_order : DataLayout.t -> Endian.t = "llvm_byte_order" |
47 |
|
48 |
(** Returns the pointer size in bytes for a target. |
49 |
See the method llvm::DataLayout::getPointerSize. *) |
50 |
external pointer_size : DataLayout.t -> int = "llvm_pointer_size" |
51 |
|
52 |
(** Returns the integer type that is the same size as a pointer on a target. |
53 |
See the method llvm::DataLayout::getIntPtrType. *) |
54 |
external intptr_type : DataLayout.t -> Llvm.lltype = "LLVMIntPtrType" |
55 |
|
56 |
(** Computes the size of a type in bytes for a target. |
57 |
See the method llvm::DataLayout::getTypeSizeInBits. *) |
58 |
external size_in_bits : DataLayout.t -> Llvm.lltype -> Int64.t |
59 |
= "llvm_size_in_bits" |
60 |
|
61 |
(** Computes the storage size of a type in bytes for a target. |
62 |
See the method llvm::DataLayout::getTypeStoreSize. *) |
63 |
external store_size : DataLayout.t -> Llvm.lltype -> Int64.t = "llvm_store_size" |
64 |
|
65 |
(** Computes the ABI size of a type in bytes for a target. |
66 |
See the method llvm::DataLayout::getTypeAllocSize. *) |
67 |
external abi_size : DataLayout.t -> Llvm.lltype -> Int64.t = "llvm_abi_size" |
68 |
|
69 |
(** Computes the ABI alignment of a type in bytes for a target. |
70 |
See the method llvm::DataLayout::getTypeABISize. *) |
71 |
external abi_align : DataLayout.t -> Llvm.lltype -> int = "llvm_abi_align" |
72 |
|
73 |
(** Computes the call frame alignment of a type in bytes for a target. |
74 |
See the method llvm::DataLayout::getTypeABISize. *) |
75 |
external stack_align : DataLayout.t -> Llvm.lltype -> int = "llvm_stack_align" |
76 |
|
77 |
(** Computes the preferred alignment of a type in bytes for a target. |
78 |
See the method llvm::DataLayout::getTypeABISize. *) |
79 |
external preferred_align : DataLayout.t -> Llvm.lltype -> int |
80 |
= "llvm_preferred_align" |
81 |
|
82 |
(** Computes the preferred alignment of a global variable in bytes for a target. |
83 |
See the method llvm::DataLayout::getPreferredAlignment. *) |
84 |
external preferred_align_of_global : DataLayout.t -> Llvm.llvalue -> int |
85 |
= "llvm_preferred_align_of_global" |
86 |
|
87 |
(** Computes the structure element that contains the byte offset for a target. |
88 |
See the method llvm::StructLayout::getElementContainingOffset. *) |
89 |
external element_at_offset : DataLayout.t -> Llvm.lltype -> Int64.t -> int |
90 |
= "llvm_element_at_offset" |
91 |
|
92 |
(** Computes the byte offset of the indexed struct element for a target. |
93 |
See the method llvm::StructLayout::getElementContainingOffset. *) |
94 |
external offset_of_element : DataLayout.t -> Llvm.lltype -> int -> Int64.t |
95 |
= "llvm_offset_of_element" |