LLVM  6.0.0svn
MCInstPrinter.h
Go to the documentation of this file.
1 //===- MCInstPrinter.h - MCInst to target assembly syntax -------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef LLVM_MC_MCINSTPRINTER_H
11 #define LLVM_MC_MCINSTPRINTER_H
12 
13 #include "llvm/Support/Format.h"
14 #include <cstdint>
15 
16 namespace llvm {
17 
18 template <typename T> class ArrayRef;
19 class MCAsmInfo;
20 class MCInst;
21 class MCInstrInfo;
22 class MCRegisterInfo;
23 class MCSubtargetInfo;
24 class raw_ostream;
25 class StringRef;
26 
27 /// Convert `Bytes' to a hex string and output to `OS'
28 void dumpBytes(ArrayRef<uint8_t> Bytes, raw_ostream &OS);
29 
30 namespace HexStyle {
31 
32 enum Style {
33  C, ///< 0xff
34  Asm ///< 0ffh
35 };
36 
37 } // end namespace HexStyle
38 
39 /// \brief This is an instance of a target assembly language printer that
40 /// converts an MCInst to valid target assembly syntax.
42 protected:
43  /// \brief A stream that comments can be emitted to if desired. Each comment
44  /// must end with a newline. This will be null if verbose assembly emission
45  /// is disable.
46  raw_ostream *CommentStream = nullptr;
47  const MCAsmInfo &MAI;
48  const MCInstrInfo &MII;
50 
51  /// True if we are printing marked up assembly.
52  bool UseMarkup = false;
53 
54  /// True if we are printing immediates as hex.
55  bool PrintImmHex = false;
56 
57  /// Which style to use for printing hexadecimal values.
58  HexStyle::Style PrintHexStyle = HexStyle::C;
59 
60  /// Utility function for printing annotations.
61  void printAnnotation(raw_ostream &OS, StringRef Annot);
62 
63 public:
64  MCInstPrinter(const MCAsmInfo &mai, const MCInstrInfo &mii,
65  const MCRegisterInfo &mri) : MAI(mai), MII(mii), MRI(mri) {}
66 
67  virtual ~MCInstPrinter();
68 
69  /// \brief Specify a stream to emit comments to.
70  void setCommentStream(raw_ostream &OS) { CommentStream = &OS; }
71 
72  /// \brief Print the specified MCInst to the specified raw_ostream.
73  virtual void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot,
74  const MCSubtargetInfo &STI) = 0;
75 
76  /// \brief Return the name of the specified opcode enum (e.g. "MOV32ri") or
77  /// empty if we can't resolve it.
78  StringRef getOpcodeName(unsigned Opcode) const;
79 
80  /// \brief Print the assembler register name.
81  virtual void printRegName(raw_ostream &OS, unsigned RegNo) const;
82 
83  bool getUseMarkup() const { return UseMarkup; }
84  void setUseMarkup(bool Value) { UseMarkup = Value; }
85 
86  /// Utility functions to make adding mark ups simpler.
87  StringRef markup(StringRef s) const;
88  StringRef markup(StringRef a, StringRef b) const;
89 
90  bool getPrintImmHex() const { return PrintImmHex; }
91  void setPrintImmHex(bool Value) { PrintImmHex = Value; }
92 
93  HexStyle::Style getPrintHexStyle() const { return PrintHexStyle; }
94  void setPrintHexStyle(HexStyle::Style Value) { PrintHexStyle = Value; }
95 
96  /// Utility function to print immediates in decimal or hex.
98  return PrintImmHex ? formatHex(Value) : formatDec(Value);
99  }
100 
101  /// Utility functions to print decimal/hexadecimal values.
102  format_object<int64_t> formatDec(int64_t Value) const;
103  format_object<int64_t> formatHex(int64_t Value) const;
104  format_object<uint64_t> formatHex(uint64_t Value) const;
105 };
106 
107 } // end namespace llvm
108 
109 #endif // LLVM_MC_MCINSTPRINTER_H
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
void setPrintHexStyle(HexStyle::Style Value)
Definition: MCInstPrinter.h:94
void setPrintImmHex(bool Value)
Definition: MCInstPrinter.h:91
format_object< int64_t > formatImm(int64_t Value) const
Utility function to print immediates in decimal or hex.
Definition: MCInstPrinter.h:97
Instances of this class represent a single low-level machine instruction.
Definition: MCInst.h:159
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
This class is intended to be used as a base class for asm properties and features specific to the tar...
Definition: MCAsmInfo.h:56
bool getPrintImmHex() const
Definition: MCInstPrinter.h:90
void setCommentStream(raw_ostream &OS)
Specify a stream to emit comments to.
Definition: MCInstPrinter.h:70
HexStyle::Style getPrintHexStyle() const
Definition: MCInstPrinter.h:93
Interface to description of machine instruction set.
Definition: MCInstrInfo.h:24
void setUseMarkup(bool Value)
Definition: MCInstPrinter.h:84
const MCAsmInfo & MAI
Definition: MCInstPrinter.h:47
bool getUseMarkup() const
Definition: MCInstPrinter.h:83
This is an instance of a target assembly language printer that converts an MCInst to valid target ass...
Definition: MCInstPrinter.h:41
MCSubtargetInfo - Generic base class for all target subtargets.
const MCInstrInfo & MII
Definition: MCInstPrinter.h:48
void dumpBytes(ArrayRef< uint8_t > Bytes, raw_ostream &OS)
Convert `Bytes&#39; to a hex string and output to `OS&#39;.
LLVM Value Representation.
Definition: Value.h:73
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:44
IRTranslator LLVM IR MI
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
MCInstPrinter(const MCAsmInfo &mai, const MCInstrInfo &mii, const MCRegisterInfo &mri)
Definition: MCInstPrinter.h:64
const MCRegisterInfo & MRI
Definition: MCInstPrinter.h:49