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 13 namespace llvm { 14 class MCInst; 15 class raw_ostream; 16 class MCAsmInfo; 17 class MCInstrInfo; 18 class MCRegisterInfo; 19 class StringRef; 20 21 /// MCInstPrinter - This is an instance of a target assembly language printer 22 /// that converts an MCInst to valid target assembly syntax. 23 class MCInstPrinter { 24 protected: 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 /// Utility function for printing annotations. 37 void printAnnotation(raw_ostream &OS, StringRef Annot); 38 public: MCInstPrinter(const MCAsmInfo & mai,const MCInstrInfo & mii,const MCRegisterInfo & mri)39 MCInstPrinter(const MCAsmInfo &mai, const MCInstrInfo &mii, 40 const MCRegisterInfo &mri) 41 : CommentStream(0), MAI(mai), MII(mii), MRI(mri), AvailableFeatures(0) {} 42 43 virtual ~MCInstPrinter(); 44 45 /// setCommentStream - Specify a stream to emit comments to. setCommentStream(raw_ostream & OS)46 void setCommentStream(raw_ostream &OS) { CommentStream = &OS; } 47 48 /// printInst - Print the specified MCInst to the specified raw_ostream. 49 /// 50 virtual void printInst(const MCInst *MI, raw_ostream &OS, 51 StringRef Annot) = 0; 52 53 /// getOpcodeName - Return the name of the specified opcode enum (e.g. 54 /// "MOV32ri") or empty if we can't resolve it. 55 StringRef getOpcodeName(unsigned Opcode) const; 56 57 /// printRegName - Print the assembler register name. 58 virtual void printRegName(raw_ostream &OS, unsigned RegNo) const; 59 getAvailableFeatures()60 unsigned getAvailableFeatures() const { return AvailableFeatures; } setAvailableFeatures(unsigned Value)61 void setAvailableFeatures(unsigned Value) { AvailableFeatures = Value; } 62 }; 63 64 } // namespace llvm 65 66 #endif 67