MCInstPrinter.h revision e1d4a8813427b76c5f59cf5b70a9df734b7e9284
1//===-- MCInstPrinter.h - Convert an MCInst to target assembly syntax -----===// 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 13namespace llvm { 14class MCInst; 15class raw_ostream; 16class MCAsmInfo; 17class MCInstrInfo; 18class MCRegisterInfo; 19class StringRef; 20 21/// MCInstPrinter - This is an instance of a target assembly language printer 22/// that converts an MCInst to valid target assembly syntax. 23class MCInstPrinter { 24protected: 25 /// CommentStream - a stream that comments can be emitted to if desired. 26 /// Each comment must end with a newline. This will be null if verbose 27 /// assembly emission is disable. 28 raw_ostream *CommentStream; 29 const MCAsmInfo &MAI; 30 const MCInstrInfo &MII; 31 const MCRegisterInfo &MRI; 32 33 /// The current set of available features. 34 unsigned AvailableFeatures; 35 36 /// True if we are printing marked up assembly. 37 bool UseMarkup; 38 39 /// Utility function for printing annotations. 40 void printAnnotation(raw_ostream &OS, StringRef Annot); 41public: 42 MCInstPrinter(const MCAsmInfo &mai, const MCInstrInfo &mii, 43 const MCRegisterInfo &mri) 44 : CommentStream(0), MAI(mai), MII(mii), MRI(mri), AvailableFeatures(0), 45 UseMarkup(0) {} 46 47 virtual ~MCInstPrinter(); 48 49 /// setCommentStream - Specify a stream to emit comments to. 50 void setCommentStream(raw_ostream &OS) { CommentStream = &OS; } 51 52 /// printInst - Print the specified MCInst to the specified raw_ostream. 53 /// 54 virtual void printInst(const MCInst *MI, raw_ostream &OS, 55 StringRef Annot) = 0; 56 57 /// getOpcodeName - Return the name of the specified opcode enum (e.g. 58 /// "MOV32ri") or empty if we can't resolve it. 59 StringRef getOpcodeName(unsigned Opcode) const; 60 61 /// printRegName - Print the assembler register name. 62 virtual void printRegName(raw_ostream &OS, unsigned RegNo) const; 63 64 unsigned getAvailableFeatures() const { return AvailableFeatures; } 65 void setAvailableFeatures(unsigned Value) { AvailableFeatures = Value; } 66 67 bool getUseMarkup() const { return UseMarkup; } 68 void setUseMarkup(bool Value) { UseMarkup = Value; } 69 70 /// Utility functions to make adding mark ups simpler. 71 StringRef markup(StringRef s) const; 72 StringRef markup(StringRef a, StringRef b) const; 73}; 74 75} // namespace llvm 76 77#endif 78