From 93d5626c135569875bff226aab1391c719f0dcf2 Mon Sep 17 00:00:00 2001 From: Michael Kuperstein Date: Wed, 22 Jul 2015 10:49:44 +0000 Subject: [PATCH] [X86] Add .intel_syntax noprefix directive to intel-syntax x86 asm output Patch by: michael.zuckerman@intel.com Differential Revision: http://reviews.llvm.org/D11223 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242886 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCStreamer.h | 2 ++ lib/MC/MCAsmStreamer.cpp | 11 +++++++++++ lib/MC/MCStreamer.cpp | 2 ++ lib/Target/X86/X86AsmPrinter.cpp | 1 + test/MC/X86/intel-syntax-print.ll | 9 +++++++++ 5 files changed, 25 insertions(+) create mode 100644 test/MC/X86/intel-syntax-print.ll diff --git a/include/llvm/MC/MCStreamer.h b/include/llvm/MC/MCStreamer.h index 6b9b8a15384..63e30bc3d54 100644 --- a/include/llvm/MC/MCStreamer.h +++ b/include/llvm/MC/MCStreamer.h @@ -682,6 +682,8 @@ public: virtual void EmitWinEHHandler(const MCSymbol *Sym, bool Unwind, bool Except); virtual void EmitWinEHHandlerData(); + virtual void EmitSyntaxDirective(); + /// \brief Emit the given \p Instruction into the current section. virtual void EmitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI); diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp index 227c937e8d1..ec49058407f 100644 --- a/lib/MC/MCAsmStreamer.cpp +++ b/lib/MC/MCAsmStreamer.cpp @@ -78,6 +78,9 @@ public: } EmitCommentsAndEOL(); } + + virtual void EmitSyntaxDirective(); + void EmitCommentsAndEOL(); /// isVerboseAsm - Return true if this streamer supports verbose assembly at @@ -480,6 +483,14 @@ void MCAsmStreamer::EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) { EmitEOL(); } +void MCAsmStreamer::EmitSyntaxDirective() { + if (MAI->getAssemblerDialect() == 1) + OS << "\t.intel_syntax noprefix\n"; + // FIXME: Currently emit unprefix'ed registers. + // The intel_syntax directive has one optional argument + // with may have a value of prefix or noprefix. +} + void MCAsmStreamer::BeginCOFFSymbolDef(const MCSymbol *Symbol) { OS << "\t.def\t "; Symbol->print(OS, MAI); diff --git a/lib/MC/MCStreamer.cpp b/lib/MC/MCStreamer.cpp index 7fbbbd95b56..a25cdfa971e 100644 --- a/lib/MC/MCStreamer.cpp +++ b/lib/MC/MCStreamer.cpp @@ -467,6 +467,8 @@ void MCStreamer::EmitWinEHHandlerData() { report_fatal_error("Chained unwind areas can't have handlers!"); } +void MCStreamer::EmitSyntaxDirective() {} + void MCStreamer::EmitWinCFIPushReg(unsigned Register) { EnsureValidWinFrameInfo(); diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp index 24149e6e9ce..9fe849a04ee 100644 --- a/lib/Target/X86/X86AsmPrinter.cpp +++ b/lib/Target/X86/X86AsmPrinter.cpp @@ -535,6 +535,7 @@ void X86AsmPrinter::EmitStartOfAsmFile(Module &M) { S, MCConstantExpr::create(int64_t(1), MMI->getContext())); } } + OutStreamer->EmitSyntaxDirective(); } static void diff --git a/test/MC/X86/intel-syntax-print.ll b/test/MC/X86/intel-syntax-print.ll new file mode 100644 index 00000000000..275e8cd3929 --- /dev/null +++ b/test/MC/X86/intel-syntax-print.ll @@ -0,0 +1,9 @@ +; RUN: llc -x86-asm-syntax=intel < %s | FileCheck %s -check-prefix=INTEL +; RUN: llc -x86-asm-syntax=att < %s | FileCheck %s -check-prefix=ATT + +; INTEL: .intel_syntax noprefix +; ATT-NOT: .intel_syntax noprefix +define i32 @test() { +entry: + ret i32 0 +} -- 2.34.1