[OCaml] Drop support for 3.12.1 and earlier.
[oota-llvm.git] / bindings / ocaml / executionengine / llvm_executionengine.ml
1 (*===-- llvm_executionengine.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 exception Error of string
11
12 let () = Callback.register_exception "Llvm_executionengine.Error" (Error "")
13
14 module CodeModel = struct
15   type t =
16   | Default
17   | JIT_default
18   | Small
19   | Kernel
20   | Medium
21   | Large
22 end
23
24 module GenericValue = struct
25   type t
26
27   external of_float: Llvm.lltype -> float -> t
28     = "llvm_genericvalue_of_float"
29   external of_pointer: 'a -> t
30     = "llvm_genericvalue_of_pointer"
31   external of_int32: Llvm.lltype -> int32 -> t
32     = "llvm_genericvalue_of_int32"
33   external of_int: Llvm.lltype -> int -> t
34     = "llvm_genericvalue_of_int"
35   external of_nativeint: Llvm.lltype -> nativeint -> t
36     = "llvm_genericvalue_of_nativeint"
37   external of_int64: Llvm.lltype -> int64 -> t
38     = "llvm_genericvalue_of_int64"
39
40   external as_float: Llvm.lltype -> t -> float
41     = "llvm_genericvalue_as_float"
42   external as_pointer: t -> 'a
43     = "llvm_genericvalue_as_pointer"
44   external as_int32: t -> int32
45     = "llvm_genericvalue_as_int32"
46   external as_int: t -> int
47     = "llvm_genericvalue_as_int"
48   external as_nativeint: t -> nativeint
49     = "llvm_genericvalue_as_nativeint"
50   external as_int64: t -> int64
51     = "llvm_genericvalue_as_int64"
52 end
53
54
55 module ExecutionEngine = struct
56   type t
57
58   type compileroptions = {
59     opt_level: int;
60     code_model: CodeModel.t;
61     no_framepointer_elim: bool;
62     enable_fast_isel: bool;
63   }
64
65   let default_compiler_options = {
66     opt_level = 0;
67     code_model = CodeModel.JIT_default;
68     no_framepointer_elim = false;
69     enable_fast_isel = false }
70
71   external create: Llvm.llmodule -> t
72     = "llvm_ee_create"
73   external create_interpreter: Llvm.llmodule -> t
74     = "llvm_ee_create_interpreter"
75   external create_jit: Llvm.llmodule -> int -> t
76     = "llvm_ee_create_jit"
77   external create_mcjit: Llvm.llmodule -> compileroptions -> t
78     = "llvm_ee_create_mcjit"
79   external dispose: t -> unit
80     = "llvm_ee_dispose"
81   external add_module: Llvm.llmodule -> t -> unit
82     = "llvm_ee_add_module"
83   external remove_module: Llvm.llmodule -> t -> Llvm.llmodule
84     = "llvm_ee_remove_module"
85   external find_function: string -> t -> Llvm.llvalue option
86     = "llvm_ee_find_function"
87   external run_function: Llvm.llvalue -> GenericValue.t array -> t ->
88                          GenericValue.t
89     = "llvm_ee_run_function"
90   external run_static_ctors: t -> unit
91     = "llvm_ee_run_static_ctors"
92   external run_static_dtors: t -> unit
93     = "llvm_ee_run_static_dtors"
94   external run_function_as_main: Llvm.llvalue -> string array ->
95                                  (string * string) array -> t -> int
96     = "llvm_ee_run_function_as_main"
97   external free_machine_code: Llvm.llvalue -> t -> unit
98     = "llvm_ee_free_machine_code"
99
100   external data_layout : t -> Llvm_target.DataLayout.t
101     = "llvm_ee_get_data_layout"
102
103   (* The following are not bound. Patches are welcome.
104
105   add_global_mapping: llvalue -> llgenericvalue -> t -> unit
106   clear_all_global_mappings: t -> unit
107   update_global_mapping: llvalue -> llgenericvalue -> t -> unit
108   get_pointer_to_global_if_available: llvalue -> t -> llgenericvalue
109   get_pointer_to_global: llvalue -> t -> llgenericvalue
110   get_pointer_to_function: llvalue -> t -> llgenericvalue
111   get_pointer_to_function_or_stub: llvalue -> t -> llgenericvalue
112   get_global_value_at_address: llgenericvalue -> t -> llvalue option
113   store_value_to_memory: llgenericvalue -> llgenericvalue -> lltype -> unit
114   initialize_memory: llvalue -> llgenericvalue -> t -> unit
115   recompile_and_relink_function: llvalue -> t -> llgenericvalue
116   get_or_emit_global_variable: llvalue -> t -> llgenericvalue
117   disable_lazy_compilation: t -> unit
118   lazy_compilation_enabled: t -> bool
119   install_lazy_function_creator: (string -> llgenericvalue) -> t -> unit
120
121    *)
122 end
123
124 external initialize_native_target : unit -> bool
125                                   = "llvm_initialize_native_target"