aboutsummaryrefslogtreecommitdiffstats
path: root/bindings/ocaml/llvm/llvm_ocaml.c
diff options
context:
space:
mode:
authorGordon Henriksen <gordonhenriksen@mac.com>2007-12-17 16:08:32 +0000
committerGordon Henriksen <gordonhenriksen@mac.com>2007-12-17 16:08:32 +0000
commit9d1b2abbf03926b1ff5d22a2cb4b856d10a3d1f9 (patch)
tree7c0fd6ef432b8676a5cf19c374b330842c4e5456 /bindings/ocaml/llvm/llvm_ocaml.c
parentfb623c6d2e3cc5ac9dc22e6357ae1815ff3f7d37 (diff)
downloadexternal_llvm-9d1b2abbf03926b1ff5d22a2cb4b856d10a3d1f9.zip
external_llvm-9d1b2abbf03926b1ff5d22a2cb4b856d10a3d1f9.tar.gz
external_llvm-9d1b2abbf03926b1ff5d22a2cb4b856d10a3d1f9.tar.bz2
C and Ocaml bindings for address spaces, for that burgeoning market
for Ocaml-based compilers targeting embedded devices. :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45096 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'bindings/ocaml/llvm/llvm_ocaml.c')
-rw-r--r--bindings/ocaml/llvm/llvm_ocaml.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/bindings/ocaml/llvm/llvm_ocaml.c b/bindings/ocaml/llvm/llvm_ocaml.c
index f9d7e6f..43b6167 100644
--- a/bindings/ocaml/llvm/llvm_ocaml.c
+++ b/bindings/ocaml/llvm/llvm_ocaml.c
@@ -163,6 +163,17 @@ CAMLprim LLVMTypeRef llvm_array_type(LLVMTypeRef ElementTy, value Count) {
return LLVMArrayType(ElementTy, Int_val(Count));
}
+/* lltype -> lltype */
+CAMLprim LLVMTypeRef llvm_pointer_type(LLVMTypeRef ElementTy) {
+ return LLVMPointerType(ElementTy, 0);
+}
+
+/* lltype -> int -> lltype */
+CAMLprim LLVMTypeRef llvm_qualified_pointer_type(LLVMTypeRef ElementTy,
+ value AddressSpace) {
+ return LLVMPointerType(ElementTy, Int_val(AddressSpace));
+}
+
/* lltype -> int -> lltype */
CAMLprim LLVMTypeRef llvm_vector_type(LLVMTypeRef ElementTy, value Count) {
return LLVMVectorType(ElementTy, Int_val(Count));
@@ -174,6 +185,11 @@ CAMLprim value llvm_array_length(LLVMTypeRef ArrayTy) {
}
/* lltype -> int */
+CAMLprim value llvm_address_space(LLVMTypeRef PtrTy) {
+ return Val_int(LLVMGetPointerAddressSpace(PtrTy));
+}
+
+/* lltype -> int */
CAMLprim value llvm_vector_size(LLVMTypeRef VectorTy) {
return Val_int(LLVMGetVectorSize(VectorTy));
}
@@ -399,7 +415,7 @@ CAMLprim LLVMValueRef llvm_declare_global(LLVMTypeRef Ty, value Name,
LLVMValueRef GlobalVar;
if ((GlobalVar = LLVMGetNamedGlobal(M, String_val(Name)))) {
if (LLVMGetElementType(LLVMTypeOf(GlobalVar)) != Ty)
- return LLVMConstBitCast(GlobalVar, LLVMPointerType(Ty));
+ return LLVMConstBitCast(GlobalVar, LLVMPointerType(Ty, 0));
return GlobalVar;
}
return LLVMAddGlobal(M, Ty, String_val(Name));
@@ -476,7 +492,7 @@ CAMLprim LLVMValueRef llvm_declare_function(value Name, LLVMTypeRef Ty,
LLVMValueRef Fn;
if ((Fn = LLVMGetNamedFunction(M, String_val(Name)))) {
if (LLVMGetElementType(LLVMTypeOf(Fn)) != Ty)
- return LLVMConstBitCast(Fn, LLVMPointerType(Ty));
+ return LLVMConstBitCast(Fn, LLVMPointerType(Ty, 0));
return Fn;
}
return LLVMAddFunction(M, String_val(Name), Ty);