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