blob: d41b5dfa6c5b9a2ae7896734bf73bb0f12db2571 [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.
31 void printInstruction(const MCInst *MI);
32 static const char *getRegisterName(unsigned RegNo);
33
34
35 void printOperand(const MCInst *MI, unsigned OpNo,
Chris Lattner8bc86cb2009-10-19 20:59:55 +000036 const char *Modifier = 0);
Chris Lattnerfd603822009-10-19 19:56:26 +000037
Chris Lattner61d35c22009-10-19 21:21:39 +000038 void printSOImmOperand(const MCInst *MI, unsigned OpNum);
Chris Lattner017d9472009-10-20 00:40:56 +000039 void printSOImm2PartOperand(const MCInst *MI, unsigned OpNum);
Chris Lattner61d35c22009-10-19 21:21:39 +000040
Chris Lattner017d9472009-10-20 00:40:56 +000041 void printSORegOperand(const MCInst *MI, unsigned OpNum);
Chris Lattner084f87d2009-10-19 21:57:05 +000042 void printAddrMode2Operand(const MCInst *MI, unsigned OpNum);
Chris Lattnerbf16faa2009-10-20 06:15:28 +000043 void printAddrMode2OffsetOperand(const MCInst *MI, unsigned OpNum);
44 void printAddrMode3Operand(const MCInst *MI, unsigned OpNum);
45 void printAddrMode3OffsetOperand(const MCInst *MI, unsigned OpNum);
Chris Lattnerfd603822009-10-19 19:56:26 +000046 void printAddrMode4Operand(const MCInst *MI, unsigned OpNum,
Chris Lattnere306d8d2009-10-19 22:09:23 +000047 const char *Modifier = 0);
Chris Lattnerfd603822009-10-19 19:56:26 +000048 void printAddrMode5Operand(const MCInst *MI, unsigned OpNum,
Chris Lattnerbf16faa2009-10-20 06:15:28 +000049 const char *Modifier = 0);
Chris Lattner235e2f62009-10-20 06:22:33 +000050 void printAddrMode6Operand(const MCInst *MI, unsigned OpNum);
Bob Wilson226036e2010-03-20 22:13:40 +000051 void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum);
Chris Lattnerfd603822009-10-19 19:56:26 +000052 void printAddrModePCOperand(const MCInst *MI, unsigned OpNum,
Chris Lattner235e2f62009-10-20 06:22:33 +000053 const char *Modifier = 0);
Johnny Chendd0f3cf2010-03-10 18:59:38 +000054
Chris Lattner1ce75ef2009-10-21 04:10:24 +000055 void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum);
Evan Cheng2ef9c8a2009-11-19 06:57:41 +000056
57 void printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum);
Johnny Chen9e088762010-03-17 17:52:21 +000058 void printThumbITMask(const MCInst *MI, unsigned OpNum);
59 void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum);
Chris Lattnerfd603822009-10-19 19:56:26 +000060 void printThumbAddrModeRI5Operand(const MCInst *MI, unsigned OpNum,
Johnny Chen9e088762010-03-17 17:52:21 +000061 unsigned Scale);
62 void printThumbAddrModeS1Operand(const MCInst *MI, unsigned OpNum);
63 void printThumbAddrModeS2Operand(const MCInst *MI, unsigned OpNum);
64 void printThumbAddrModeS4Operand(const MCInst *MI, unsigned OpNum);
65 void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum);
Chris Lattnerfd603822009-10-19 19:56:26 +000066
Johnny Chen9e088762010-03-17 17:52:21 +000067 void printT2SOOperand(const MCInst *MI, unsigned OpNum);
68 void printT2AddrModeImm12Operand(const MCInst *MI, unsigned OpNum);
69 void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum);
70 void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum);
71 void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum);
72 void printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, unsigned OpNum);
73 void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum);
Chris Lattnerfd603822009-10-19 19:56:26 +000074
Johnny Chen9e088762010-03-17 17:52:21 +000075 void printCPSOptionOperand(const MCInst *MI, unsigned OpNum);
76 void printMSRMaskOperand(const MCInst *MI, unsigned OpNum);
77 void printNegZeroOperand(const MCInst *MI, unsigned OpNum);
Chris Lattner413ae252009-10-20 00:42:49 +000078 void printPredicateOperand(const MCInst *MI, unsigned OpNum);
Johnny Chen9d3acaa2010-03-02 17:57:15 +000079 void printMandatoryPredicateOperand(const MCInst *MI, unsigned OpNum);
Chris Lattner233917c2009-10-20 00:46:11 +000080 void printSBitModifierOperand(const MCInst *MI, unsigned OpNum);
Chris Lattnere306d8d2009-10-19 22:09:23 +000081 void printRegisterList(const MCInst *MI, unsigned OpNum);
Chris Lattnerfd603822009-10-19 19:56:26 +000082 void printCPInstOperand(const MCInst *MI, unsigned OpNum,
Chris Lattnera70e6442009-10-19 22:33:05 +000083 const char *Modifier);
Chris Lattnerfd603822009-10-19 19:56:26 +000084 void printJTBlockOperand(const MCInst *MI, unsigned OpNum) {}
85 void printJT2BlockOperand(const MCInst *MI, unsigned OpNum) {}
Johnny Chen9e088762010-03-17 17:52:21 +000086 void printTBAddrMode(const MCInst *MI, unsigned OpNum);
Chris Lattnerbf16faa2009-10-20 06:15:28 +000087 void printNoHashImmediate(const MCInst *MI, unsigned OpNum);
Johnny Chen9e088762010-03-17 17:52:21 +000088 void printVFPf32ImmOperand(const MCInst *MI, unsigned OpNum);
89 void printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum);
Bob Wilson54c78ef2009-11-06 23:33:28 +000090 void printHex8ImmOperand(const MCInst *MI, int OpNum) {}
91 void printHex16ImmOperand(const MCInst *MI, int OpNum) {}
92 void printHex32ImmOperand(const MCInst *MI, int OpNum) {}
93 void printHex64ImmOperand(const MCInst *MI, int OpNum) {}
Chris Lattner4d152222009-10-19 22:23:04 +000094
95 void printPCLabel(const MCInst *MI, unsigned OpNum);
96 // FIXME: Implement.
Chris Lattnerfd603822009-10-19 19:56:26 +000097 void PrintSpecial(const MCInst *MI, const char *Kind) {}
98};
99
100}
101
102#endif