12e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen(*===-- llvm_executionengine.ml - LLVM Ocaml Interface ----------*- C++ -*-===* 22e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen * 32e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen * The LLVM Compiler Infrastructure 42e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen * 5234d529e582963ad4b5d83b911cd057fe99d1435Chris Lattner * This file is distributed under the University of Illinois Open Source 6234d529e582963ad4b5d83b911cd057fe99d1435Chris Lattner * License. See LICENSE.TXT for details. 72e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen * 82e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen *===----------------------------------------------------------------------===*) 92e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 102e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 112e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenexception Error of string 122e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 132e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenexternal register_exns: exn -> unit 142e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_register_ee_exns" 152e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 162e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 172e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenmodule GenericValue = struct 182e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen type t 192e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 202e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external of_float: Llvm.lltype -> float -> t 212e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_genericvalue_of_float" 222e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external of_pointer: 'a -> t 239c7c566efe4b942ed8597156bf66e9abf98c79b5Erick Tryzelaar = "llvm_genericvalue_of_pointer" 242e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external of_int32: Llvm.lltype -> int32 -> t 252e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_genericvalue_of_int32" 262e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external of_int: Llvm.lltype -> int -> t 272e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_genericvalue_of_int" 282e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external of_nativeint: Llvm.lltype -> nativeint -> t 292e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_genericvalue_of_nativeint" 302e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external of_int64: Llvm.lltype -> int64 -> t 312e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_genericvalue_of_int64" 322e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 332e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external as_float: Llvm.lltype -> t -> float 342e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_genericvalue_as_float" 352e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external as_pointer: t -> 'a 369c7c566efe4b942ed8597156bf66e9abf98c79b5Erick Tryzelaar = "llvm_genericvalue_as_pointer" 372e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external as_int32: t -> int32 382e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_genericvalue_as_int32" 392e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external as_int: t -> int 402e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_genericvalue_as_int" 412e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external as_nativeint: t -> nativeint 422e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_genericvalue_as_nativeint" 432e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external as_int64: t -> int64 442e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_genericvalue_as_int64" 452e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenend 462e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 472e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 482e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenmodule ExecutionEngine = struct 492e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen type t 502e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 512e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen (* FIXME: Ocaml is not running this setup code unless we use 'val' in the 522e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen interface, which causes the emission of a stub for each function; 532e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen using 'external' in the module allows direct calls into 542e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen ocaml_executionengine.c. This is hardly fatal, but it is unnecessary 552e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen overhead on top of the two stubs that are already invoked for each 562e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen call into LLVM. *) 572e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen let _ = register_exns (Error "") 582e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 5916609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar external create: Llvm.llmodule -> t 602e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_ee_create" 6116609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar external create_interpreter: Llvm.llmodule -> t 622e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_ee_create_interpreter" 630dd27da1841ca50d00aad3465f4f9b6a646fd64eErick Tryzelaar external create_jit: Llvm.llmodule -> int -> t 642e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_ee_create_jit" 652e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external dispose: t -> unit 662e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_ee_dispose" 6716609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar external add_module: Llvm.llmodule -> t -> unit 689c7c566efe4b942ed8597156bf66e9abf98c79b5Erick Tryzelaar = "llvm_ee_add_module" 6916609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar external remove_module: Llvm.llmodule -> t -> Llvm.llmodule 709c7c566efe4b942ed8597156bf66e9abf98c79b5Erick Tryzelaar = "llvm_ee_remove_module" 712e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external find_function: string -> t -> Llvm.llvalue option 722e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_ee_find_function" 732e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external run_function: Llvm.llvalue -> GenericValue.t array -> t -> 742e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen GenericValue.t 752e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_ee_run_function" 762e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external run_static_ctors: t -> unit 772e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_ee_run_static_ctors" 782e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external run_static_dtors: t -> unit 792e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_ee_run_static_dtors" 802e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external run_function_as_main: Llvm.llvalue -> string array -> 812e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen (string * string) array -> t -> int 822e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_ee_run_function_as_main" 832e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen external free_machine_code: Llvm.llvalue -> t -> unit 842e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen = "llvm_ee_free_machine_code" 857c1483bc6f009318ce66c4d37d1ba930e01a6d13Erick Tryzelaar 86791cfc211a9801002bfda6b3eb4de7e041f04f53Micah Villmow external target_data: t -> Llvm_target.DataLayout.t 8728ce1cc183582e4061f1e5ba4fb443d99a4915aeMicah Villmow = "LLVMGetExecutionEngineTargetData" 882e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 892e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen (* The following are not bound. Patches are welcome. 902e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 912e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen get_target_data: t -> lltargetdata 922e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen add_global_mapping: llvalue -> llgenericvalue -> t -> unit 932e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen clear_all_global_mappings: t -> unit 942e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen update_global_mapping: llvalue -> llgenericvalue -> t -> unit 952e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen get_pointer_to_global_if_available: llvalue -> t -> llgenericvalue 962e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen get_pointer_to_global: llvalue -> t -> llgenericvalue 972e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen get_pointer_to_function: llvalue -> t -> llgenericvalue 982e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen get_pointer_to_function_or_stub: llvalue -> t -> llgenericvalue 992e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen get_global_value_at_address: llgenericvalue -> t -> llvalue option 1002e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen store_value_to_memory: llgenericvalue -> llgenericvalue -> lltype -> unit 1012e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen initialize_memory: llvalue -> llgenericvalue -> t -> unit 1022e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen recompile_and_relink_function: llvalue -> t -> llgenericvalue 1032e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen get_or_emit_global_variable: llvalue -> t -> llgenericvalue 1042e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen disable_lazy_compilation: t -> unit 1052e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen lazy_compilation_enabled: t -> bool 1062e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen install_lazy_function_creator: (string -> llgenericvalue) -> t -> unit 1072e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 1082e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen *) 1092e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksenend 11046262684285cd7baf74425610228ac8b4547dab1Erick Tryzelaar 11146262684285cd7baf74425610228ac8b4547dab1Erick Tryzelaarexternal initialize_native_target : unit -> bool 11246262684285cd7baf74425610228ac8b4547dab1Erick Tryzelaar = "llvm_initialize_native_target" 113