9
9
// except according to those terms.
10
10
11
11
use lib:: llvm:: llvm;
12
- use lib:: llvm:: { CallConv , TypeKind , AtomicBinOp , AtomicOrdering } ;
12
+ use lib:: llvm:: { CallConv , TypeKind , AtomicBinOp , AtomicOrdering , AsmDialect } ;
13
13
use lib:: llvm:: { Opcode , IntPredicate , RealPredicate , True , False } ;
14
14
use lib:: llvm:: { ValueRef , TypeRef , BasicBlockRef , BuilderRef , ModuleRef } ;
15
15
use lib;
@@ -18,7 +18,7 @@ use syntax::codemap::span;
18
18
19
19
use core:: prelude:: * ;
20
20
use core:: cast;
21
- use core:: libc:: { c_uint, c_int, c_ulonglong} ;
21
+ use core:: libc:: { c_uint, c_int, c_ulonglong, c_char } ;
22
22
use core:: libc;
23
23
use core:: option:: Some ;
24
24
use core:: ptr;
@@ -872,6 +872,25 @@ pub fn add_comment(bcx: block, text: &str) {
872
872
}
873
873
}
874
874
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
+
875
894
pub fn Call(cx: block, Fn: ValueRef, Args: &[ValueRef]) -> ValueRef {
876
895
if cx.unreachable { return _UndefReturn(cx, Fn); }
877
896
unsafe {
0 commit comments