mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-26 21:32:10 +00:00
Adding bindings for target triple and data layout.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45369 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1d2e49cd84
commit
a353ffa7e5
@ -107,6 +107,14 @@ let _ = register_exns (IoError "")
|
||||
|
||||
external create_module : string -> llmodule = "llvm_create_module"
|
||||
external dispose_module : llmodule -> unit = "llvm_dispose_module"
|
||||
external target_triple: llmodule -> string
|
||||
= "llvm_target_triple"
|
||||
external set_target_triple: string -> llmodule -> unit
|
||||
= "llvm_set_target_triple"
|
||||
external data_layout: llmodule -> string
|
||||
= "llvm_data_layout"
|
||||
external set_data_layout: string -> llmodule -> unit
|
||||
= "llvm_set_data_layout"
|
||||
external define_type_name : string -> lltype -> llmodule -> bool
|
||||
= "llvm_add_type_name"
|
||||
external delete_type_name : string -> llmodule -> unit
|
||||
|
@ -162,6 +162,27 @@ external create_module : string -> llmodule = "llvm_create_module"
|
||||
[llvm::Module::~Module]. **)
|
||||
external dispose_module : llmodule -> unit = "llvm_dispose_module"
|
||||
|
||||
(** [target_triple m] is the target specifier for the module [m], something like
|
||||
[i686-apple-darwin8]. See the method [llvm::Module::getTargetTriple]. **)
|
||||
external target_triple: llmodule -> string
|
||||
= "llvm_target_triple"
|
||||
|
||||
(** [target_triple triple m] changes the target specifier for the module [m] to
|
||||
the string [triple]. See the method [llvm::Module::setTargetTriple]. **)
|
||||
external set_target_triple: string -> llmodule -> unit
|
||||
= "llvm_set_target_triple"
|
||||
|
||||
(** [data_layout m] is the data layout specifier for the module [m], something
|
||||
like [e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-...-a0:0:64-f80:128:128]. See the
|
||||
method [llvm::Module::getDataLayout]. **)
|
||||
external data_layout: llmodule -> string
|
||||
= "llvm_data_layout"
|
||||
|
||||
(** [set_data_layout s m] changes the data layout specifier for the module [m]
|
||||
to the string [s]. See the method [llvm::Module::setDataLayout]. **)
|
||||
external set_data_layout: string -> llmodule -> unit
|
||||
= "llvm_set_data_layout"
|
||||
|
||||
(** [define_type_name name ty m] adds a named type to the module's symbol table.
|
||||
Returns [true] if successful. If such a name already exists, then no entry
|
||||
is added and [false] is returned. See the [llvm::Module::addTypeName]
|
||||
|
@ -62,6 +62,28 @@ CAMLprim value llvm_dispose_module(LLVMModuleRef M) {
|
||||
return Val_unit;
|
||||
}
|
||||
|
||||
/* llmodule -> string */
|
||||
CAMLprim value llvm_target_triple(LLVMModuleRef M) {
|
||||
return copy_string(LLVMGetTarget(M));
|
||||
}
|
||||
|
||||
/* string -> llmodule -> unit */
|
||||
CAMLprim value llvm_set_target_triple(value Trip, LLVMModuleRef M) {
|
||||
LLVMSetTarget(M, String_val(Trip));
|
||||
return Val_unit;
|
||||
}
|
||||
|
||||
/* llmodule -> string */
|
||||
CAMLprim value llvm_data_layout(LLVMModuleRef M) {
|
||||
return copy_string(LLVMGetDataLayout(M));
|
||||
}
|
||||
|
||||
/* string -> llmodule -> unit */
|
||||
CAMLprim value llvm_set_data_layout(value Layout, LLVMModuleRef M) {
|
||||
LLVMSetDataLayout(M, String_val(Layout));
|
||||
return Val_unit;
|
||||
}
|
||||
|
||||
/* string -> lltype -> llmodule -> bool */
|
||||
CAMLprim value llvm_add_type_name(value Name, LLVMTypeRef Ty, LLVMModuleRef M) {
|
||||
int res = LLVMAddTypeName(M, String_val(Name), Ty);
|
||||
|
@ -149,6 +149,14 @@ void LLVMDisposeMessage(char *Message);
|
||||
LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
|
||||
void LLVMDisposeModule(LLVMModuleRef M);
|
||||
|
||||
/* Data layout */
|
||||
const char *LLVMGetDataLayout(LLVMModuleRef M);
|
||||
void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple);
|
||||
|
||||
/* Target triple */
|
||||
const char *LLVMGetTarget(LLVMModuleRef M);
|
||||
void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
|
||||
|
||||
/* Same as Module::addTypeName. */
|
||||
int LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty);
|
||||
void LLVMDeleteTypeName(LLVMModuleRef M, const char *Name);
|
||||
|
@ -43,6 +43,25 @@ void LLVMDisposeModule(LLVMModuleRef M) {
|
||||
delete unwrap(M);
|
||||
}
|
||||
|
||||
/*--.. Data layout .........................................................--*/
|
||||
const char * LLVMGetDataLayout(LLVMModuleRef M) {
|
||||
return unwrap(M)->getDataLayout().c_str();
|
||||
}
|
||||
|
||||
void LLVMSetDataLayout(LLVMModuleRef M, const char *Triple) {
|
||||
unwrap(M)->setDataLayout(Triple);
|
||||
}
|
||||
|
||||
/*--.. Target triple .......................................................--*/
|
||||
const char * LLVMGetTarget(LLVMModuleRef M) {
|
||||
return unwrap(M)->getTargetTriple().c_str();
|
||||
}
|
||||
|
||||
void LLVMSetTarget(LLVMModuleRef M, const char *Triple) {
|
||||
unwrap(M)->setTargetTriple(Triple);
|
||||
}
|
||||
|
||||
/*--.. Type names ..........................................................--*/
|
||||
int LLVMAddTypeName(LLVMModuleRef M, const char *Name, LLVMTypeRef Ty) {
|
||||
return unwrap(M)->addTypeName(Name, unwrap(Ty));
|
||||
}
|
||||
|
@ -36,6 +36,25 @@ let filename = Sys.argv.(1)
|
||||
let m = create_module filename
|
||||
|
||||
|
||||
(*===-- Target ------------------------------------------------------------===*)
|
||||
|
||||
let test_target () =
|
||||
begin group "triple";
|
||||
(* RUN: grep "i686-apple-darwin8" < %t.ll
|
||||
*)
|
||||
let trip = "i686-apple-darwin8" in
|
||||
set_target_triple trip m;
|
||||
insist (trip = target_triple m)
|
||||
end;
|
||||
|
||||
begin group "layout";
|
||||
(* RUN: grep "bogus" < %t.ll
|
||||
*)
|
||||
let layout = "bogus" in
|
||||
set_data_layout layout m;
|
||||
insist (layout = data_layout m)
|
||||
end
|
||||
|
||||
(*===-- Types -------------------------------------------------------------===*)
|
||||
|
||||
let test_types () =
|
||||
@ -823,6 +842,7 @@ let test_writer () =
|
||||
(*===-- Driver ------------------------------------------------------------===*)
|
||||
|
||||
let _ =
|
||||
suite "target" test_target;
|
||||
suite "types" test_types;
|
||||
suite "constants" test_constants;
|
||||
suite "global values" test_global_values;
|
||||
|
Loading…
Reference in New Issue
Block a user