blob: 23a7f05dbd78b45b4a2e89a8d4bff90eb2e8073a [file] [log] [blame]
Chris Lattner8d014092009-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 Lattnercc309682009-10-19 21:21:39 +000023 bool VerboseAsm;
Chris Lattner8d014092009-10-19 19:56:26 +000024public:
Chris Lattnercc309682009-10-19 21:21:39 +000025 ARMInstPrinter(raw_ostream &O, const MCAsmInfo &MAI, bool verboseAsm)
26 : MCInstPrinter(O, MAI), VerboseAsm(verboseAsm) {}
Chris Lattner8d014092009-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 Lattner799e7c12009-10-19 20:59:55 +000036 const char *Modifier = 0);
Chris Lattner8d014092009-10-19 19:56:26 +000037
Chris Lattnercc309682009-10-19 21:21:39 +000038 void printSOImmOperand(const MCInst *MI, unsigned OpNum);
Chris Lattnere4eb7342009-10-20 00:40:56 +000039 void printSOImm2PartOperand(const MCInst *MI, unsigned OpNum);
Chris Lattnercc309682009-10-19 21:21:39 +000040
Chris Lattnere4eb7342009-10-20 00:40:56 +000041 void printSORegOperand(const MCInst *MI, unsigned OpNum);
Chris Lattnerf1977ef2009-10-19 21:57:05 +000042 void printAddrMode2Operand(const MCInst *MI, unsigned OpNum);
Chris Lattner9ec22032009-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 Lattner8d014092009-10-19 19:56:26 +000046 void printAddrMode4Operand(const MCInst *MI, unsigned OpNum,
Chris Lattnerc8bdad02009-10-19 22:09:23 +000047 const char *Modifier = 0);
Chris Lattner8d014092009-10-19 19:56:26 +000048 void printAddrMode5Operand(const MCInst *MI, unsigned OpNum,
Chris Lattner9ec22032009-10-20 06:15:28 +000049 const char *Modifier = 0);
Chris Lattner6d01a092009-10-20 06:22:33 +000050 void printAddrMode6Operand(const MCInst *MI, unsigned OpNum);
Chris Lattner8d014092009-10-19 19:56:26 +000051 void printAddrModePCOperand(const MCInst *MI, unsigned OpNum,
Chris Lattner6d01a092009-10-20 06:22:33 +000052 const char *Modifier = 0);
53
Chris Lattner34fdb772009-10-21 04:10:24 +000054 void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum);
Evan Cheng91fd9e42009-11-19 06:57:41 +000055
56 void printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum);
Chris Lattner8d014092009-10-19 19:56:26 +000057 void printThumbITMask(const MCInst *MI, unsigned OpNum) {}
58 void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum) {}
59 void printThumbAddrModeRI5Operand(const MCInst *MI, unsigned OpNum,
60 unsigned Scale) {}
61 void printThumbAddrModeS1Operand(const MCInst *MI, unsigned OpNum) {}
62 void printThumbAddrModeS2Operand(const MCInst *MI, unsigned OpNum) {}
63 void printThumbAddrModeS4Operand(const MCInst *MI, unsigned OpNum) {}
64 void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum) {}
65
66 void printT2SOOperand(const MCInst *MI, unsigned OpNum) {}
67 void printT2AddrModeImm12Operand(const MCInst *MI, unsigned OpNum) {}
68 void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum) {}
69 void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum) {}
70 void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum) {}
71 void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum) {}
72
Chris Lattner31c1d7b2009-10-20 00:42:49 +000073 void printPredicateOperand(const MCInst *MI, unsigned OpNum);
Chris Lattner37cd7db2009-10-20 00:46:11 +000074 void printSBitModifierOperand(const MCInst *MI, unsigned OpNum);
Chris Lattnerc8bdad02009-10-19 22:09:23 +000075 void printRegisterList(const MCInst *MI, unsigned OpNum);
Chris Lattner8d014092009-10-19 19:56:26 +000076 void printCPInstOperand(const MCInst *MI, unsigned OpNum,
Chris Lattner4c565d82009-10-19 22:33:05 +000077 const char *Modifier);
Chris Lattner8d014092009-10-19 19:56:26 +000078 void printJTBlockOperand(const MCInst *MI, unsigned OpNum) {}
79 void printJT2BlockOperand(const MCInst *MI, unsigned OpNum) {}
80 void printTBAddrMode(const MCInst *MI, unsigned OpNum) {}
Chris Lattner9ec22032009-10-20 06:15:28 +000081 void printNoHashImmediate(const MCInst *MI, unsigned OpNum);
Evan Cheng7c7a3ff2009-10-28 01:44:26 +000082 void printVFPf32ImmOperand(const MCInst *MI, int OpNum) {}
83 void printVFPf64ImmOperand(const MCInst *MI, int OpNum) {}
Bob Wilson6a14a002009-11-06 23:33:28 +000084 void printHex8ImmOperand(const MCInst *MI, int OpNum) {}
85 void printHex16ImmOperand(const MCInst *MI, int OpNum) {}
86 void printHex32ImmOperand(const MCInst *MI, int OpNum) {}
87 void printHex64ImmOperand(const MCInst *MI, int OpNum) {}
Chris Lattner817d5512009-10-19 22:23:04 +000088
89 void printPCLabel(const MCInst *MI, unsigned OpNum);
90 // FIXME: Implement.
Chris Lattner8d014092009-10-19 19:56:26 +000091 void PrintSpecial(const MCInst *MI, const char *Kind) {}
92};
93
94}
95
96#endif