Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(517)

Unified Diff: lib/MC/MCAsmStreamer.cpp

Issue 1181263004: subclassed MCAsmStreamer (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/llvm/Support/TargetRegistry.h ('k') | lib/Target/X86/MCTargetDesc/CMakeLists.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/MC/MCAsmStreamer.cpp
diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp
index 36b6f6528cf8e311ff2495a1cc944ef655de4ac4..69dcfee1af4c655838aba1de8c4e218d76d0f679 100644
--- a/lib/MC/MCAsmStreamer.cpp
+++ b/lib/MC/MCAsmStreamer.cpp
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/MC/MCStreamer.h"
+#include "llvm/MC/MCAsmStreamer.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringExtras.h"
@@ -34,218 +35,6 @@
#include <cctype>
using namespace llvm;
-namespace {
-
-class MCAsmStreamer final : public MCStreamer {
- std::unique_ptr<formatted_raw_ostream> OSOwner;
- formatted_raw_ostream &OS;
- const MCAsmInfo *MAI;
- std::unique_ptr<MCInstPrinter> InstPrinter;
- std::unique_ptr<MCCodeEmitter> Emitter;
- std::unique_ptr<MCAsmBackend> AsmBackend;
-
- SmallString<128> CommentToEmit;
- raw_svector_ostream CommentStream;
-
- unsigned IsVerboseAsm : 1;
- unsigned ShowInst : 1;
- unsigned UseDwarfDirectory : 1;
- // @LOCALMOD: we don't have an MCAssembler object here, so we can't ask it
- // if bundle alignment is enabled. Instead, just track the alignment here.
- unsigned BundleAlignmentEnabled : 1;
-
- void EmitRegisterName(int64_t Register);
- void EmitCFIStartProcImpl(MCDwarfFrameInfo &Frame) override;
- void EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame) override;
-
-public:
- MCAsmStreamer(MCContext &Context, std::unique_ptr<formatted_raw_ostream> os,
- bool isVerboseAsm, bool useDwarfDirectory,
- MCInstPrinter *printer, MCCodeEmitter *emitter,
- MCAsmBackend *asmbackend, bool showInst)
- : MCStreamer(Context), OSOwner(std::move(os)), OS(*OSOwner),
- MAI(Context.getAsmInfo()), InstPrinter(printer), Emitter(emitter),
- AsmBackend(asmbackend), CommentStream(CommentToEmit),
- IsVerboseAsm(isVerboseAsm), ShowInst(showInst),
- UseDwarfDirectory(useDwarfDirectory),
- BundleAlignmentEnabled(0) {
- if (InstPrinter && IsVerboseAsm)
- InstPrinter->setCommentStream(CommentStream);
- }
-
- inline void EmitEOL() {
- // If we don't have any comments, just emit a \n.
- if (!IsVerboseAsm) {
- OS << '\n';
- return;
- }
- EmitCommentsAndEOL();
- }
- void EmitCommentsAndEOL();
-
- /// isVerboseAsm - Return true if this streamer supports verbose assembly at
- /// all.
- bool isVerboseAsm() const override { return IsVerboseAsm; }
-
- /// hasRawTextSupport - We support EmitRawText.
- bool hasRawTextSupport() const override { return true; }
-
- /// AddComment - Add a comment that can be emitted to the generated .s
- /// file if applicable as a QoI issue to make the output of the compiler
- /// more readable. This only affects the MCAsmStreamer, and only when
- /// verbose assembly output is enabled.
- void AddComment(const Twine &T) override;
-
- /// AddEncodingComment - Add a comment showing the encoding of an instruction.
- void AddEncodingComment(const MCInst &Inst, const MCSubtargetInfo &);
-
- /// GetCommentOS - Return a raw_ostream that comments can be written to.
- /// Unlike AddComment, you are required to terminate comments with \n if you
- /// use this method.
- raw_ostream &GetCommentOS() override {
- if (!IsVerboseAsm)
- return nulls(); // Discard comments unless in verbose asm mode.
- return CommentStream;
- }
-
- void emitRawComment(const Twine &T, bool TabPrefix = true) override;
-
- /// AddBlankLine - Emit a blank line to a .s file to pretty it up.
- void AddBlankLine() override {
- EmitEOL();
- }
-
- /// @name MCStreamer Interface
- /// @{
-
- void ChangeSection(const MCSection *Section,
- const MCExpr *Subsection) override;
-
- void EmitLOHDirective(MCLOHType Kind, const MCLOHArgs &Args) override;
- void EmitLabel(MCSymbol *Symbol) override;
-
- void EmitAssemblerFlag(MCAssemblerFlag Flag) override;
- void EmitLinkerOptions(ArrayRef<std::string> Options) override;
- void EmitDataRegion(MCDataRegionType Kind) override;
- void EmitVersionMin(MCVersionMinType Kind, unsigned Major, unsigned Minor,
- unsigned Update) override;
- void EmitThumbFunc(MCSymbol *Func) override;
-
- void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override;
- void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) override;
- bool EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
-
- void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) override;
- void BeginCOFFSymbolDef(const MCSymbol *Symbol) override;
- void EmitCOFFSymbolStorageClass(int StorageClass) override;
- void EmitCOFFSymbolType(int Type) override;
- void EndCOFFSymbolDef() override;
- void EmitCOFFSectionIndex(MCSymbol const *Symbol) override;
- void EmitCOFFSecRel32(MCSymbol const *Symbol) override;
- void EmitELFSize(MCSymbol *Symbol, const MCExpr *Value) override;
- void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
- unsigned ByteAlignment) override;
-
- /// EmitLocalCommonSymbol - Emit a local common (.lcomm) symbol.
- ///
- /// @param Symbol - The common symbol to emit.
- /// @param Size - The size of the common symbol.
- /// @param ByteAlignment - The alignment of the common symbol in bytes.
- void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
- unsigned ByteAlignment) override;
-
- void EmitZerofill(const MCSection *Section, MCSymbol *Symbol = nullptr,
- uint64_t Size = 0, unsigned ByteAlignment = 0) override;
-
- void EmitTBSSSymbol (const MCSection *Section, MCSymbol *Symbol,
- uint64_t Size, unsigned ByteAlignment = 0) override;
-
- void EmitBytes(StringRef Data) override;
-
- void EmitValueImpl(const MCExpr *Value, unsigned Size,
- const SMLoc &Loc = SMLoc()) override;
- void EmitIntValue(uint64_t Value, unsigned Size) override;
-
- void EmitULEB128Value(const MCExpr *Value) override;
-
- void EmitSLEB128Value(const MCExpr *Value) override;
-
- void EmitGPRel64Value(const MCExpr *Value) override;
-
- void EmitGPRel32Value(const MCExpr *Value) override;
-
-
- void EmitFill(uint64_t NumBytes, uint8_t FillValue) override;
-
- void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0,
- unsigned ValueSize = 1,
- unsigned MaxBytesToEmit = 0) override;
-
- void EmitCodeAlignment(unsigned ByteAlignment,
- unsigned MaxBytesToEmit = 0) override;
-
- bool EmitValueToOffset(const MCExpr *Offset,
- unsigned char Value = 0) override;
-
- void EmitFileDirective(StringRef Filename) override;
- unsigned EmitDwarfFileDirective(unsigned FileNo, StringRef Directory,
- StringRef Filename,
- unsigned CUID = 0) override;
- void EmitDwarfLocDirective(unsigned FileNo, unsigned Line,
- unsigned Column, unsigned Flags,
- unsigned Isa, unsigned Discriminator,
- StringRef FileName) override;
- MCSymbol *getDwarfLineTableSymbol(unsigned CUID) override;
-
- void EmitIdent(StringRef IdentString) override;
- void EmitCFISections(bool EH, bool Debug) override;
- void EmitCFIDefCfa(int64_t Register, int64_t Offset) override;
- void EmitCFIDefCfaOffset(int64_t Offset) override;
- void EmitCFIDefCfaRegister(int64_t Register) override;
- void EmitCFIOffset(int64_t Register, int64_t Offset) override;
- void EmitCFIPersonality(const MCSymbol *Sym, unsigned Encoding) override;
- void EmitCFILsda(const MCSymbol *Sym, unsigned Encoding) override;
- void EmitCFIRememberState() override;
- void EmitCFIRestoreState() override;
- void EmitCFISameValue(int64_t Register) override;
- void EmitCFIRelOffset(int64_t Register, int64_t Offset) override;
- void EmitCFIAdjustCfaOffset(int64_t Adjustment) override;
- void EmitCFISignalFrame() override;
- void EmitCFIUndefined(int64_t Register) override;
- void EmitCFIRegister(int64_t Register1, int64_t Register2) override;
- void EmitCFIWindowSave() override;
-
- void EmitWinCFIStartProc(const MCSymbol *Symbol) override;
- void EmitWinCFIEndProc() override;
- void EmitWinCFIStartChained() override;
- void EmitWinCFIEndChained() override;
- void EmitWinCFIPushReg(unsigned Register) override;
- void EmitWinCFISetFrame(unsigned Register, unsigned Offset) override;
- void EmitWinCFIAllocStack(unsigned Size) override;
- void EmitWinCFISaveReg(unsigned Register, unsigned Offset) override;
- void EmitWinCFISaveXMM(unsigned Register, unsigned Offset) override;
- void EmitWinCFIPushFrame(bool Code) override;
- void EmitWinCFIEndProlog() override;
-
- void EmitWinEHHandler(const MCSymbol *Sym, bool Unwind, bool Except) override;
- void EmitWinEHHandlerData() override;
-
- void EmitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override;
-
- void EmitBundleAlignMode(unsigned AlignPow2) override;
- void EmitBundleLock(bool AlignToEnd) override;
- void EmitBundleUnlock() override;
-
- /// EmitRawText - If this file is backed by an assembly streamer, this dumps
- /// the specified string in the output .s file. This capability is
- /// indicated by the hasRawTextSupport() predicate.
- void EmitRawTextImpl(StringRef String) override;
-
- void FinishImpl() override;
-};
-
-} // end anonymous namespace.
-
/// AddComment - Add a comment that can be emitted to the generated .s
/// file if applicable as a QoI issue to make the output of the compiler
/// more readable. This only affects the MCAsmStreamer, and only when
@@ -1254,13 +1043,6 @@ void MCAsmStreamer::EmitInstruction(const MCInst &Inst, const MCSubtargetInfo &S
assert(getCurrentSection().first &&
"Cannot emit contents before setting section!");
- // @LOCALMOD-START
- if (BundleAlignmentEnabled && AsmBackend &&
- AsmBackend->CustomExpandInst(Inst, *this)) {
- return;
- }
- // @LOCALMOD-END
- // Show the encoding in a comment if we have a code emitter.
if (Emitter)
AddEncodingComment(Inst, STI);
« no previous file with comments | « include/llvm/Support/TargetRegistry.h ('k') | lib/Target/X86/MCTargetDesc/CMakeLists.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698