Wrap llvm::InlineAsm::AsmDialect

This commit is contained in:
Luqman Aden 2013-03-10 00:38:29 -08:00
parent ecccc0d649
commit fc78b93c41
4 changed files with 19 additions and 11 deletions

View file

@ -188,6 +188,12 @@ pub enum Metadata {
MD_tbaa_struct = 5
}
// Inline Asm Dialect
pub enum AsmDialect {
AD_ATT = 0,
AD_Intel = 1
}
// Opaque pointer types
pub enum Module_opaque {}
pub type ModuleRef = *Module_opaque;
@ -217,9 +223,9 @@ pub enum SectionIterator_opaque {}
pub type SectionIteratorRef = *SectionIterator_opaque;
pub mod llvm {
use super::{AtomicBinOp, AtomicOrdering, BasicBlockRef, Bool, BuilderRef};
use super::{ContextRef, MemoryBufferRef, ModuleRef, ObjectFileRef};
use super::{Opcode, PassManagerRef, PassManagerBuilderRef};
use super::{AsmDialect, AtomicBinOp, AtomicOrdering, BasicBlockRef};
use super::{Bool, BuilderRef, ContextRef, MemoryBufferRef, ModuleRef};
use super::{ObjectFileRef, Opcode, PassManagerRef, PassManagerBuilderRef};
use super::{SectionIteratorRef, TargetDataRef, TypeKind, TypeRef, UseRef};
use super::{ValueRef};
@ -1437,7 +1443,8 @@ pub mod llvm {
/** Prepares inline assembly. */
pub unsafe fn LLVMInlineAsm(Ty: TypeRef, AsmString: *c_char,
Constraints: *c_char, SideEffects: Bool,
AlignStack: Bool) -> ValueRef;
AlignStack: Bool, Dialect: AsmDialect)
-> ValueRef;
}
}

View file

@ -9,7 +9,7 @@
// except according to those terms.
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::{ValueRef, TypeRef, BasicBlockRef, BuilderRef, ModuleRef};
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 {
count_insn(cx, "inlineasm");
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, ~[])
}

View file

@ -694,7 +694,7 @@ fn trans_rvalue_dps_unadjusted(bcx: block, expr: @ast::expr,
ast::expr_inline_asm(asm, cons) => {
do str::as_c_str(*asm) |a| {
do str::as_c_str(*cons) |c| {
InlineAsmCall(bcx, a, c);
InlineAsmCall(bcx, a, c, lib::llvm::AD_ATT);
}
}
return bcx;

View file

@ -545,9 +545,9 @@ extern "C" LLVMValueRef LLVMInlineAsm(LLVMTypeRef Ty,
char *AsmString,
char *Constraints,
LLVMBool HasSideEffects,
LLVMBool IsAlignStack) {
LLVMBool IsAlignStack,
InlineAsm::AsmDialect Dialect) {
return wrap(InlineAsm::get(unwrap<FunctionType>(Ty), AsmString,
Constraints, HasSideEffects,
IsAlignStack));
// IsAlignStack, InlineAsm::AD_Intel));
IsAlignStack, Dialect));
}