MCInstPrinter.h revision c97ef618d2d849a272a353c2b4343fc5902cd921
165b0b297db16252835ab4d78f33578baa3ace28aChris Lattner//===-- MCInstPrinter.h - Convert an MCInst to target assembly syntax -----===// 265b0b297db16252835ab4d78f33578baa3ace28aChris Lattner// 365b0b297db16252835ab4d78f33578baa3ace28aChris Lattner// The LLVM Compiler Infrastructure 465b0b297db16252835ab4d78f33578baa3ace28aChris Lattner// 565b0b297db16252835ab4d78f33578baa3ace28aChris Lattner// This file is distributed under the University of Illinois Open Source 665b0b297db16252835ab4d78f33578baa3ace28aChris Lattner// License. See LICENSE.TXT for details. 765b0b297db16252835ab4d78f33578baa3ace28aChris Lattner// 865b0b297db16252835ab4d78f33578baa3ace28aChris Lattner//===----------------------------------------------------------------------===// 965b0b297db16252835ab4d78f33578baa3ace28aChris Lattner 1065b0b297db16252835ab4d78f33578baa3ace28aChris Lattner#ifndef LLVM_MC_MCINSTPRINTER_H 1165b0b297db16252835ab4d78f33578baa3ace28aChris Lattner#define LLVM_MC_MCINSTPRINTER_H 1265b0b297db16252835ab4d78f33578baa3ace28aChris Lattner 1365b0b297db16252835ab4d78f33578baa3ace28aChris Lattnernamespace llvm { 1465b0b297db16252835ab4d78f33578baa3ace28aChris Lattnerclass MCInst; 1565b0b297db16252835ab4d78f33578baa3ace28aChris Lattnerclass raw_ostream; 16c493fb2f4d67bfe4b695d9067eae178ced5970ccChris Lattnerclass MCAsmInfo; 1717463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topperclass MCInstrInfo; 18c6449b636f4984be88f128d0375c056ad05e7e8fJim Grosbachclass MCRegisterInfo; 197e85180d15c4d5a451fbc078f7194a41c6230a57Chris Lattnerclass StringRef; 20c493fb2f4d67bfe4b695d9067eae178ced5970ccChris Lattner 2165b0b297db16252835ab4d78f33578baa3ace28aChris Lattner/// MCInstPrinter - This is an instance of a target assembly language printer 2265b0b297db16252835ab4d78f33578baa3ace28aChris Lattner/// that converts an MCInst to valid target assembly syntax. 2365b0b297db16252835ab4d78f33578baa3ace28aChris Lattnerclass MCInstPrinter { 24c493fb2f4d67bfe4b695d9067eae178ced5970ccChris Lattnerprotected: 255d672cfab096390690a1a5f33b0057c4cf252c55Chris Lattner /// CommentStream - a stream that comments can be emitted to if desired. 265d672cfab096390690a1a5f33b0057c4cf252c55Chris Lattner /// Each comment must end with a newline. This will be null if verbose 275d672cfab096390690a1a5f33b0057c4cf252c55Chris Lattner /// assembly emission is disable. 285d672cfab096390690a1a5f33b0057c4cf252c55Chris Lattner raw_ostream *CommentStream; 29c493fb2f4d67bfe4b695d9067eae178ced5970ccChris Lattner const MCAsmInfo &MAI; 3017463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper const MCInstrInfo &MII; 31c6449b636f4984be88f128d0375c056ad05e7e8fJim Grosbach const MCRegisterInfo &MRI; 3244dcfd36253570ccd5f00189eb918604473135e0Bill Wendling 3344dcfd36253570ccd5f00189eb918604473135e0Bill Wendling /// The current set of available features. 3444dcfd36253570ccd5f00189eb918604473135e0Bill Wendling unsigned AvailableFeatures; 3598c5ddabca1debf935a07d14d0cbc9732374bdb8Owen Anderson 3698c5ddabca1debf935a07d14d0cbc9732374bdb8Owen Anderson /// Utility function for printing annotations. 3798c5ddabca1debf935a07d14d0cbc9732374bdb8Owen Anderson void printAnnotation(raw_ostream &OS, StringRef Annot); 3865b0b297db16252835ab4d78f33578baa3ace28aChris Lattnerpublic: 3917463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper MCInstPrinter(const MCAsmInfo &mai, const MCInstrInfo &mii, 4017463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper const MCRegisterInfo &mri) 4117463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper : CommentStream(0), MAI(mai), MII(mii), MRI(mri), AvailableFeatures(0) {} 42fd2eaed4f0a9375071a448993c573a124370ed34Jim Grosbach 4365b0b297db16252835ab4d78f33578baa3ace28aChris Lattner virtual ~MCInstPrinter(); 445d672cfab096390690a1a5f33b0057c4cf252c55Chris Lattner 455d672cfab096390690a1a5f33b0057c4cf252c55Chris Lattner /// setCommentStream - Specify a stream to emit comments to. 465d672cfab096390690a1a5f33b0057c4cf252c55Chris Lattner void setCommentStream(raw_ostream &OS) { CommentStream = &OS; } 47fd2eaed4f0a9375071a448993c573a124370ed34Jim Grosbach 48d374087be5360a353a4239a155b1227057145f48Chris Lattner /// printInst - Print the specified MCInst to the specified raw_ostream. 4965b0b297db16252835ab4d78f33578baa3ace28aChris Lattner /// 5098c5ddabca1debf935a07d14d0cbc9732374bdb8Owen Anderson virtual void printInst(const MCInst *MI, raw_ostream &OS, 5198c5ddabca1debf935a07d14d0cbc9732374bdb8Owen Anderson StringRef Annot) = 0; 52ede042dc8d59ff48a48ef8e2271f2a7ee8324ba5Owen Anderson 537e85180d15c4d5a451fbc078f7194a41c6230a57Chris Lattner /// getOpcodeName - Return the name of the specified opcode enum (e.g. 547e85180d15c4d5a451fbc078f7194a41c6230a57Chris Lattner /// "MOV32ri") or empty if we can't resolve it. 55c97ef618d2d849a272a353c2b4343fc5902cd921Benjamin Kramer StringRef getOpcodeName(unsigned Opcode) const; 5657caad7a33ff145b71545f10dcfbbf2fd0f595d3Anton Korobeynikov 57cde4ce411b1ace4a80ea1dd38df97e8508aed0c9Rafael Espindola /// printRegName - Print the assembler register name. 58cde4ce411b1ace4a80ea1dd38df97e8508aed0c9Rafael Espindola virtual void printRegName(raw_ostream &OS, unsigned RegNo) const; 5944dcfd36253570ccd5f00189eb918604473135e0Bill Wendling 6044dcfd36253570ccd5f00189eb918604473135e0Bill Wendling unsigned getAvailableFeatures() const { return AvailableFeatures; } 6144dcfd36253570ccd5f00189eb918604473135e0Bill Wendling void setAvailableFeatures(unsigned Value) { AvailableFeatures = Value; } 6265b0b297db16252835ab4d78f33578baa3ace28aChris Lattner}; 63fd2eaed4f0a9375071a448993c573a124370ed34Jim Grosbach 6465b0b297db16252835ab4d78f33578baa3ace28aChris Lattner} // namespace llvm 6565b0b297db16252835ab4d78f33578baa3ace28aChris Lattner 6665b0b297db16252835ab4d78f33578baa3ace28aChris Lattner#endif 67