ARMInstPrinter.h revision 4a5ffb399f841783c201c599b88d576757f1922e
1//===-- 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 21class MCOperand; 22 23class ARMInstPrinter : public MCInstPrinter { 24public: 25 ARMInstPrinter(const MCAsmInfo &MAI) 26 : MCInstPrinter(MAI) {} 27 28 virtual void printInst(const MCInst *MI, raw_ostream &O); 29 virtual StringRef getOpcodeName(unsigned Opcode) const; 30 virtual void printRegName(raw_ostream &OS, unsigned RegNo) const; 31 32 static const char *getInstructionName(unsigned Opcode); 33 34 // Autogenerated by tblgen. 35 void printInstruction(const MCInst *MI, raw_ostream &O); 36 static const char *getRegisterName(unsigned RegNo); 37 38 39 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 40 41 void printSORegRegOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 42 void printSORegImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 43 44 void printAddrMode2Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 45 void printAM2PostIndexOp(const MCInst *MI, unsigned OpNum, raw_ostream &O); 46 void printAM2PreOrOffsetIndexOp(const MCInst *MI, unsigned OpNum, 47 raw_ostream &O); 48 void printAddrMode2OffsetOperand(const MCInst *MI, unsigned OpNum, 49 raw_ostream &O); 50 51 void printAddrMode3Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 52 void printAM3PostIndexOp(const MCInst *MI, unsigned OpNum, raw_ostream &O); 53 void printAM3PreOrOffsetIndexOp(const MCInst *MI, unsigned OpNum, 54 raw_ostream &O); 55 void printAddrMode3OffsetOperand(const MCInst *MI, unsigned OpNum, 56 raw_ostream &O); 57 58 void printLdStmModeOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 59 void printAddrMode5Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 60 void printAddrMode6Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 61 void printAddrMode7Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 62 void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum, 63 raw_ostream &O); 64 65 void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum, 66 raw_ostream &O); 67 void printMemBOption(const MCInst *MI, unsigned OpNum, raw_ostream &O); 68 void printShiftImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 69 void printPKHLSLShiftImm(const MCInst *MI, unsigned OpNum, raw_ostream &O); 70 void printPKHASRShiftImm(const MCInst *MI, unsigned OpNum, raw_ostream &O); 71 72 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); 76 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); 84 void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum, 85 raw_ostream &O); 86 87 void printT2SOOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 88 void printAddrModeImm12Operand(const MCInst *MI, unsigned OpNum, 89 raw_ostream &O); 90 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); 100 101 void printSetendOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 102 void printCPSIMod(const MCInst *MI, unsigned OpNum, raw_ostream &O); 103 void printCPSIFlag(const MCInst *MI, unsigned OpNum, raw_ostream &O); 104 void printMSRMaskOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 105 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); 111 void printNoHashImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O); 112 void printPImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O); 113 void printCImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O); 114 void printVFPf32ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 115 void printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 116 void printNEONModImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 117 void printImm1_32Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O); 118 119 void printPCLabel(const MCInst *MI, unsigned OpNum, raw_ostream &O); 120}; 121 122} // end namespace llvm 123 124#endif 125