blob: 9cf9db9c26b78567541d4f94342d011c15025ffe [file] [log] [blame]
Chris Lattnera76eab42010-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 Wendling00f0cdd2011-03-21 04:13:46 +000020
21class MCOperand;
22class TargetMachine;
Chris Lattnera76eab42010-11-14 19:40:38 +000023
24class PPCInstPrinter : public MCInstPrinter {
Chris Lattner7a5c57e2010-11-14 20:02:39 +000025 // 0 -> AIX, 1 -> Darwin.
26 unsigned SyntaxVariant;
Chris Lattnera76eab42010-11-14 19:40:38 +000027public:
Bill Wendling00f0cdd2011-03-21 04:13:46 +000028 PPCInstPrinter(TargetMachine &TM, const MCAsmInfo &MAI,
29 unsigned syntaxVariant)
Chris Lattner7a5c57e2010-11-14 20:02:39 +000030 : MCInstPrinter(MAI), SyntaxVariant(syntaxVariant) {}
31
32 bool isDarwinSyntax() const {
33 return SyntaxVariant == 1;
34 }
Chris Lattnera76eab42010-11-14 19:40:38 +000035
36 virtual void printInst(const MCInst *MI, raw_ostream &O);
37 virtual StringRef getOpcodeName(unsigned Opcode) const;
38
39 static const char *getInstructionName(unsigned Opcode);
40
41 // Autogenerated by tblgen.
42 void printInstruction(const MCInst *MI, raw_ostream &O);
43 static const char *getRegisterName(unsigned RegNo);
44
45
Chris Lattner7a5c57e2010-11-14 20:02:39 +000046 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000047 void printPredicateOperand(const MCInst *MI, unsigned OpNo,
Chris Lattnerf2cb69c2010-11-14 21:51:37 +000048 raw_ostream &O, const char *Modifier);
Chris Lattnera76eab42010-11-14 19:40:38 +000049
50
Chris Lattner94881432010-11-14 20:11:21 +000051 void printS5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
52 void printU5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
53 void printU6ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
54 void printS16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
55 void printU16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
56 void printS16X4ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner3dc9bb22010-11-14 21:20:46 +000057 void printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnerf2cb69c2010-11-14 21:51:37 +000058 void printAbsAddrOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000059
Chris Lattner0dcd8002010-11-14 20:22:56 +000060 void printcrbitm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000061
Chris Lattner0dcd8002010-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 Lattnera76eab42010-11-14 19:40:38 +000065
66 // FIXME: Remove
Chris Lattnerc2ac86e2010-11-14 21:33:07 +000067 void printSymbolLo(const MCInst *MI, unsigned OpNo, raw_ostream &O);
68 void printSymbolHi(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000069};
70} // end namespace llvm
71
72#endif