mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-31 15:53:42 +00:00
Expose creating constant ints and floats from strings to ocaml.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79214 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e0a1bf64c9
commit
45d6ac2cc1
@ -237,7 +237,11 @@ external is_undef : llvalue -> bool = "llvm_is_undef"
|
||||
external const_int : lltype -> int -> llvalue = "llvm_const_int"
|
||||
external const_of_int64 : lltype -> Int64.t -> bool -> llvalue
|
||||
= "llvm_const_of_int64"
|
||||
external const_int_of_string : lltype -> string -> int -> llvalue
|
||||
= "llvm_const_int_of_string"
|
||||
external const_float : lltype -> float -> llvalue = "llvm_const_float"
|
||||
external const_float_of_string : lltype -> string -> llvalue
|
||||
= "llvm_const_float_of_string"
|
||||
|
||||
(*--... Operations on composite constants ..................................--*)
|
||||
external const_string : string -> llvalue = "llvm_const_string"
|
||||
|
@ -469,10 +469,20 @@ external const_int : lltype -> int -> llvalue = "llvm_const_int"
|
||||
external const_of_int64 : lltype -> Int64.t -> bool -> llvalue
|
||||
= "llvm_const_of_int64"
|
||||
|
||||
(** [const_int_of_string ty s r] returns the integer constant of type [ty] and
|
||||
* value [s], with the radix [r]. See the method [llvm::ConstantInt::get]. *)
|
||||
external const_int_of_string : lltype -> string -> int -> llvalue
|
||||
= "llvm_const_int_of_string"
|
||||
|
||||
(** [const_float ty n] returns the floating point constant of type [ty] and
|
||||
value [n]. See the method [llvm::ConstantFP::get]. *)
|
||||
external const_float : lltype -> float -> llvalue = "llvm_const_float"
|
||||
|
||||
(** [const_float_of_string ty s] returns the floating point constant of type
|
||||
[ty] and value [n]. See the method [llvm::ConstantFP::get]. *)
|
||||
external const_float_of_string : lltype -> string -> llvalue
|
||||
= "llvm_const_float_of_string"
|
||||
|
||||
|
||||
(** {7 Operations on composite constants} *)
|
||||
|
||||
|
@ -388,11 +388,24 @@ CAMLprim LLVMValueRef llvm_const_of_int64(LLVMTypeRef IntTy, value N,
|
||||
return LLVMConstInt(IntTy, Int64_val(N), Bool_val(SExt));
|
||||
}
|
||||
|
||||
/* lltype -> string -> int -> llvalue */
|
||||
CAMLprim LLVMValueRef llvm_const_int_of_string(LLVMTypeRef IntTy, value S,
|
||||
value Radix) {
|
||||
return LLVMConstIntOfStringAndSize(IntTy, String_val(S), caml_string_length(S),
|
||||
Int_val(Radix));
|
||||
}
|
||||
|
||||
/* lltype -> float -> llvalue */
|
||||
CAMLprim LLVMValueRef llvm_const_float(LLVMTypeRef RealTy, value N) {
|
||||
return LLVMConstReal(RealTy, Double_val(N));
|
||||
}
|
||||
|
||||
/* lltype -> string -> llvalue */
|
||||
CAMLprim LLVMValueRef llvm_const_float_of_string(LLVMTypeRef RealTy, value S) {
|
||||
return LLVMConstRealOfStringAndSize(RealTy, String_val(S),
|
||||
caml_string_length(S));
|
||||
}
|
||||
|
||||
/*--... Operations on composite constants ..................................--*/
|
||||
|
||||
/* string -> llvalue */
|
||||
|
@ -212,6 +212,13 @@ let test_constants () =
|
||||
ignore (define_global "Const03" c m);
|
||||
insist (i64_type = type_of c);
|
||||
|
||||
(* RUN: grep {ConstIntString.*i32.*-1} < %t.ll
|
||||
*)
|
||||
group "int string";
|
||||
let c = const_int_of_string i32_type "-1" 10 in
|
||||
ignore (define_global "ConstIntString" c m);
|
||||
insist (i32_type = type_of c);
|
||||
|
||||
(* RUN: grep {Const04.*"cruel\\\\00world"} < %t.ll
|
||||
*)
|
||||
group "string";
|
||||
@ -228,6 +235,7 @@ let test_constants () =
|
||||
|
||||
(* RUN: grep {ConstSingle.*2.75} < %t.ll
|
||||
* RUN: grep {ConstDouble.*3.1459} < %t.ll
|
||||
* RUN: grep {ConstDoubleString.*1.25} < %t.ll
|
||||
*)
|
||||
begin group "real";
|
||||
let cs = const_float float_type 2.75 in
|
||||
@ -236,6 +244,10 @@ let test_constants () =
|
||||
|
||||
let cd = const_float double_type 3.1459 in
|
||||
ignore (define_global "ConstDouble" cd m);
|
||||
insist (double_type = type_of cd);
|
||||
|
||||
let cd = const_float_of_string double_type "1.25" in
|
||||
ignore (define_global "ConstDoubleString" cd m);
|
||||
insist (double_type = type_of cd)
|
||||
end;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user