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 {
24a68f58ab2bec6a024afae498e4082ddd8b01f178Ulrich Weigand  bool IsDarwin;
2560d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattnerpublic:
2617463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper  PPCInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
27a68f58ab2bec6a024afae498e4082ddd8b01f178Ulrich Weigand                 const MCRegisterInfo &MRI, bool isDarwin)
28a68f58ab2bec6a024afae498e4082ddd8b01f178Ulrich Weigand    : MCInstPrinter(MAI, MII, MRI), IsDarwin(isDarwin) {}
290d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner
300d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  bool isDarwinSyntax() const {
31a68f58ab2bec6a024afae498e4082ddd8b01f178Ulrich Weigand    return IsDarwin;
320d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  }
3360d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
34dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void printRegName(raw_ostream &OS, unsigned RegNo) const override;
35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot) override;
3660d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
3760d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  // Autogenerated by tblgen.
3860d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  void printInstruction(const MCInst *MI, raw_ostream &O);
3960d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  static const char *getRegisterName(unsigned RegNo);
4060d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
4160d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
420d1b7d9e3dd8512b47655af7d8ea738ea1d4ac51Chris Lattner  void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
4360d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner  void printPredicateOperand(const MCInst *MI, unsigned OpNo,
44dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                             raw_ostream &O, const char *Modifier = nullptr);
4560d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  void printU2ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
4799889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printS5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
4899889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printU5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
4999889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printU6ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5099889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printS16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5199889132f3d6b3f5eab80934b3a0f1687904e5a2Chris Lattner  void printU16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
521520fd60950c1c347457b225dbbd72224d4fcd19Chris Lattner  void printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
539679c47a07386cbf3547a0927609c7ee080b2aabUlrich Weigand  void printAbsBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
54a17a7e1868076a4430cfa16694bcb42884130928Ulrich Weigand  void printTLSCall(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5560d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
56fdb2ded765316ee2ee2f796b0e2befa2c23acd1dChris Lattner  void printcrbitm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
5760d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
58fdb2ded765316ee2ee2f796b0e2befa2c23acd1dChris Lattner  void printMemRegImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
59fdb2ded765316ee2ee2f796b0e2befa2c23acd1dChris Lattner  void printMemRegReg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
6060d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner};
6160d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner} // end namespace llvm
6260d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner
6360d5b5fdeec64b69c92db60242d3d90b3f978e69Chris Lattner#endif
64