[PATCH] OCaml bindings: implement missing Target APIs

Peter Zotov whitequark at whitequark.org
Thu Oct 31 19:16:58 PDT 2013


Hi sylvestre.ledru,

http://llvm-reviews.chandlerc.com/D1917

CHANGE SINCE LAST DIFF
  http://llvm-reviews.chandlerc.com/D1917?vs=4871&id=5307#toc

Files:
  bindings/ocaml/target/llvm_target.ml
  bindings/ocaml/target/llvm_target.mli
  bindings/ocaml/target/target_ocaml.c
  test/Bindings/Ocaml/target.ml

Index: bindings/ocaml/target/llvm_target.ml
===================================================================
--- bindings/ocaml/target/llvm_target.ml
+++ bindings/ocaml/target/llvm_target.ml
@@ -26,6 +26,10 @@
 external byte_order : DataLayout.t -> Endian.t = "llvm_byte_order"
 external pointer_size : DataLayout.t -> int = "llvm_pointer_size"
 external intptr_type : DataLayout.t -> Llvm.lltype = "LLVMIntPtrType"
+external qualified_pointer_size : DataLayout.t -> int -> int
+                                = "llvm_qualified_pointer_size"
+external qualified_intptr_type : DataLayout.t -> int -> Llvm.lltype
+                               = "llvm_qualified_intptr_type"
 external size_in_bits : DataLayout.t -> Llvm.lltype -> Int64.t
                       = "llvm_size_in_bits"
 external store_size : DataLayout.t -> Llvm.lltype -> Int64.t = "llvm_store_size"
Index: bindings/ocaml/target/llvm_target.mli
===================================================================
--- bindings/ocaml/target/llvm_target.mli
+++ bindings/ocaml/target/llvm_target.mli
@@ -53,6 +53,18 @@
     See the method llvm::DataLayout::getIntPtrType. *)
 external intptr_type : DataLayout.t -> Llvm.lltype = "LLVMIntPtrType"
 
+(** Returns the pointer size in bytes for a target in a given address
+    space.
+    See the method llvm::DataLayout::getPointerSize. *)
+external qualified_pointer_size : DataLayout.t -> int -> int
+                                = "llvm_qualified_pointer_size"
+
+(** Returns the integer type that is the same size as a pointer on a target
+    in a given address space.
+    See the method llvm::DataLayout::getIntPtrType. *)
+external qualified_intptr_type : DataLayout.t -> int -> Llvm.lltype
+                               = "llvm_qualified_intptr_type"
+
 (** Computes the size of a type in bits for a target.
     See the method llvm::DataLayout::getTypeSizeInBits. *)
 external size_in_bits : DataLayout.t -> Llvm.lltype -> Int64.t
Index: bindings/ocaml/target/target_ocaml.c
===================================================================
--- bindings/ocaml/target/target_ocaml.c
+++ bindings/ocaml/target/target_ocaml.c
@@ -53,6 +53,16 @@
   return Val_int(LLVMPointerSize(TD));
 }
 
+/* DataLayout.t -> int -> int */
+CAMLprim value llvm_qualified_pointer_size(LLVMTargetDataRef TD, value AS) {
+  return Val_int(LLVMPointerSizeForAS(TD, Int_val(AS)));
+}
+
+/* DataLayout.t -> int -> Llvm.lltype */
+CAMLprim LLVMTypeRef llvm_qualified_intptr_type(LLVMTargetDataRef TD, value AS) {
+  return LLVMIntPtrTypeForAS(TD, Int_val(AS));
+}
+
 /* DataLayout.t -> Llvm.lltype -> Int64.t */
 CAMLprim value llvm_size_in_bits(LLVMTargetDataRef TD, LLVMTypeRef Ty) {
   return caml_copy_int64(LLVMSizeOfTypeInBits(TD, Ty));
Index: test/Bindings/Ocaml/target.ml
===================================================================
--- test/Bindings/Ocaml/target.ml
+++ test/Bindings/Ocaml/target.ml
@@ -42,11 +42,13 @@
                "a0:0:64-n32" in
   let td     = DataLayout.create layout in
   let sty    = struct_type context [| i32_type; i64_type |] in
-  
+
   assert_equal (DataLayout.as_string td) layout;
   assert_equal (byte_order td) Endian.Little;
   assert_equal (pointer_size td) 4;
   assert_equal (intptr_type td) i32_type;
+  assert_equal (qualified_pointer_size td 0) 4;
+  assert_equal (qualified_intptr_type td 0) i32_type;
   assert_equal (size_in_bits td sty) (Int64.of_int 96);
   assert_equal (store_size td sty) (Int64.of_int 12);
   assert_equal (abi_size td sty) (Int64.of_int 12);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1917.2.patch
Type: text/x-patch
Size: 3534 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131031/b3853f7f/attachment.bin>


More information about the llvm-commits mailing list