diff options
| author | Denis Merigoux <denis.merigoux@gmail.com> | 2018-08-21 18:22:29 +0200 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2018-11-16 14:11:09 +0200 |
| commit | 1ca750683ef1fc6db178c2fff8c0d0fb713690ab (patch) | |
| tree | b19ff11817d9c73fe0863d799ea8bc42d7205e07 /src/librustc_codegen_llvm | |
| parent | b7615389978eae2ae9f3cba9a776fd8da3f743ca (diff) | |
| download | rust-1ca750683ef1fc6db178c2fff8c0d0fb713690ab.tar.gz rust-1ca750683ef1fc6db178c2fff8c0d0fb713690ab.zip | |
Generalized AsmDialect for BuilderMethods
Diffstat (limited to 'src/librustc_codegen_llvm')
| -rw-r--r-- | src/librustc_codegen_llvm/asm.rs | 8 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/builder.rs | 5 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/llvm/ffi.rs | 10 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/traits.rs | 2 |
4 files changed, 15 insertions, 10 deletions
diff --git a/src/librustc_codegen_llvm/asm.rs b/src/librustc_codegen_llvm/asm.rs index 441888583ea..6eedc6d1c2a 100644 --- a/src/librustc_codegen_llvm/asm.rs +++ b/src/librustc_codegen_llvm/asm.rs @@ -22,7 +22,6 @@ use mir::place::PlaceRef; use mir::operand::OperandValue; use std::ffi::CString; -use syntax::ast::AsmDialect; use libc::{c_uint, c_char}; // Take an inline assembly expression and splat it out via LLVM @@ -82,11 +81,6 @@ pub fn codegen_inline_asm( _ => Type::struct_(bx.cx, &output_types, false) }; - let dialect = match ia.dialect { - AsmDialect::Att => llvm::AsmDialect::Att, - AsmDialect::Intel => llvm::AsmDialect::Intel, - }; - let asm = CString::new(ia.asm.as_str().as_bytes()).unwrap(); let constraint_cstr = CString::new(all_constraints).unwrap(); let r = bx.inline_asm_call( @@ -96,7 +90,7 @@ pub fn codegen_inline_asm( output_type, ia.volatile, ia.alignstack, - dialect + ia.dialect ); if r.is_none() { return false; diff --git a/src/librustc_codegen_llvm/builder.rs b/src/librustc_codegen_llvm/builder.rs index 61142d7fde3..711d263608b 100644 --- a/src/librustc_codegen_llvm/builder.rs +++ b/src/librustc_codegen_llvm/builder.rs @@ -20,6 +20,7 @@ use rustc::ty::layout::{Align, Size}; use rustc::session::{config, Session}; use rustc_data_structures::small_c_str::SmallCStr; use traits::{self, BuilderMethods}; +use syntax; use std::borrow::Cow; use std::ops::Range; @@ -742,7 +743,7 @@ impl BuilderMethods<'a, 'll, 'tcx, Value, BasicBlock> fn inline_asm_call(&self, asm: *const c_char, cons: *const c_char, inputs: &[&'ll Value], output: &'ll Type, volatile: bool, alignstack: bool, - dia: AsmDialect) -> Option<&'ll Value> { + dia: syntax::ast::AsmDialect) -> Option<&'ll Value> { self.count_insn("inlineasm"); let volatile = if volatile { llvm::True } @@ -763,7 +764,7 @@ impl BuilderMethods<'a, 'll, 'tcx, Value, BasicBlock> debug!("Constraint verification result: {:?}", constraints_ok); if constraints_ok { let v = llvm::LLVMRustInlineAsm( - fty, asm, cons, volatile, alignstack, dia); + fty, asm, cons, volatile, alignstack, AsmDialect::from_generic(dia)); Some(self.call(v, inputs, None)) } else { // LLVM has detected an issue with our constraints, bail out diff --git a/src/librustc_codegen_llvm/llvm/ffi.rs b/src/librustc_codegen_llvm/llvm/ffi.rs index 8ac6e218d86..827948a02a7 100644 --- a/src/librustc_codegen_llvm/llvm/ffi.rs +++ b/src/librustc_codegen_llvm/llvm/ffi.rs @@ -20,6 +20,7 @@ use libc::{c_ulonglong, c_void}; use std::marker::PhantomData; use traits; +use syntax; use super::RustString; @@ -354,6 +355,15 @@ pub enum AsmDialect { Intel, } +impl AsmDialect { + pub fn from_generic(asm : syntax::ast::AsmDialect) -> Self { + match asm { + syntax::ast::AsmDialect::Att => AsmDialect::Att, + syntax::ast::AsmDialect::Intel => AsmDialect::Intel + } + } +} + /// LLVMRustCodeGenOptLevel #[derive(Copy, Clone, PartialEq)] #[repr(C)] diff --git a/src/librustc_codegen_llvm/traits.rs b/src/librustc_codegen_llvm/traits.rs index d28dd0fa795..57e9a30b90d 100644 --- a/src/librustc_codegen_llvm/traits.rs +++ b/src/librustc_codegen_llvm/traits.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use llvm::AsmDialect; use common::*; use type_::Type; use libc::c_char; @@ -20,6 +19,7 @@ use value::Value; use std::borrow::Cow; use std::ops::Range; +use syntax::ast::AsmDialect; pub struct OperandBundleDef<'a, Value : 'a> { pub name: &'a str, |
