blob: c2b32c1352e2f45122dcfce2b17433f16429bc4c [file] [log] [blame]
Chris Lattnerfd603822009-10-19 19:56:26 +00001//===-- 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 {
Chris Lattner61d35c22009-10-19 21:21:39 +000023 bool VerboseAsm;
Chris Lattnerfd603822009-10-19 19:56:26 +000024public:
Chris Lattner61d35c22009-10-19 21:21:39 +000025 ARMInstPrinter(raw_ostream &O, const MCAsmInfo &MAI, bool verboseAsm)
26 : MCInstPrinter(O, MAI), VerboseAsm(verboseAsm) {}
Chris Lattnerfd603822009-10-19 19:56:26 +000027
28 virtual void printInst(const MCInst *MI);
29
30 // Autogenerated by tblgen.
Chris Lattner35c33bd2010-04-04 04:47:45 +000031 void printInstruction(const MCInst *MI, raw_ostream &O);
Chris Lattnerfd603822009-10-19 19:56:26 +000032 static const char *getRegisterName(unsigned RegNo);
33
34
Chris Lattner35c33bd2010-04-04 04:47:45 +000035 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O,
Chris Lattner8bc86cb2009-10-19 20:59:55 +000036 const char *Modifier = 0);
Chris Lattnerfd603822009-10-19 19:56:26 +000037
Chris Lattner35c33bd2010-04-04 04:47:45 +000038 void printSOImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
39 void printSOImm2PartOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner61d35c22009-10-19 21:21:39 +000040
Chris Lattner35c33bd2010-04-04 04:47:45 +000041 void printSORegOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
42 void printAddrMode2Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
43 void printAddrMode2OffsetOperand(const MCInst *MI, unsigned OpNum,
44 raw_ostream &O);
45 void printAddrMode3Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
46 void printAddrMode3OffsetOperand(const MCInst *MI, unsigned OpNum,
47 raw_ostream &O);
48 void printAddrMode4Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O,
Chris Lattnere306d8d2009-10-19 22:09:23 +000049 const char *Modifier = 0);
Chris Lattner35c33bd2010-04-04 04:47:45 +000050 void printAddrMode5Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O,
Chris Lattnerbf16faa2009-10-20 06:15:28 +000051 const char *Modifier = 0);
Chris Lattner35c33bd2010-04-04 04:47:45 +000052 void printAddrMode6Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
53 void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum,
54 raw_ostream &O);
55 void printAddrModePCOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O,
Chris Lattner235e2f62009-10-20 06:22:33 +000056 const char *Modifier = 0);
Johnny Chendd0f3cf2010-03-10 18:59:38 +000057
Chris Lattner35c33bd2010-04-04 04:47:45 +000058 void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum,
59 raw_ostream &O);
Evan Cheng2ef9c8a2009-11-19 06:57:41 +000060
Chris Lattner35c33bd2010-04-04 04:47:45 +000061 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);
Chris Lattnerfd603822009-10-19 19:56:26 +000065 void printThumbAddrModeRI5Operand(const MCInst *MI, unsigned OpNum,
Chris Lattner35c33bd2010-04-04 04:47:45 +000066 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);
Chris Lattnerfd603822009-10-19 19:56:26 +000075
Chris Lattner35c33bd2010-04-04 04:47:45 +000076 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);
Chris Lattnerfd603822009-10-19 19:56:26 +000089
Chris Lattner35c33bd2010-04-04 04:47:45 +000090 void printCPSOptionOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
91 void printMSRMaskOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
92 void printNegZeroOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
93 void printPredicateOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
94 void printMandatoryPredicateOperand(const MCInst *MI, unsigned OpNum,
95 raw_ostream &O);
96 void printSBitModifierOperand(const MCInst *MI, unsigned OpNum,
97 raw_ostream &O);
98 void printRegisterList(const MCInst *MI, unsigned OpNum, raw_ostream &O);
99 void printCPInstOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O,
Chris Lattnera70e6442009-10-19 22:33:05 +0000100 const char *Modifier);
Chris Lattner35c33bd2010-04-04 04:47:45 +0000101 void printJTBlockOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) {}
102 void printJT2BlockOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) {}
103 void printTBAddrMode(const MCInst *MI, unsigned OpNum, raw_ostream &O);
104 void printNoHashImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O);
105 void printVFPf32ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
106 void printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
107 void printHex8ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O) {}
108 void printHex16ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O) {}
109 void printHex32ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O) {}
110 void printHex64ImmOperand(const MCInst *MI, int OpNum, raw_ostream &O) {}
Chris Lattner4d152222009-10-19 22:23:04 +0000111
Chris Lattner35c33bd2010-04-04 04:47:45 +0000112 void printPCLabel(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner4d152222009-10-19 22:23:04 +0000113 // FIXME: Implement.
Chris Lattner35c33bd2010-04-04 04:47:45 +0000114 void PrintSpecial(const MCInst *MI, raw_ostream &O, const char *Kind) {}
Chris Lattnerfd603822009-10-19 19:56:26 +0000115};
116
117}
118
119#endif