ARMInstPrinter.h revision b3af5de2d97c30355b8109e149326b0664d34085
1//===-- ARMInstPrinter.h - Convert ARM 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 ARM MCInst to a .s file.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef ARMINSTPRINTER_H
15#define ARMINSTPRINTER_H
16
17#include "llvm/MC/MCInstPrinter.h"
18
19namespace llvm {
20  class MCOperand;
21
22class ARMInstPrinter : public MCInstPrinter {
23public:
24  ARMInstPrinter(const MCAsmInfo &MAI) : MCInstPrinter(MAI) {}
25
26  virtual void printInst(const MCInst *MI, raw_ostream &O);
27
28  // Autogenerated by tblgen.
29  void printInstruction(const MCInst *MI, raw_ostream &O);
30  static const char *getRegisterName(unsigned RegNo);
31
32
33  void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O,
34                    const char *Modifier = 0);
35
36  void printSOImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
37  void printSOImm2PartOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
38
39  void printSORegOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
40  void printAddrMode2Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
41  void printAddrMode2OffsetOperand(const MCInst *MI, unsigned OpNum,
42                                   raw_ostream &O);
43  void printAddrMode3Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
44  void printAddrMode3OffsetOperand(const MCInst *MI, unsigned OpNum,
45                                   raw_ostream &O);
46  void printAddrMode4Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O,
47                             const char *Modifier = 0);
48  void printAddrMode5Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O,
49                             const char *Modifier = 0);
50  void printAddrMode6Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
51  void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum,
52                                   raw_ostream &O);
53  void printAddrModePCOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O,
54                              const char *Modifier = 0);
55
56  void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum,
57                                      raw_ostream &O);
58  void printMemBOption(const MCInst *MI, unsigned OpNum, raw_ostream &O);
59  void printShiftImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
60
61  void printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
62  void printThumbITMask(const MCInst *MI, unsigned OpNum, raw_ostream &O);
63  void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum,
64                                   raw_ostream &O);
65  void printThumbAddrModeRI5Operand(const MCInst *MI, unsigned OpNum,
66                                    raw_ostream &O, unsigned Scale);
67  void printThumbAddrModeS1Operand(const MCInst *MI, unsigned OpNum,
68                                   raw_ostream &O);
69  void printThumbAddrModeS2Operand(const MCInst *MI, unsigned OpNum,
70                                   raw_ostream &O);
71  void printThumbAddrModeS4Operand(const MCInst *MI, unsigned OpNum,
72                                   raw_ostream &O);
73  void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum,
74                                   raw_ostream &O);
75
76  void printT2SOOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
77  void printT2AddrModeImm12Operand(const MCInst *MI, unsigned OpNum,
78                                   raw_ostream &O);
79  void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum,
80                                  raw_ostream &O);
81  void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum,
82                                    raw_ostream &O);
83  void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum,
84                                        raw_ostream &O);
85  void printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, unsigned OpNum,
86                                          raw_ostream &O);
87  void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum,
88                                   raw_ostream &O);
89
90  void printSetendOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
91  void printCPSOptionOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
92  void printMSRMaskOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
93  void printNegZeroOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
94  void printPredicateOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
95  void printMandatoryPredicateOperand(const MCInst *MI, unsigned OpNum,
96                                      raw_ostream &O);
97  void printSBitModifierOperand(const MCInst *MI, unsigned OpNum,
98                                raw_ostream &O);
99  void printRegisterList(const MCInst *MI, unsigned OpNum, raw_ostream &O);
100  void printCPInstOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O,
101                          const char *Modifier);
102  // The jump table instructions have custom handling in ARMAsmPrinter
103  // to output the jump table. Nothing further is necessary here.
104  void printJTBlockOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) {}
105  void printJT2BlockOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) {}
106  void printTBAddrMode(const MCInst *MI, unsigned OpNum, raw_ostream &O);
107  void printNoHashImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O);
108  void printVFPf32ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
109  void printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
110  void printNEONModImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
111
112  void printPCLabel(const MCInst *MI, unsigned OpNum, raw_ostream &O);
113};
114
115}
116
117#endif
118