Wrap llvm::InlineAsm::AsmDialect
This commit is contained in:
parent
ecccc0d649
commit
fc78b93c41
4 changed files with 19 additions and 11 deletions
|
@ -188,6 +188,12 @@ pub enum Metadata {
|
||||||
MD_tbaa_struct = 5
|
MD_tbaa_struct = 5
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Inline Asm Dialect
|
||||||
|
pub enum AsmDialect {
|
||||||
|
AD_ATT = 0,
|
||||||
|
AD_Intel = 1
|
||||||
|
}
|
||||||
|
|
||||||
// Opaque pointer types
|
// Opaque pointer types
|
||||||
pub enum Module_opaque {}
|
pub enum Module_opaque {}
|
||||||
pub type ModuleRef = *Module_opaque;
|
pub type ModuleRef = *Module_opaque;
|
||||||
|
@ -217,9 +223,9 @@ pub enum SectionIterator_opaque {}
|
||||||
pub type SectionIteratorRef = *SectionIterator_opaque;
|
pub type SectionIteratorRef = *SectionIterator_opaque;
|
||||||
|
|
||||||
pub mod llvm {
|
pub mod llvm {
|
||||||
use super::{AtomicBinOp, AtomicOrdering, BasicBlockRef, Bool, BuilderRef};
|
use super::{AsmDialect, AtomicBinOp, AtomicOrdering, BasicBlockRef};
|
||||||
use super::{ContextRef, MemoryBufferRef, ModuleRef, ObjectFileRef};
|
use super::{Bool, BuilderRef, ContextRef, MemoryBufferRef, ModuleRef};
|
||||||
use super::{Opcode, PassManagerRef, PassManagerBuilderRef};
|
use super::{ObjectFileRef, Opcode, PassManagerRef, PassManagerBuilderRef};
|
||||||
use super::{SectionIteratorRef, TargetDataRef, TypeKind, TypeRef, UseRef};
|
use super::{SectionIteratorRef, TargetDataRef, TypeKind, TypeRef, UseRef};
|
||||||
use super::{ValueRef};
|
use super::{ValueRef};
|
||||||
|
|
||||||
|
@ -1437,7 +1443,8 @@ pub mod llvm {
|
||||||
/** Prepares inline assembly. */
|
/** Prepares inline assembly. */
|
||||||
pub unsafe fn LLVMInlineAsm(Ty: TypeRef, AsmString: *c_char,
|
pub unsafe fn LLVMInlineAsm(Ty: TypeRef, AsmString: *c_char,
|
||||||
Constraints: *c_char, SideEffects: Bool,
|
Constraints: *c_char, SideEffects: Bool,
|
||||||
AlignStack: Bool) -> ValueRef;
|
AlignStack: Bool, Dialect: AsmDialect)
|
||||||
|
-> ValueRef;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
use lib::llvm::llvm;
|
use lib::llvm::llvm;
|
||||||
use lib::llvm::{CallConv, TypeKind, AtomicBinOp, AtomicOrdering};
|
use lib::llvm::{CallConv, TypeKind, AtomicBinOp, AtomicOrdering, AsmDialect};
|
||||||
use lib::llvm::{Opcode, IntPredicate, RealPredicate, True, False};
|
use lib::llvm::{Opcode, IntPredicate, RealPredicate, True, False};
|
||||||
use lib::llvm::{ValueRef, TypeRef, BasicBlockRef, BuilderRef, ModuleRef};
|
use lib::llvm::{ValueRef, TypeRef, BasicBlockRef, BuilderRef, ModuleRef};
|
||||||
use lib;
|
use lib;
|
||||||
|
@ -872,12 +872,13 @@ pub fn add_comment(bcx: block, text: &str) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn InlineAsmCall(cx: block, asm: *c_char, cons: *c_char) -> ValueRef {
|
pub fn InlineAsmCall(cx: block, asm: *c_char, cons: *c_char,
|
||||||
|
dia: AsmDialect) -> ValueRef {
|
||||||
unsafe {
|
unsafe {
|
||||||
count_insn(cx, "inlineasm");
|
count_insn(cx, "inlineasm");
|
||||||
|
|
||||||
let llfty = T_fn(~[], T_void());
|
let llfty = T_fn(~[], T_void());
|
||||||
let v = llvm::LLVMInlineAsm(llfty, asm, cons, False, False);
|
let v = llvm::LLVMInlineAsm(llfty, asm, cons, False, False, dia);
|
||||||
|
|
||||||
Call(cx, v, ~[])
|
Call(cx, v, ~[])
|
||||||
}
|
}
|
||||||
|
|
|
@ -694,7 +694,7 @@ fn trans_rvalue_dps_unadjusted(bcx: block, expr: @ast::expr,
|
||||||
ast::expr_inline_asm(asm, cons) => {
|
ast::expr_inline_asm(asm, cons) => {
|
||||||
do str::as_c_str(*asm) |a| {
|
do str::as_c_str(*asm) |a| {
|
||||||
do str::as_c_str(*cons) |c| {
|
do str::as_c_str(*cons) |c| {
|
||||||
InlineAsmCall(bcx, a, c);
|
InlineAsmCall(bcx, a, c, lib::llvm::AD_ATT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bcx;
|
return bcx;
|
||||||
|
|
|
@ -545,9 +545,9 @@ extern "C" LLVMValueRef LLVMInlineAsm(LLVMTypeRef Ty,
|
||||||
char *AsmString,
|
char *AsmString,
|
||||||
char *Constraints,
|
char *Constraints,
|
||||||
LLVMBool HasSideEffects,
|
LLVMBool HasSideEffects,
|
||||||
LLVMBool IsAlignStack) {
|
LLVMBool IsAlignStack,
|
||||||
|
InlineAsm::AsmDialect Dialect) {
|
||||||
return wrap(InlineAsm::get(unwrap<FunctionType>(Ty), AsmString,
|
return wrap(InlineAsm::get(unwrap<FunctionType>(Ty), AsmString,
|
||||||
Constraints, HasSideEffects,
|
Constraints, HasSideEffects,
|
||||||
IsAlignStack));
|
IsAlignStack, Dialect));
|
||||||
// IsAlignStack, InlineAsm::AD_Intel));
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue