PPCInstPrinter.h revision a5c177e70a42f48e4885075c4c48aad0816a2817
160d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner//===-- PPCInstPrinter.h - Convert PPC MCInst to assembly syntax ----------===//
260d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner//
360d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner//                     The LLVM Compiler Infrastructure
460d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner//
560d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner// This file is distributed under the University of Illinois Open Source
660d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner// License. See LICENSE.TXT for details.
760d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner//
860d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner//===----------------------------------------------------------------------===//
960d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner//
1060d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner// This class prints an PPC MCInst to a .s file.
1160d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner//
1260d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner//===----------------------------------------------------------------------===//
1360d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
1460d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner#ifndef PPCINSTPRINTER_H
1560d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner#define PPCINSTPRINTER_H
1660d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
1760d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner#include "llvm/MC/MCInstPrinter.h"
1860d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
1960d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattnernamespace llvm {
20a5c177e70a42f48e4885075c4c48aad0816a2817Bill Wendling
21a5c177e70a42f48e4885075c4c48aad0816a2817Bill Wendlingclass MCOperand;
22a5c177e70a42f48e4885075c4c48aad0816a2817Bill Wendlingclass TargetMachine;
2360d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
2460d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattnerclass PPCInstPrinter : public MCInstPrinter {
250d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  // 0 -> AIX, 1 -> Darwin.
260d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  unsigned SyntaxVariant;
2760d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattnerpublic:
28a5c177e70a42f48e4885075c4c48aad0816a2817Bill Wendling  PPCInstPrinter(TargetMachine &TM, const MCAsmInfo &MAI,
29a5c177e70a42f48e4885075c4c48aad0816a2817Bill Wendling                 unsigned syntaxVariant)
300d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner    : MCInstPrinter(MAI), SyntaxVariant(syntaxVariant) {}
310d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner
320d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  bool isDarwinSyntax() const {
330d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner    return SyntaxVariant == 1;
340d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  }
3560d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
3660d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  virtual void printInst(const MCInst *MI, raw_ostream &O);
3760d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  virtual StringRef getOpcodeName(unsigned Opcode) const;
3860d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
3960d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  static const char *getInstructionName(unsigned Opcode);
4060d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
4160d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  // Autogenerated by tblgen.
4260d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  void printInstruction(const MCInst *MI, raw_ostream &O);
4360d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  static const char *getRegisterName(unsigned RegNo);
4460d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
4560d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
460d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
4760d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  void printPredicateOperand(const MCInst *MI, unsigned OpNo,
48b2e477f5463795de8265939300fb5c0abfdded77Chris Lattner                             raw_ostream &O, const char *Modifier);
4960d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
5060d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
5199889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printS5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5299889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printU5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5399889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printU6ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5499889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printS16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5599889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printU16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5699889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printS16X4ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
571520fd60950c1c347457b225dbbd72224d4fcd19Chris Lattner  void printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
58b2e477f5463795de8265939300fb5c0abfdded77Chris Lattner  void printAbsAddrOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5960d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
60fdb2ded765316ee2ee2f796b0e2befa2c23acd1dChris Lattner  void printcrbitm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
6160d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
62fdb2ded765316ee2ee2f796b0e2befa2c23acd1dChris Lattner  void printMemRegImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
63fdb2ded765316ee2ee2f796b0e2befa2c23acd1dChris Lattner  void printMemRegImmShifted(const MCInst *MI, unsigned OpNo, raw_ostream &O);
64fdb2ded765316ee2ee2f796b0e2befa2c23acd1dChris Lattner  void printMemRegReg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
6560d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
6660d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  // FIXME: Remove
6758d014f6031ab95b0057a54dc377e7b0d23d674fChris Lattner  void printSymbolLo(const MCInst *MI, unsigned OpNo, raw_ostream &O);
6858d014f6031ab95b0057a54dc377e7b0d23d674fChris Lattner  void printSymbolHi(const MCInst *MI, unsigned OpNo, raw_ostream &O);
6960d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner};
7060d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner} // end namespace llvm
7160d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
7260d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner#endif
73