mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
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:
parent
f70cbb2d6a
commit
ce89b4e66f
@ -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) ...--*)
|
||||
|
@ -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"
|
||||
|
@ -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 */
|
||||
|
@ -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 -----------------------------------------------------===*)
|
||||
|
Loading…
Reference in New Issue
Block a user