blob: f4382b0e515ef17ad78db2fb27cc67d258dace17 [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 {
23public:
Jim Grosbach74d7e6c2010-09-17 21:33:25 +000024 ARMInstPrinter(const MCAsmInfo &MAI) : MCInstPrinter(MAI) {}
Chris Lattnerfd603822009-10-19 19:56:26 +000025
Chris Lattnerd3740872010-04-04 05:04:31 +000026 virtual void printInst(const MCInst *MI, raw_ostream &O);
Chris Lattner6274ec42010-10-28 21:37:33 +000027 virtual StringRef getOpcodeName(unsigned Opcode) const;
28
29 static const char *getInstructionName(unsigned Opcode);
Jim Grosbach196b48b2010-09-17 21:25:10 +000030
Chris Lattnerfd603822009-10-19 19:56:26 +000031 // Autogenerated by tblgen.
Chris Lattner35c33bd2010-04-04 04:47:45 +000032 void printInstruction(const MCInst *MI, raw_ostream &O);
Chris Lattnerfd603822009-10-19 19:56:26 +000033 static const char *getRegisterName(unsigned RegNo);
34
35
Jim Grosbach0a2287b2010-11-03 01:11:15 +000036 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +000037
Chris Lattner35c33bd2010-04-04 04:47:45 +000038 void printSOImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
39 void printSOImm2PartOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +000040
Chris Lattner35c33bd2010-04-04 04:47:45 +000041 void printSORegOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
42 void printAddrMode2Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
43 void printAddrMode2OffsetOperand(const MCInst *MI, unsigned OpNum,
44 raw_ostream &O);
45 void printAddrMode3Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
46 void printAddrMode3OffsetOperand(const MCInst *MI, unsigned OpNum,
47 raw_ostream &O);
Jim Grosbach0a2287b2010-11-03 01:11:15 +000048 void printLdStmModeOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
49 void printAddrMode5Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +000050 void printAddrMode6Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
51 void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum,
52 raw_ostream &O);
Johnny Chendd0f3cf2010-03-10 18:59:38 +000053
Chris Lattner35c33bd2010-04-04 04:47:45 +000054 void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum,
55 raw_ostream &O);
Johnny Chen1adc40c2010-08-12 20:46:17 +000056 void printMemBOption(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bob Wilson22f5dc72010-08-16 18:27:34 +000057 void printShiftImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Evan Cheng2ef9c8a2009-11-19 06:57:41 +000058
Chris Lattner35c33bd2010-04-04 04:47:45 +000059 void printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
60 void printThumbITMask(const MCInst *MI, unsigned OpNum, raw_ostream &O);
61 void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum,
62 raw_ostream &O);
Chris Lattnerfd603822009-10-19 19:56:26 +000063 void printThumbAddrModeRI5Operand(const MCInst *MI, unsigned OpNum,
Chris Lattner35c33bd2010-04-04 04:47:45 +000064 raw_ostream &O, unsigned Scale);
65 void printThumbAddrModeS1Operand(const MCInst *MI, unsigned OpNum,
66 raw_ostream &O);
67 void printThumbAddrModeS2Operand(const MCInst *MI, unsigned OpNum,
68 raw_ostream &O);
69 void printThumbAddrModeS4Operand(const MCInst *MI, unsigned OpNum,
70 raw_ostream &O);
71 void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum,
72 raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +000073
Chris Lattner35c33bd2010-04-04 04:47:45 +000074 void printT2SOOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Jim Grosbach458f2dc2010-10-25 20:00:01 +000075 void printAddrModeImm12Operand(const MCInst *MI, unsigned OpNum,
76 raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +000077 void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum,
78 raw_ostream &O);
79 void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum,
80 raw_ostream &O);
81 void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum,
82 raw_ostream &O);
83 void printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, unsigned OpNum,
84 raw_ostream &O);
85 void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum,
86 raw_ostream &O);
Jim Grosbach196b48b2010-09-17 21:25:10 +000087
Jim Grosbachb3af5de2010-10-13 21:00:04 +000088 void printSetendOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +000089 void printCPSOptionOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
90 void printMSRMaskOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
91 void printNegZeroOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
92 void printPredicateOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
93 void printMandatoryPredicateOperand(const MCInst *MI, unsigned OpNum,
94 raw_ostream &O);
95 void printSBitModifierOperand(const MCInst *MI, unsigned OpNum,
96 raw_ostream &O);
97 void printRegisterList(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Jim Grosbach882ef2b2010-09-21 23:28:16 +000098 // The jump table instructions have custom handling in ARMAsmPrinter
99 // to output the jump table. Nothing further is necessary here.
Chris Lattner35c33bd2010-04-04 04:47:45 +0000100 void printJTBlockOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) {}
101 void printJT2BlockOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) {}
102 void printTBAddrMode(const MCInst *MI, unsigned OpNum, raw_ostream &O);
103 void printNoHashImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O);
104 void printVFPf32ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
105 void printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Bob Wilson1a913ed2010-06-11 21:34:50 +0000106 void printNEONModImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattner4d152222009-10-19 22:23:04 +0000107
Jim Grosbach196b48b2010-09-17 21:25:10 +0000108 void printPCLabel(const MCInst *MI, unsigned OpNum, raw_ostream &O);
Chris Lattnerfd603822009-10-19 19:56:26 +0000109};
Jim Grosbach196b48b2010-09-17 21:25:10 +0000110
Chris Lattnerfd603822009-10-19 19:56:26 +0000111}
112
113#endif