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