blob: bde0eb9199a9c817cd2576c2ae7263ec67df5d6f [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 {
Bill Wendlinga5c177e2011-03-21 04:13:46 +000020
21class MCOperand;
22class TargetMachine;
Jim Grosbach196b48b2010-09-17 21:25:10 +000023
Chris Lattnerfd603822009-10-19 19:56:26 +000024class ARMInstPrinter : public MCInstPrinter {
25public:
Matt Beaumont-Gaye4345c92011-03-31 00:39:16 +000026 ARMInstPrinter(TargetMachine &TM, const MCAsmInfo &MAI)
27 : MCInstPrinter(MAI) {}
Chris Lattnerfd603822009-10-19 19:56:26 +000028
Chris Lattnerd3740872010-04-04 05:04:31 +000029 virtual void printInst(const MCInst *MI, raw_ostream &O);
Chris Lattner6274ec42010-10-28 21:37:33 +000030 virtual StringRef getOpcodeName(unsigned Opcode) const;
Rafael Espindolacde4ce42011-06-02 02:34:55 +000031 virtual void printRegName(raw_ostream &OS, unsigned RegNo) const;
Chris Lattner6274ec42010-10-28 21:37:33 +000032
33 static const char *getInstructionName(unsigned Opcode);
Jim Grosbach196b48b2010-09-17 21:25:10 +000034
Chris Lattnerfd603822009-10-19 19:56:26 +000035 // Autogenerated by tblgen.
Chris Lattner35c33bd2010-04-04 04:47:45 +000036 void printInstruction(const MCInst *MI, raw_ostream &O);
Chris Lattnerfd603822009-10-19 19:56:26 +000037 static const char *getRegisterName(unsigned RegNo);
38
39
Jim Grosbach0a2287b2010-11-03 01:11:15 +000040 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +000041
Chris Lattner35c33bd2010-04-04 04:47:45 +000042 void printSOImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +000043
Chris Lattner35c33bd2010-04-04 04:47:45 +000044 void printSORegOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bruno Cardoso Lopesae085542011-03-31 23:26:08 +000045
Chris Lattner35c33bd2010-04-04 04:47:45 +000046 void printAddrMode2Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bruno Cardoso Lopesae085542011-03-31 23:26:08 +000047 void printAM2PostIndexOp(const MCInst *MI, unsigned OpNum, raw_ostream &O);
48 void printAM2PreOrOffsetIndexOp(const MCInst *MI, unsigned OpNum,
49 raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +000050 void printAddrMode2OffsetOperand(const MCInst *MI, unsigned OpNum,
51 raw_ostream &O);
Bruno Cardoso Lopesac79e4c2011-04-04 17:18:19 +000052
Chris Lattner35c33bd2010-04-04 04:47:45 +000053 void printAddrMode3Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bruno Cardoso Lopesac79e4c2011-04-04 17:18:19 +000054 void printAM3PostIndexOp(const MCInst *MI, unsigned OpNum, raw_ostream &O);
55 void printAM3PreOrOffsetIndexOp(const MCInst *MI, unsigned OpNum,
56 raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +000057 void printAddrMode3OffsetOperand(const MCInst *MI, unsigned OpNum,
58 raw_ostream &O);
Bruno Cardoso Lopesac79e4c2011-04-04 17:18:19 +000059
Jim Grosbach0a2287b2010-11-03 01:11:15 +000060 void printLdStmModeOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
61 void printAddrMode5Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +000062 void printAddrMode6Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bruno Cardoso Lopes505f3cd2011-03-24 21:04:58 +000063 void printAddrMode7Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +000064 void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum,
65 raw_ostream &O);
Johnny Chendd0f3cf2010-03-10 18:59:38 +000066
Chris Lattner35c33bd2010-04-04 04:47:45 +000067 void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum,
68 raw_ostream &O);
Johnny Chen1adc40c2010-08-12 20:46:17 +000069 void printMemBOption(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bob Wilson22f5dc72010-08-16 18:27:34 +000070 void printShiftImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Evan Cheng2ef9c8a2009-11-19 06:57:41 +000071
Chris Lattner35c33bd2010-04-04 04:47:45 +000072 void printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
73 void printThumbITMask(const MCInst *MI, unsigned OpNum, raw_ostream &O);
74 void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum,
75 raw_ostream &O);
Bill Wendlingf4caf692010-12-14 03:36:38 +000076 void printThumbAddrModeImm5SOperand(const MCInst *MI, unsigned OpNum,
77 raw_ostream &O, unsigned Scale);
78 void printThumbAddrModeImm5S1Operand(const MCInst *MI, unsigned OpNum,
79 raw_ostream &O);
80 void printThumbAddrModeImm5S2Operand(const MCInst *MI, unsigned OpNum,
81 raw_ostream &O);
82 void printThumbAddrModeImm5S4Operand(const MCInst *MI, unsigned OpNum,
83 raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +000084 void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum,
85 raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +000086
Chris Lattner35c33bd2010-04-04 04:47:45 +000087 void printT2SOOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Jim Grosbach458f2dc2010-10-25 20:00:01 +000088 void printAddrModeImm12Operand(const MCInst *MI, unsigned OpNum,
89 raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +000090 void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum,
91 raw_ostream &O);
92 void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum,
93 raw_ostream &O);
94 void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum,
95 raw_ostream &O);
96 void printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, unsigned OpNum,
97 raw_ostream &O);
98 void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum,
99 raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +0000100
Jim Grosbachb3af5de2010-10-13 21:00:04 +0000101 void printSetendOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bruno Cardoso Lopesa2b6e412011-02-14 13:09:44 +0000102 void printCPSIMod(const MCInst *MI, unsigned OpNum, raw_ostream &O);
103 void printCPSIFlag(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +0000104 void printMSRMaskOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +0000105 void printPredicateOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
106 void printMandatoryPredicateOperand(const MCInst *MI, unsigned OpNum,
107 raw_ostream &O);
108 void printSBitModifierOperand(const MCInst *MI, unsigned OpNum,
109 raw_ostream &O);
110 void printRegisterList(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +0000111 void printNoHashImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Owen Andersone4e5e2a2011-01-13 21:46:02 +0000112 void printPImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O);
113 void printCImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +0000114 void printVFPf32ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
115 void printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bob Wilson1a913ed2010-06-11 21:34:50 +0000116 void printNEONModImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner4d152222009-10-19 22:23:04 +0000117
Jim Grosbach196b48b2010-09-17 21:25:10 +0000118 void printPCLabel(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattnerfd603822009-10-19 19:56:26 +0000119};
Jim Grosbach196b48b2010-09-17 21:25:10 +0000120
Chris Lattner60d5b5f2010-11-14 19:40:38 +0000121} // end namespace llvm
Chris Lattnerfd603822009-10-19 19:56:26 +0000122
123#endif