diff options
| author | Amanieu d'Antras <amanieu@gmail.com> | 2021-04-11 20:51:28 +0100 |
|---|---|---|
| committer | Amanieu d'Antras <amanieu@gmail.com> | 2021-05-13 22:31:57 +0100 |
| commit | d342a3490b6f85f5bec80a7b90a576e5044719aa (patch) | |
| tree | 3e1887a66c82d751bbe8100abf357b0769d8d6f2 | |
| parent | 40a62a998fafc81d8b21260a151831b5d79537d8 (diff) | |
| download | rust-d342a3490b6f85f5bec80a7b90a576e5044719aa.tar.gz rust-d342a3490b6f85f5bec80a7b90a576e5044719aa.zip | |
Add support for const operands and options to global_asm!
On x86, the default syntax is also switched to Intel to match asm!
| -rw-r--r-- | src/driver/aot.rs | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/driver/aot.rs b/src/driver/aot.rs index e5f06551bb6..004e6bddaf3 100644 --- a/src/driver/aot.rs +++ b/src/driver/aot.rs @@ -3,6 +3,7 @@ use std::path::PathBuf; +use rustc_ast::{InlineAsmOptions, InlineAsmTemplatePiece}; use rustc_codegen_ssa::back::linker::LinkerInfo; use rustc_codegen_ssa::{CodegenResults, CompiledModule, CrateInfo, ModuleKind}; use rustc_data_structures::stable_hasher::{HashStable, StableHasher}; @@ -125,9 +126,19 @@ fn module_codegen( MonoItem::Static(def_id) => crate::constant::codegen_static(tcx, &mut module, def_id), MonoItem::GlobalAsm(item_id) => { let item = cx.tcx.hir().item(item_id); - if let rustc_hir::ItemKind::GlobalAsm(rustc_hir::GlobalAsm { asm }) = item.kind { - cx.global_asm.push_str(&*asm.as_str()); - cx.global_asm.push_str("\n\n"); + if let rustc_hir::ItemKind::GlobalAsm(asm) = item.kind { + if !asm.options.contains(InlineAsmOptions::ATT_SYNTAX) { + cx.global_asm.push_str("\n.intel_syntax noprefix\n"); + } else { + cx.global_asm.push_str("\n.att_syntax\n"); + } + for piece in asm.template { + match *piece { + InlineAsmTemplatePiece::String(ref s) => cx.global_asm.push_str(s), + InlineAsmTemplatePiece::Placeholder { .. } => todo!(), + } + } + cx.global_asm.push_str("\n.att_syntax\n\n"); } else { bug!("Expected GlobalAsm found {:?}", item); } |
