131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===- PPCInstPrinter.h - Convert PPC MCInst to assembly syntax -*- C++ -*-===//
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;
2260d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
2360d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattnerclass PPCInstPrinter : public MCInstPrinter {
240d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  // 0 -> AIX, 1 -> Darwin.
250d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  unsigned SyntaxVariant;
2660d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattnerpublic:
2717463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper  PPCInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
2817463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper                 const MCRegisterInfo &MRI, unsigned syntaxVariant)
2917463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper    : MCInstPrinter(MAI, MII, MRI), SyntaxVariant(syntaxVariant) {}
300d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner
310d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  bool isDarwinSyntax() const {
320d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner    return SyntaxVariant == 1;
330d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  }
3460d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
35cde4ce411b1ace4a80ea1dd38df97e8508aed0c9Rafael Espindola  virtual void printRegName(raw_ostream &OS, unsigned RegNo) const;
3698c5ddabca1debf935a07d14d0cbc9732374bdb8Owen Anderson  virtual void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot);
3760d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
3860d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  // Autogenerated by tblgen.
3960d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  void printInstruction(const MCInst *MI, raw_ostream &O);
4060d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  static const char *getRegisterName(unsigned RegNo);
4160d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
4260d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
430d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
4460d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  void printPredicateOperand(const MCInst *MI, unsigned OpNo,
45009f7afbeb77d1cc8e962bac7057b73b6d39d62fHal Finkel                             raw_ostream &O, const char *Modifier = 0);
4660d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
4760d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
4899889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printS5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
4999889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printU5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5099889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printU6ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5199889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printS16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5299889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printU16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5399889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printS16X4ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
541520fd60950c1c347457b225dbbd72224d4fcd19Chris Lattner  void printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
55b2e477f5463795de8265939300fb5c0abfdded77Chris Lattner  void printAbsAddrOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5660d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
57fdb2ded765316ee2ee2f796b0e2befa2c23acd1dChris Lattner  void printcrbitm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5860d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
59fdb2ded765316ee2ee2f796b0e2befa2c23acd1dChris Lattner  void printMemRegImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
60fdb2ded765316ee2ee2f796b0e2befa2c23acd1dChris Lattner  void printMemRegImmShifted(const MCInst *MI, unsigned OpNo, raw_ostream &O);
61fdb2ded765316ee2ee2f796b0e2befa2c23acd1dChris Lattner  void printMemRegReg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
6260d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
6360d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  // FIXME: Remove
6458d014f6031ab95b0057a54dc377e7b0d23d674fChris Lattner  void printSymbolLo(const MCInst *MI, unsigned OpNo, raw_ostream &O);
6558d014f6031ab95b0057a54dc377e7b0d23d674fChris Lattner  void printSymbolHi(const MCInst *MI, unsigned OpNo, raw_ostream &O);
6660d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner};
6760d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner} // end namespace llvm
6860d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
6960d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner#endif
70