blob: 9c79ffb1176c0e3d962428328ce658bd1531939f [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
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000014#ifndef LLVM_LIB_TARGET_POWERPC_INSTPRINTER_PPCINSTPRINTER_H
15#define LLVM_LIB_TARGET_POWERPC_INSTPRINTER_PPCINSTPRINTER_H
Chris Lattnera76eab42010-11-14 19:40:38 +000016
17#include "llvm/MC/MCInstPrinter.h"
18
19namespace llvm {
Bill Wendling00f0cdd2011-03-21 04:13:46 +000020
Chris Lattnera76eab42010-11-14 19:40:38 +000021class PPCInstPrinter : public MCInstPrinter {
Ulrich Weigand266db7f2013-07-08 20:20:51 +000022 bool IsDarwin;
Chris Lattnera76eab42010-11-14 19:40:38 +000023public:
Craig Topper54bfde72012-04-02 06:09:36 +000024 PPCInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
Ulrich Weigand266db7f2013-07-08 20:20:51 +000025 const MCRegisterInfo &MRI, bool isDarwin)
26 : MCInstPrinter(MAI, MII, MRI), IsDarwin(isDarwin) {}
Chris Lattner7a5c57e2010-11-14 20:02:39 +000027
28 bool isDarwinSyntax() const {
Ulrich Weigand266db7f2013-07-08 20:20:51 +000029 return IsDarwin;
Chris Lattner7a5c57e2010-11-14 20:02:39 +000030 }
Chris Lattnera76eab42010-11-14 19:40:38 +000031
Craig Topper0d3fa922014-04-29 07:57:37 +000032 void printRegName(raw_ostream &OS, unsigned RegNo) const override;
Akira Hatanakab46d0232015-03-27 20:36:02 +000033 void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot,
34 const MCSubtargetInfo &STI) override;
Chris Lattnera76eab42010-11-14 19:40:38 +000035
Chris Lattnera76eab42010-11-14 19:40:38 +000036 // Autogenerated by tblgen.
37 void printInstruction(const MCInst *MI, raw_ostream &O);
38 static const char *getRegisterName(unsigned RegNo);
39
Hal Finkel7c5cb062015-04-23 18:30:38 +000040 bool printAliasInstr(const MCInst *MI, raw_ostream &OS);
41 void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx,
42 unsigned PrintMethodIdx,
43 raw_ostream &OS);
Chris Lattnera76eab42010-11-14 19:40:38 +000044
Chris Lattner7a5c57e2010-11-14 20:02:39 +000045 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000046 void printPredicateOperand(const MCInst *MI, unsigned OpNo,
Craig Toppere73658d2014-04-28 04:05:08 +000047 raw_ostream &O, const char *Modifier = nullptr);
Hal Finkel522e4d92016-09-03 02:31:44 +000048 void printATBitsAsHint(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000049
Nemanja Ivanovice8effe12015-03-04 20:44:33 +000050 void printU1ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Hal Finkel27774d92014-03-13 07:58:58 +000051 void printU2ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Kit Barton535e69d2015-03-25 19:36:23 +000052 void printU3ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Joerg Sonnenberger9e9623c2014-07-29 22:21:57 +000053 void printU4ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner94881432010-11-14 20:11:21 +000054 void printS5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
55 void printU5ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
56 void printU6ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chuang-Yu Cheng80722712016-03-28 08:34:28 +000057 void printU7ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
58 void printU8ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Bill Schmidte26236e2015-05-22 16:44:10 +000059 void printU10ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Hal Finkelc93a9a22015-02-25 01:06:45 +000060 void printU12ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner94881432010-11-14 20:11:21 +000061 void printS16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
62 void printU16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner3dc9bb22010-11-14 21:20:46 +000063 void printBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Ulrich Weigandb6a30d12013-06-24 11:03:33 +000064 void printAbsBranchOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Ulrich Weigand5143bab2013-07-02 21:31:04 +000065 void printTLSCall(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000066
Chris Lattner0dcd8002010-11-14 20:22:56 +000067 void printcrbitm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000068
Chris Lattner0dcd8002010-11-14 20:22:56 +000069 void printMemRegImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattner0dcd8002010-11-14 20:22:56 +000070 void printMemRegReg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnera76eab42010-11-14 19:40:38 +000071};
72} // end namespace llvm
73
74#endif