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