blob: b73f1eb91f2fe24a03a2071b0880d199f6c25102 [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 {
20 class MCOperand;
21
22class PPCInstPrinter : public MCInstPrinter {
Chris Lattner0d1b7d92010-11-14 20:02:39 +000023 // 0 -> AIX, 1 -> Darwin.
24 unsigned SyntaxVariant;
Chris Lattner60d5b5f2010-11-14 19:40:38 +000025public:
Chris Lattner0d1b7d92010-11-14 20:02:39 +000026 PPCInstPrinter(const MCAsmInfo &MAI, unsigned syntaxVariant)
27 : MCInstPrinter(MAI), SyntaxVariant(syntaxVariant) {}
28
29 bool isDarwinSyntax() const {
30 return SyntaxVariant == 1;
31 }
Chris Lattner60d5b5f2010-11-14 19:40:38 +000032
33 virtual void printInst(const MCInst *MI, raw_ostream &O);
34 virtual StringRef getOpcodeName(unsigned Opcode) const;
35
36 static const char *getInstructionName(unsigned Opcode);
37
38 // Autogenerated by tblgen.
39 void printInstruction(const MCInst *MI, raw_ostream &O);
40 static const char *getRegisterName(unsigned RegNo);
41
42
Chris Lattner0d1b7d92010-11-14 20:02:39 +000043 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner60d5b5f2010-11-14 19:40:38 +000044 void printPredicateOperand(const MCInst *MI, unsigned OpNo,
45 raw_ostream &O, const char *Modifier) {}
46
47
Chris Lattner99889132010-11-14 20:11:21 +000048 void printS5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
49 void printU5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
50 void printU6ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
51 void printS16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
52 void printU16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
53 void printS16X4ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner1520fd62010-11-14 21:20:46 +000054 void printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
55 void printCallOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
56 printOperand(MI, OpNo, O);
57 }
Chris Lattner60d5b5f2010-11-14 19:40:38 +000058 void printAbsAddrOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
59
Chris Lattnerfdb2ded2010-11-14 20:22:56 +000060 void printcrbitm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner60d5b5f2010-11-14 19:40:38 +000061
Chris Lattnerfdb2ded2010-11-14 20:22:56 +000062 void printMemRegImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
63 void printMemRegImmShifted(const MCInst *MI, unsigned OpNo, raw_ostream &O);
64 void printMemRegReg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner60d5b5f2010-11-14 19:40:38 +000065
66 // FIXME: Remove
67 void PrintSpecial(const MCInst *MI, raw_ostream &O, const char *Modifier) {}
Chris Lattner58d014f2010-11-14 21:33:07 +000068 void printSymbolLo(const MCInst *MI, unsigned OpNo, raw_ostream &O);
69 void printSymbolHi(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner60d5b5f2010-11-14 19:40:38 +000070 void printPICLabel(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
71 void printTOCEntryLabel(const MCInst *MI, unsigned OpNo, raw_ostream &O) {}
72
73};
74} // end namespace llvm
75
76#endif