blob: a8efaf2b19d9dcbe26e4308f06da7f110e5949df [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;
Jim Grosbach196b48b2010-09-17 21:25:10 +000021
Chris Lattnerfd603822009-10-19 19:56:26 +000022class ARMInstPrinter : public MCInstPrinter {
Chris Lattner61d35c22009-10-19 21:21:39 +000023 bool VerboseAsm;
Chris Lattnerfd603822009-10-19 19:56:26 +000024public:
Jim Grosbach74d7e6c2010-09-17 21:33:25 +000025 ARMInstPrinter(const MCAsmInfo &MAI) : MCInstPrinter(MAI) {}
Chris Lattnerfd603822009-10-19 19:56:26 +000026
Chris Lattnerd3740872010-04-04 05:04:31 +000027 virtual void printInst(const MCInst *MI, raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +000028
Chris Lattnerfd603822009-10-19 19:56:26 +000029 // Autogenerated by tblgen.
Chris Lattner35c33bd2010-04-04 04:47:45 +000030 void printInstruction(const MCInst *MI, raw_ostream &O);
Chris Lattnerfd603822009-10-19 19:56:26 +000031 static const char *getRegisterName(unsigned RegNo);
32
33
Chris Lattner35c33bd2010-04-04 04:47:45 +000034 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O,
Chris Lattner8bc86cb2009-10-19 20:59:55 +000035 const char *Modifier = 0);
Jim Grosbach196b48b2010-09-17 21:25:10 +000036
Chris Lattner35c33bd2010-04-04 04:47:45 +000037 void printSOImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
38 void printSOImm2PartOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +000039
Chris Lattner35c33bd2010-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);
47 void printAddrMode4Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O,
Chris Lattnere306d8d2009-10-19 22:09:23 +000048 const char *Modifier = 0);
Chris Lattner35c33bd2010-04-04 04:47:45 +000049 void printAddrMode5Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O,
Chris Lattnerbf16faa2009-10-20 06:15:28 +000050 const char *Modifier = 0);
Chris Lattner35c33bd2010-04-04 04:47:45 +000051 void printAddrMode6Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
52 void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum,
53 raw_ostream &O);
54 void printAddrModePCOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O,
Chris Lattner235e2f62009-10-20 06:22:33 +000055 const char *Modifier = 0);
Johnny Chendd0f3cf2010-03-10 18:59:38 +000056
Chris Lattner35c33bd2010-04-04 04:47:45 +000057 void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum,
58 raw_ostream &O);
Johnny Chen1adc40c2010-08-12 20:46:17 +000059 void printMemBOption(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bob Wilson22f5dc72010-08-16 18:27:34 +000060 void printShiftImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Evan Cheng2ef9c8a2009-11-19 06:57:41 +000061
Chris Lattner35c33bd2010-04-04 04:47:45 +000062 void printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
63 void printThumbITMask(const MCInst *MI, unsigned OpNum, raw_ostream &O);
64 void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum,
65 raw_ostream &O);
Chris Lattnerfd603822009-10-19 19:56:26 +000066 void printThumbAddrModeRI5Operand(const MCInst *MI, unsigned OpNum,
Chris Lattner35c33bd2010-04-04 04:47:45 +000067 raw_ostream &O, unsigned Scale);
68 void printThumbAddrModeS1Operand(const MCInst *MI, unsigned OpNum,
69 raw_ostream &O);
70 void printThumbAddrModeS2Operand(const MCInst *MI, unsigned OpNum,
71 raw_ostream &O);
72 void printThumbAddrModeS4Operand(const MCInst *MI, unsigned OpNum,
73 raw_ostream &O);
74 void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum,
75 raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +000076
Chris Lattner35c33bd2010-04-04 04:47:45 +000077 void printT2SOOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
78 void printT2AddrModeImm12Operand(const MCInst *MI, unsigned OpNum,
79 raw_ostream &O);
80 void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum,
81 raw_ostream &O);
82 void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum,
83 raw_ostream &O);
84 void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum,
85 raw_ostream &O);
86 void printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, unsigned OpNum,
87 raw_ostream &O);
88 void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum,
89 raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +000090
Chris Lattner35c33bd2010-04-04 04:47:45 +000091 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,
Chris Lattnera70e6442009-10-19 22:33:05 +0000101 const char *Modifier);
Jim Grosbach882ef2b2010-09-21 23:28:16 +0000102 // The jump table instructions have custom handling in ARMAsmPrinter
103 // to output the jump table. Nothing further is necessary here.
Chris Lattner35c33bd2010-04-04 04:47:45 +0000104 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);
Bob Wilson1a913ed2010-06-11 21:34:50 +0000110 void printNEONModImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner4d152222009-10-19 22:23:04 +0000111
Jim Grosbach196b48b2010-09-17 21:25:10 +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};
Jim Grosbach196b48b2010-09-17 21:25:10 +0000116
Chris Lattnerfd603822009-10-19 19:56:26 +0000117}
118
119#endif