blob: 9e7f8d5933adbdd349e26a23e06cb5ba830312e8 [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);
Chris Lattnerfd603822009-10-19 19:56:26 +000051 void printAddrModePCOperand(const MCInst *MI, unsigned OpNum,
Chris Lattner235e2f62009-10-20 06:22:33 +000052 const char *Modifier = 0);
53
Chris Lattner1ce75ef2009-10-21 04:10:24 +000054 void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum);
Chris Lattnerfd603822009-10-19 19:56:26 +000055
56 void printThumbITMask(const MCInst *MI, unsigned OpNum) {}
57 void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum) {}
58 void printThumbAddrModeRI5Operand(const MCInst *MI, unsigned OpNum,
59 unsigned Scale) {}
60 void printThumbAddrModeS1Operand(const MCInst *MI, unsigned OpNum) {}
61 void printThumbAddrModeS2Operand(const MCInst *MI, unsigned OpNum) {}
62 void printThumbAddrModeS4Operand(const MCInst *MI, unsigned OpNum) {}
63 void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum) {}
64
65 void printT2SOOperand(const MCInst *MI, unsigned OpNum) {}
66 void printT2AddrModeImm12Operand(const MCInst *MI, unsigned OpNum) {}
67 void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum) {}
68 void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum) {}
69 void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum) {}
70 void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum) {}
71
Chris Lattner413ae252009-10-20 00:42:49 +000072 void printPredicateOperand(const MCInst *MI, unsigned OpNum);
Chris Lattner233917c2009-10-20 00:46:11 +000073 void printSBitModifierOperand(const MCInst *MI, unsigned OpNum);
Chris Lattnere306d8d2009-10-19 22:09:23 +000074 void printRegisterList(const MCInst *MI, unsigned OpNum);
Chris Lattnerfd603822009-10-19 19:56:26 +000075 void printCPInstOperand(const MCInst *MI, unsigned OpNum,
Chris Lattnera70e6442009-10-19 22:33:05 +000076 const char *Modifier);
Chris Lattnerfd603822009-10-19 19:56:26 +000077 void printJTBlockOperand(const MCInst *MI, unsigned OpNum) {}
78 void printJT2BlockOperand(const MCInst *MI, unsigned OpNum) {}
79 void printTBAddrMode(const MCInst *MI, unsigned OpNum) {}
Chris Lattnerbf16faa2009-10-20 06:15:28 +000080 void printNoHashImmediate(const MCInst *MI, unsigned OpNum);
Evan Cheng39382422009-10-28 01:44:26 +000081 void printVFPf32ImmOperand(const MCInst *MI, int OpNum) {}
82 void printVFPf64ImmOperand(const MCInst *MI, int OpNum) {}
Bob Wilson54c78ef2009-11-06 23:33:28 +000083 void printHex8ImmOperand(const MCInst *MI, int OpNum) {}
84 void printHex16ImmOperand(const MCInst *MI, int OpNum) {}
85 void printHex32ImmOperand(const MCInst *MI, int OpNum) {}
86 void printHex64ImmOperand(const MCInst *MI, int OpNum) {}
Chris Lattner4d152222009-10-19 22:23:04 +000087
88 void printPCLabel(const MCInst *MI, unsigned OpNum);
89 // FIXME: Implement.
Chris Lattnerfd603822009-10-19 19:56:26 +000090 void PrintSpecial(const MCInst *MI, const char *Kind) {}
91};
92
93}
94
95#endif