Add support for inserting inline asm to ocaml.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97412 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Erick Tryzelaar 2010-02-28 20:44:53 +00:00
parent f70cbb2d6a
commit ce89b4e66f
4 changed files with 28 additions and 1 deletions

View File

@ -356,6 +356,9 @@ external const_extractvalue : llvalue -> int array -> llvalue
= "llvm_const_extractvalue"
external const_insertvalue : llvalue -> llvalue -> int array -> llvalue
= "llvm_const_insertvalue"
external const_inline_asm : lltype -> string -> string -> bool -> bool ->
llvalue
= "llvm_const_inline_asm"
external block_address : llvalue -> llbasicblock -> llvalue = "LLVMBlockAddress"
(*--... Operations on global variables, functions, and aliases (globals) ...--*)

View File

@ -964,6 +964,12 @@ external const_extractvalue : llvalue -> int array -> llvalue
external const_insertvalue : llvalue -> llvalue -> int array -> llvalue
= "llvm_const_insertvalue"
(** [const_inline_asm ty asm con side align] inserts a inline assembly string.
See the method [llvm::InlineAsm::get]. *)
external const_inline_asm : lltype -> string -> string -> bool -> bool ->
llvalue
= "llvm_const_inline_asm"
(** [block_address f bb] returns the address of the basic block [bb] in the
function [f]. See the method [llvm::BasicBlock::get]. *)
external block_address : llvalue -> llbasicblock -> llvalue = "LLVMBlockAddress"

View File

@ -641,6 +641,14 @@ CAMLprim LLVMValueRef llvm_const_insertvalue(LLVMValueRef Aggregate,
CAMLreturnT(LLVMValueRef, result);
}
/* lltype -> string -> string -> bool -> bool -> llvalue */
CAMLprim LLVMValueRef llvm_const_inline_asm(LLVMTypeRef Ty, value Asm,
value Constraints, value HasSideEffects,
value IsAlignStack) {
return LLVMConstInlineAsm(Ty, String_val(Asm), String_val(Constraints),
Bool_val(HasSideEffects), Bool_val(IsAlignStack));
}
/*--... Operations on global variables, functions, and aliases (globals) ...--*/
/* llvalue -> bool */

View File

@ -456,7 +456,17 @@ let test_constants () =
ignore (define_global "const_shufflevector" (const_shufflevector
(const_vector [| zero; one |])
(const_vector [| one; zero |])
(const_bitcast foldbomb (vector_type i32_type 2))) m)
(const_bitcast foldbomb (vector_type i32_type 2))) m);
group "asm"; begin
let ft = function_type void_type [| i32_type; i32_type; i32_type |] in
ignore (const_inline_asm
ft
""
"{cx},{ax},{di},~{dirflag},~{fpsr},~{flags},~{edi},~{ecx}"
true
false)
end
(*===-- Global Values -----------------------------------------------------===*)