99// except according to those terms.
1010
1111use lib:: llvm:: llvm;
12- use lib:: llvm:: { CallConv , TypeKind , AtomicBinOp , AtomicOrdering } ;
12+ use lib:: llvm:: { CallConv , TypeKind , AtomicBinOp , AtomicOrdering , AsmDialect } ;
1313use lib:: llvm:: { Opcode , IntPredicate , RealPredicate , True , False } ;
1414use lib:: llvm:: { ValueRef , TypeRef , BasicBlockRef , BuilderRef , ModuleRef } ;
1515use lib;
@@ -18,7 +18,7 @@ use syntax::codemap::span;
1818
1919use core:: prelude:: * ;
2020use core:: cast;
21- use core:: libc:: { c_uint, c_int, c_ulonglong} ;
21+ use core:: libc:: { c_uint, c_int, c_ulonglong, c_char } ;
2222use core:: libc;
2323use core:: option:: Some ;
2424use core:: ptr;
@@ -872,6 +872,25 @@ pub fn add_comment(bcx: block, text: &str) {
872872 }
873873}
874874
875+ pub fn InlineAsmCall(cx: block, asm: *c_char, cons: *c_char,
876+ volatile: bool, alignstack: bool,
877+ dia: AsmDialect) -> ValueRef {
878+ unsafe {
879+ count_insn(cx, " inlineasm");
880+
881+ let volatile = if volatile { lib::llvm::True }
882+ else { lib::llvm::False };
883+ let alignstack = if alignstack { lib::llvm::True }
884+ else { lib::llvm::False };
885+
886+ let llfty = T_fn(~[], T_void());
887+ let v = llvm::LLVMInlineAsm(llfty, asm, cons, volatile,
888+ alignstack, dia);
889+
890+ Call(cx, v, ~[])
891+ }
892+ }
893+
875894pub fn Call(cx: block, Fn: ValueRef, Args: &[ValueRef]) -> ValueRef {
876895 if cx.unreachable { return _UndefReturn(cx, Fn); }
877896 unsafe {
0 commit comments