From b0d78d0192c66f71ae71dbb7c655a31b29360717 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 24 Jan 2014 15:47:54 +0000 Subject: Move emitInlineAsmEnd to the AsmPrinter interface. There is no inline asm in a .s file. Therefore, there should be no logic to handle it in the streamer. Inline asm only exists in bitcode files, so the logic can live in the (long misnamed) AsmPrinter class. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200011 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMAsmPrinter.cpp | 16 ++++++++++++++++ lib/Target/ARM/ARMAsmPrinter.h | 3 +++ lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp | 17 ----------------- 3 files changed, 19 insertions(+), 17 deletions(-) (limited to 'lib/Target/ARM') diff --git a/lib/Target/ARM/ARMAsmPrinter.cpp b/lib/Target/ARM/ARMAsmPrinter.cpp index 965d93c1f4..325f355385 100644 --- a/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/ARMAsmPrinter.cpp @@ -438,6 +438,22 @@ bool ARMAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, return false; } +static bool isThumb(const MCSubtargetInfo& STI) { + return (STI.getFeatureBits() & ARM::ModeThumb) != 0; +} + +void ARMAsmPrinter::emitInlineAsmEnd(const MCSubtargetInfo &StartInfo, + MCSubtargetInfo *EndInfo) const { + // If either end mode is unknown (EndInfo == NULL) or different than + // the start mode, then restore the start mode. + const bool WasThumb = isThumb(StartInfo); + if (EndInfo == NULL || WasThumb != isThumb(*EndInfo)) { + OutStreamer.EmitAssemblerFlag(WasThumb ? MCAF_Code16 : MCAF_Code32); + if (EndInfo) + EndInfo->ToggleFeature(ARM::ModeThumb); + } +} + void ARMAsmPrinter::EmitStartOfAsmFile(Module &M) { if (Subtarget->isTargetMachO()) { Reloc::Model RelocM = TM.getRelocationModel(); diff --git a/lib/Target/ARM/ARMAsmPrinter.h b/lib/Target/ARM/ARMAsmPrinter.h index d7136505e4..a2cda3b95d 100644 --- a/lib/Target/ARM/ARMAsmPrinter.h +++ b/lib/Target/ARM/ARMAsmPrinter.h @@ -63,6 +63,9 @@ public: unsigned AsmVariant, const char *ExtraCode, raw_ostream &O) LLVM_OVERRIDE; + virtual void emitInlineAsmEnd(const MCSubtargetInfo &StartInfo, + MCSubtargetInfo *EndInfo) const LLVM_OVERRIDE; + void EmitJumpTable(const MachineInstr *MI); void EmitJump2Table(const MachineInstr *MI); virtual void EmitInstruction(const MachineInstr *MI) LLVM_OVERRIDE; diff --git a/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp b/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp index e9ffc5890a..8e224780d8 100644 --- a/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp +++ b/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp @@ -104,25 +104,8 @@ static unsigned GetArchDefaultCPUArch(unsigned ID) { return 0; } -static bool isThumb(const MCSubtargetInfo& STI) { - return (STI.getFeatureBits() & ARM::ModeThumb) != 0; -} - void ARMTargetStreamer::anchor() {} -void ARMTargetStreamer::emitInlineAsmEnd(const MCSubtargetInfo &StartInfo, - MCSubtargetInfo *EndInfo) { - // If either end mode is unknown (EndInfo == NULL) or different than - // the start mode, then restore the start mode. - const bool WasThumb = isThumb(StartInfo); - if (EndInfo == NULL || WasThumb != isThumb(*EndInfo)) { - assert(Streamer); - Streamer->EmitAssemblerFlag(WasThumb ? MCAF_Code16 : MCAF_Code32); - if (EndInfo) - EndInfo->ToggleFeature(ARM::ModeThumb); - } -} - namespace { class ARMELFStreamer; -- cgit v1.2.3