blob: eac539c2d0b829ed425179c9ecba50a7788ac930 [file] [log] [blame]
Chris Lattnera2907782009-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;
Jim Grosbach4e51d0b2010-09-17 21:25:10 +000021
Chris Lattnera2907782009-10-19 19:56:26 +000022class ARMInstPrinter : public MCInstPrinter {
23public:
Jim Grosbach132a0ce2010-09-17 21:33:25 +000024 ARMInstPrinter(const MCAsmInfo &MAI) : MCInstPrinter(MAI) {}
Chris Lattnera2907782009-10-19 19:56:26 +000025
Chris Lattner70129162010-04-04 05:04:31 +000026 virtual void printInst(const MCInst *MI, raw_ostream &O);
Chris Lattnerf20f7982010-10-28 21:37:33 +000027 virtual StringRef getOpcodeName(unsigned Opcode) const;
28
29 static const char *getInstructionName(unsigned Opcode);
Jim Grosbach4e51d0b2010-09-17 21:25:10 +000030
Chris Lattnera2907782009-10-19 19:56:26 +000031 // Autogenerated by tblgen.
Chris Lattner76c564b2010-04-04 04:47:45 +000032 void printInstruction(const MCInst *MI, raw_ostream &O);
Chris Lattnera2907782009-10-19 19:56:26 +000033 static const char *getRegisterName(unsigned RegNo);
34
35
Jim Grosbache7f7de92010-11-03 01:11:15 +000036 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Jim Grosbach4e51d0b2010-09-17 21:25:10 +000037
Chris Lattner76c564b2010-04-04 04:47:45 +000038 void printSOImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Jim Grosbach4e51d0b2010-09-17 21:25:10 +000039
Chris Lattner76c564b2010-04-04 04:47:45 +000040 void printSORegOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
41 void printAddrMode2Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
42 void printAddrMode2OffsetOperand(const MCInst *MI, unsigned OpNum,
43 raw_ostream &O);
44 void printAddrMode3Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
45 void printAddrMode3OffsetOperand(const MCInst *MI, unsigned OpNum,
46 raw_ostream &O);
Jim Grosbache7f7de92010-11-03 01:11:15 +000047 void printLdStmModeOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
48 void printAddrMode5Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner76c564b2010-04-04 04:47:45 +000049 void printAddrMode6Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
50 void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum,
51 raw_ostream &O);
Johnny Chen9a3e2392010-03-10 18:59:38 +000052
Chris Lattner76c564b2010-04-04 04:47:45 +000053 void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum,
54 raw_ostream &O);
Johnny Chen8e8f1c12010-08-12 20:46:17 +000055 void printMemBOption(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bob Wilson481d7a92010-08-16 18:27:34 +000056 void printShiftImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Evan Chengb1852592009-11-19 06:57:41 +000057
Chris Lattner76c564b2010-04-04 04:47:45 +000058 void printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
59 void printThumbITMask(const MCInst *MI, unsigned OpNum, raw_ostream &O);
60 void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum,
61 raw_ostream &O);
Bill Wendling092a7bd2010-12-14 03:36:38 +000062 void printThumbAddrModeImm5SOperand(const MCInst *MI, unsigned OpNum,
63 raw_ostream &O, unsigned Scale);
64 void printThumbAddrModeImm5S1Operand(const MCInst *MI, unsigned OpNum,
65 raw_ostream &O);
66 void printThumbAddrModeImm5S2Operand(const MCInst *MI, unsigned OpNum,
67 raw_ostream &O);
68 void printThumbAddrModeImm5S4Operand(const MCInst *MI, unsigned OpNum,
69 raw_ostream &O);
Chris Lattner76c564b2010-04-04 04:47:45 +000070 void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum,
71 raw_ostream &O);
Jim Grosbach4e51d0b2010-09-17 21:25:10 +000072
Chris Lattner76c564b2010-04-04 04:47:45 +000073 void printT2SOOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Jim Grosbache6fe1a02010-10-25 20:00:01 +000074 void printAddrModeImm12Operand(const MCInst *MI, unsigned OpNum,
75 raw_ostream &O);
Chris Lattner76c564b2010-04-04 04:47:45 +000076 void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum,
77 raw_ostream &O);
78 void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum,
79 raw_ostream &O);
80 void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum,
81 raw_ostream &O);
82 void printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, unsigned OpNum,
83 raw_ostream &O);
84 void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum,
85 raw_ostream &O);
Jim Grosbach4e51d0b2010-09-17 21:25:10 +000086
Jim Grosbach7e72ec62010-10-13 21:00:04 +000087 void printSetendOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner76c564b2010-04-04 04:47:45 +000088 void printCPSOptionOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
89 void printMSRMaskOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
90 void printNegZeroOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
91 void printPredicateOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
92 void printMandatoryPredicateOperand(const MCInst *MI, unsigned OpNum,
93 raw_ostream &O);
94 void printSBitModifierOperand(const MCInst *MI, unsigned OpNum,
95 raw_ostream &O);
96 void printRegisterList(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner76c564b2010-04-04 04:47:45 +000097 void printNoHashImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O);
98 void printVFPf32ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
99 void printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bob Wilson6eae5202010-06-11 21:34:50 +0000100 void printNEONModImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattneradd57492009-10-19 22:23:04 +0000101
Jim Grosbach4e51d0b2010-09-17 21:25:10 +0000102 void printPCLabel(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattnera2907782009-10-19 19:56:26 +0000103};
Jim Grosbach4e51d0b2010-09-17 21:25:10 +0000104
Chris Lattnera76eab42010-11-14 19:40:38 +0000105} // end namespace llvm
Chris Lattnera2907782009-10-19 19:56:26 +0000106
107#endif