mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	This commit brings the module structure, argument order and primitive names in Llvm_target in order with the rest of the bindings, in preparation for adding TargetMachine API. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194773 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			112 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| (*===-- llvm_executionengine.ml - LLVM OCaml Interface ----------*- C++ -*-===*
 | |
|  *
 | |
|  *                     The LLVM Compiler Infrastructure
 | |
|  *
 | |
|  * This file is distributed under the University of Illinois Open Source
 | |
|  * License. See LICENSE.TXT for details.
 | |
|  *
 | |
|  *===----------------------------------------------------------------------===*)
 | |
| 
 | |
| 
 | |
| exception Error of string
 | |
| 
 | |
| external register_exns: exn -> unit
 | |
|   = "llvm_register_ee_exns"
 | |
| 
 | |
| 
 | |
| module GenericValue = struct
 | |
|   type t
 | |
|   
 | |
|   external of_float: Llvm.lltype -> float -> t
 | |
|     = "llvm_genericvalue_of_float"
 | |
|   external of_pointer: 'a -> t
 | |
|     = "llvm_genericvalue_of_pointer"
 | |
|   external of_int32: Llvm.lltype -> int32 -> t
 | |
|     = "llvm_genericvalue_of_int32"
 | |
|   external of_int: Llvm.lltype -> int -> t
 | |
|     = "llvm_genericvalue_of_int"
 | |
|   external of_nativeint: Llvm.lltype -> nativeint -> t
 | |
|     = "llvm_genericvalue_of_nativeint"
 | |
|   external of_int64: Llvm.lltype -> int64 -> t
 | |
|     = "llvm_genericvalue_of_int64"
 | |
|   
 | |
|   external as_float: Llvm.lltype -> t -> float
 | |
|     = "llvm_genericvalue_as_float"
 | |
|   external as_pointer: t -> 'a
 | |
|     = "llvm_genericvalue_as_pointer"
 | |
|   external as_int32: t -> int32
 | |
|     = "llvm_genericvalue_as_int32"
 | |
|   external as_int: t -> int
 | |
|     = "llvm_genericvalue_as_int"
 | |
|   external as_nativeint: t -> nativeint
 | |
|     = "llvm_genericvalue_as_nativeint"
 | |
|   external as_int64: t -> int64
 | |
|     = "llvm_genericvalue_as_int64"
 | |
| end
 | |
| 
 | |
| 
 | |
| module ExecutionEngine = struct
 | |
|   type t
 | |
|   
 | |
|   (* FIXME: Ocaml is not running this setup code unless we use 'val' in the
 | |
|             interface, which causes the emission of a stub for each function;
 | |
|             using 'external' in the module allows direct calls into 
 | |
|             ocaml_executionengine.c. This is hardly fatal, but it is unnecessary
 | |
|             overhead on top of the two stubs that are already invoked for each 
 | |
|             call into LLVM. *)
 | |
|   let _ = register_exns (Error "")
 | |
|   
 | |
|   external create: Llvm.llmodule -> t
 | |
|     = "llvm_ee_create"
 | |
|   external create_interpreter: Llvm.llmodule -> t
 | |
|     = "llvm_ee_create_interpreter"
 | |
|   external create_jit: Llvm.llmodule -> int -> t
 | |
|     = "llvm_ee_create_jit"
 | |
|   external dispose: t -> unit
 | |
|     = "llvm_ee_dispose"
 | |
|   external add_module: Llvm.llmodule -> t -> unit
 | |
|     = "llvm_ee_add_module"
 | |
|   external remove_module: Llvm.llmodule -> t -> Llvm.llmodule
 | |
|     = "llvm_ee_remove_module"
 | |
|   external find_function: string -> t -> Llvm.llvalue option
 | |
|     = "llvm_ee_find_function"
 | |
|   external run_function: Llvm.llvalue -> GenericValue.t array -> t ->
 | |
|                          GenericValue.t
 | |
|     = "llvm_ee_run_function"
 | |
|   external run_static_ctors: t -> unit
 | |
|     = "llvm_ee_run_static_ctors"
 | |
|   external run_static_dtors: t -> unit
 | |
|     = "llvm_ee_run_static_dtors"
 | |
|   external run_function_as_main: Llvm.llvalue -> string array ->
 | |
|                                  (string * string) array -> t -> int
 | |
|     = "llvm_ee_run_function_as_main"
 | |
|   external free_machine_code: Llvm.llvalue -> t -> unit
 | |
|     = "llvm_ee_free_machine_code"
 | |
| 
 | |
|   external data_layout : t -> Llvm_target.DataLayout.t
 | |
|     = "llvm_ee_get_data_layout"
 | |
|   
 | |
|   (* The following are not bound. Patches are welcome.
 | |
|   
 | |
|   add_global_mapping: llvalue -> llgenericvalue -> t -> unit
 | |
|   clear_all_global_mappings: t -> unit
 | |
|   update_global_mapping: llvalue -> llgenericvalue -> t -> unit
 | |
|   get_pointer_to_global_if_available: llvalue -> t -> llgenericvalue
 | |
|   get_pointer_to_global: llvalue -> t -> llgenericvalue
 | |
|   get_pointer_to_function: llvalue -> t -> llgenericvalue
 | |
|   get_pointer_to_function_or_stub: llvalue -> t -> llgenericvalue
 | |
|   get_global_value_at_address: llgenericvalue -> t -> llvalue option
 | |
|   store_value_to_memory: llgenericvalue -> llgenericvalue -> lltype -> unit
 | |
|   initialize_memory: llvalue -> llgenericvalue -> t -> unit
 | |
|   recompile_and_relink_function: llvalue -> t -> llgenericvalue
 | |
|   get_or_emit_global_variable: llvalue -> t -> llgenericvalue
 | |
|   disable_lazy_compilation: t -> unit
 | |
|   lazy_compilation_enabled: t -> bool
 | |
|   install_lazy_function_creator: (string -> llgenericvalue) -> t -> unit
 | |
|   
 | |
|    *)
 | |
| end
 | |
| 
 | |
| external initialize_native_target : unit -> bool
 | |
|                                   = "llvm_initialize_native_target"
 |