Mercurial > hg > Members > tobaru > cbc > CbC_llvm
comparison bindings/ocaml/target/llvm_target.ml @ 0:95c75e76d11b
LLVM 3.4
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 13:56:28 +0900 |
parents | |
children | 60c9769439b8 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:95c75e76d11b |
---|---|
1 (*===-- llvm_target.ml - 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 module Endian = struct | |
11 type t = | |
12 | Big | |
13 | Little | |
14 end | |
15 | |
16 module CodeGenOptLevel = struct | |
17 type t = | |
18 | None | |
19 | Less | |
20 | Default | |
21 | Aggressive | |
22 end | |
23 | |
24 module RelocMode = struct | |
25 type t = | |
26 | Default | |
27 | Static | |
28 | PIC | |
29 | DynamicNoPIC | |
30 end | |
31 | |
32 module CodeModel = struct | |
33 type t = | |
34 | Default | |
35 | JITDefault | |
36 | Small | |
37 | Kernel | |
38 | Medium | |
39 | Large | |
40 end | |
41 | |
42 module CodeGenFileType = struct | |
43 type t = | |
44 | AssemblyFile | |
45 | ObjectFile | |
46 end | |
47 | |
48 exception Error of string | |
49 | |
50 external register_exns : exn -> unit = "llvm_register_target_exns" | |
51 let _ = register_exns (Error "") | |
52 | |
53 module DataLayout = struct | |
54 type t | |
55 | |
56 external of_string : string -> t = "llvm_datalayout_of_string" | |
57 external as_string : t -> string = "llvm_datalayout_as_string" | |
58 external add_to_pass_manager : [<Llvm.PassManager.any] | |
59 Llvm.PassManager.t -> t -> unit | |
60 = "llvm_datalayout_add_to_pass_manager" | |
61 external byte_order : t -> Endian.t = "llvm_datalayout_byte_order" | |
62 external pointer_size : t -> int = "llvm_datalayout_pointer_size" | |
63 external intptr_type : Llvm.llcontext -> t -> Llvm.lltype | |
64 = "llvm_datalayout_intptr_type" | |
65 external qualified_pointer_size : int -> t -> int | |
66 = "llvm_datalayout_qualified_pointer_size" | |
67 external qualified_intptr_type : Llvm.llcontext -> int -> t -> Llvm.lltype | |
68 = "llvm_datalayout_qualified_intptr_type" | |
69 external size_in_bits : Llvm.lltype -> t -> Int64.t | |
70 = "llvm_datalayout_size_in_bits" | |
71 external store_size : Llvm.lltype -> t -> Int64.t | |
72 = "llvm_datalayout_store_size" | |
73 external abi_size : Llvm.lltype -> t -> Int64.t | |
74 = "llvm_datalayout_abi_size" | |
75 external abi_align : Llvm.lltype -> t -> int | |
76 = "llvm_datalayout_abi_align" | |
77 external stack_align : Llvm.lltype -> t -> int | |
78 = "llvm_datalayout_stack_align" | |
79 external preferred_align : Llvm.lltype -> t -> int | |
80 = "llvm_datalayout_preferred_align" | |
81 external preferred_align_of_global : Llvm.llvalue -> t -> int | |
82 = "llvm_datalayout_preferred_align_of_global" | |
83 external element_at_offset : Llvm.lltype -> Int64.t -> t -> int | |
84 = "llvm_datalayout_element_at_offset" | |
85 external offset_of_element : Llvm.lltype -> int -> t -> Int64.t | |
86 = "llvm_datalayout_offset_of_element" | |
87 end | |
88 | |
89 module Target = struct | |
90 type t | |
91 | |
92 external default_triple : unit -> string = "llvm_target_default_triple" | |
93 external first : unit -> t option = "llvm_target_first" | |
94 external succ : t -> t option = "llvm_target_succ" | |
95 external by_name : string -> t option = "llvm_target_by_name" | |
96 external by_triple : string -> t = "llvm_target_by_triple" | |
97 external name : t -> string = "llvm_target_name" | |
98 external description : t -> string = "llvm_target_description" | |
99 external has_jit : t -> bool = "llvm_target_has_jit" | |
100 external has_target_machine : t -> bool = "llvm_target_has_target_machine" | |
101 external has_asm_backend : t -> bool = "llvm_target_has_asm_backend" | |
102 | |
103 let all () = | |
104 let rec step elem lst = | |
105 match elem with | |
106 | Some target -> step (succ target) (target :: lst) | |
107 | None -> lst | |
108 in | |
109 step (first ()) [] | |
110 end | |
111 | |
112 module TargetMachine = struct | |
113 type t | |
114 | |
115 external create : triple:string -> ?cpu:string -> ?features:string -> | |
116 ?level:CodeGenOptLevel.t -> ?reloc_mode:RelocMode.t -> | |
117 ?code_model:CodeModel.t -> Target.t -> t | |
118 = "llvm_create_targetmachine_bytecode" | |
119 "llvm_create_targetmachine_native" | |
120 external target : t -> Target.t | |
121 = "llvm_targetmachine_target" | |
122 external triple : t -> string | |
123 = "llvm_targetmachine_triple" | |
124 external cpu : t -> string | |
125 = "llvm_targetmachine_cpu" | |
126 external features : t -> string | |
127 = "llvm_targetmachine_features" | |
128 external data_layout : t -> DataLayout.t | |
129 = "llvm_targetmachine_data_layout" | |
130 external set_verbose_asm : bool -> t -> unit | |
131 = "llvm_targetmachine_set_verbose_asm" | |
132 external emit_to_file : Llvm.llmodule -> CodeGenFileType.t -> string -> | |
133 t -> unit | |
134 = "llvm_targetmachine_emit_to_file" | |
135 external emit_to_memory_buffer : Llvm.llmodule -> CodeGenFileType.t -> | |
136 t -> Llvm.llmemorybuffer | |
137 = "llvm_targetmachine_emit_to_memory_buffer" | |
138 end |