blob: d022a4496e84025de5c1b7e4882270ee7e67e461 [file] [log] [blame]
Chris Lattner60d5b5f2010-11-14 19:40:38 +00001//===-- PPCInstPrinter.h - Convert PPC MCInst to assembly syntax ----------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This class prints an PPC MCInst to a .s file.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef PPCINSTPRINTER_H
15#define PPCINSTPRINTER_H
16
17#include "llvm/MC/MCInstPrinter.h"
18
19namespace llvm {
Bill Wendlinga5c177e2011-03-21 04:13:46 +000020
21class MCOperand;
Chris Lattner60d5b5f2010-11-14 19:40:38 +000022
23class PPCInstPrinter : public MCInstPrinter {
Chris Lattner0d1b7d92010-11-14 20:02:39 +000024 // 0 -> AIX, 1 -> Darwin.
25 unsigned SyntaxVariant;
Chris Lattner60d5b5f2010-11-14 19:40:38 +000026public:
Evan Chengb2627992011-07-06 19:45:42 +000027 PPCInstPrinter(const MCAsmInfo &MAI, unsigned syntaxVariant)
Chris Lattner0d1b7d92010-11-14 20:02:39 +000028 : MCInstPrinter(MAI), SyntaxVariant(syntaxVariant) {}
29
30 bool isDarwinSyntax() const {
31 return SyntaxVariant == 1;
32 }
Chris Lattner60d5b5f2010-11-14 19:40:38 +000033
Rafael Espindolacde4ce42011-06-02 02:34:55 +000034 virtual void printRegName(raw_ostream &OS, unsigned RegNo) const;
Chris Lattner60d5b5f2010-11-14 19:40:38 +000035 virtual void printInst(const MCInst *MI, raw_ostream &O);
36 virtual StringRef getOpcodeName(unsigned Opcode) const;
37
38 static const char *getInstructionName(unsigned Opcode);
39
40 // Autogenerated by tblgen.
41 void printInstruction(const MCInst *MI, raw_ostream &O);
42 static const char *getRegisterName(unsigned RegNo);
43
44
Chris Lattner0d1b7d92010-11-14 20:02:39 +000045 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner60d5b5f2010-11-14 19:40:38 +000046 void printPredicateOperand(const MCInst *MI, unsigned OpNo,
Chris Lattnerb2e477f2010-11-14 21:51:37 +000047 raw_ostream &O, const char *Modifier);
Chris Lattner60d5b5f2010-11-14 19:40:38 +000048
49
Chris Lattner99889132010-11-14 20:11:21 +000050 void printS5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
51 void printU5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
52 void printU6ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
53 void printS16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
54 void printU16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
55 void printS16X4ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner1520fd62010-11-14 21:20:46 +000056 void printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnerb2e477f2010-11-14 21:51:37 +000057 void printAbsAddrOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner60d5b5f2010-11-14 19:40:38 +000058
Chris Lattnerfdb2ded2010-11-14 20:22:56 +000059 void printcrbitm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner60d5b5f2010-11-14 19:40:38 +000060
Chris Lattnerfdb2ded2010-11-14 20:22:56 +000061 void printMemRegImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
62 void printMemRegImmShifted(const MCInst *MI, unsigned OpNo, raw_ostream &O);
63 void printMemRegReg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner60d5b5f2010-11-14 19:40:38 +000064
65 // FIXME: Remove
Chris Lattner58d014f2010-11-14 21:33:07 +000066 void printSymbolLo(const MCInst *MI, unsigned OpNo, raw_ostream &O);
67 void printSymbolHi(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner60d5b5f2010-11-14 19:40:38 +000068};
69} // end namespace llvm
70
71#endif