blob: 4d1df78ee48f141039899f13e3cd57ae108a70e8 [file] [log] [blame]
Jia Liub22310f2012-02-18 12:03:15 +00001//===- PPCInstPrinter.h - Convert PPC MCInst to assembly syntax -*- C++ -*-===//
Chris Lattnera76eab42010-11-14 19:40:38 +00002//
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;
Chris Lattnera76eab42010-11-14 19:40:38 +000022
23class PPCInstPrinter : public MCInstPrinter {
Ulrich Weigand266db7f2013-07-08 20:20:51 +000024 bool IsDarwin;
Chris Lattnera76eab42010-11-14 19:40:38 +000025public:
Craig Topper54bfde72012-04-02 06:09:36 +000026 PPCInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
Ulrich Weigand266db7f2013-07-08 20:20:51 +000027 const MCRegisterInfo &MRI, bool isDarwin)
28 : MCInstPrinter(MAI, MII, MRI), IsDarwin(isDarwin) {}
Chris Lattner7a5c57e2010-11-14 20:02:39 +000029
30 bool isDarwinSyntax() const {
Ulrich Weigand266db7f2013-07-08 20:20:51 +000031 return IsDarwin;
Chris Lattner7a5c57e2010-11-14 20:02:39 +000032 }
Chris Lattnera76eab42010-11-14 19:40:38 +000033
Rafael Espindolad6860522011-06-02 02:34:55 +000034 virtual void printRegName(raw_ostream &OS, unsigned RegNo) const;
Owen Andersona0c3b972011-09-15 23:38:46 +000035 virtual void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot);
Chris Lattnera76eab42010-11-14 19:40:38 +000036
Chris Lattnera76eab42010-11-14 19:40:38 +000037 // Autogenerated by tblgen.
38 void printInstruction(const MCInst *MI, raw_ostream &O);
39 static const char *getRegisterName(unsigned RegNo);
40
41
Chris Lattner7a5c57e2010-11-14 20:02:39 +000042 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000043 void printPredicateOperand(const MCInst *MI, unsigned OpNo,
Hal Finkel460e94d2012-06-22 23:10:08 +000044 raw_ostream &O, const char *Modifier = 0);
Chris Lattnera76eab42010-11-14 19:40:38 +000045
Hal Finkel27774d92014-03-13 07:58:58 +000046 void printU2ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner94881432010-11-14 20:11:21 +000047 void printS5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
48 void printU5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
49 void printU6ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
50 void printS16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
51 void printU16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner3dc9bb22010-11-14 21:20:46 +000052 void printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Ulrich Weigandb6a30d12013-06-24 11:03:33 +000053 void printAbsBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Ulrich Weigand5143bab2013-07-02 21:31:04 +000054 void printTLSCall(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000055
Chris Lattner0dcd8002010-11-14 20:22:56 +000056 void printcrbitm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000057
Chris Lattner0dcd8002010-11-14 20:22:56 +000058 void printMemRegImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner0dcd8002010-11-14 20:22:56 +000059 void printMemRegReg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000060};
61} // end namespace llvm
62
63#endif