Home | History | Annotate | Download | only in InstPrinter
      1 //===- ARMInstPrinter.h - Convert ARM MCInst to assembly syntax -*- C++ -*-===//
      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 LLVM_LIB_TARGET_ARM_INSTPRINTER_ARMINSTPRINTER_H
     15 #define LLVM_LIB_TARGET_ARM_INSTPRINTER_ARMINSTPRINTER_H
     16 
     17 #include "llvm/MC/MCInstPrinter.h"
     18 
     19 namespace llvm {
     20 
     21 class ARMInstPrinter : public MCInstPrinter {
     22 public:
     23   ARMInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
     24                  const MCRegisterInfo &MRI);
     25 
     26   void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot,
     27                  const MCSubtargetInfo &STI) override;
     28   void printRegName(raw_ostream &OS, unsigned RegNo) const override;
     29 
     30   // Autogenerated by tblgen.
     31   void printInstruction(const MCInst *MI, const MCSubtargetInfo &STI,
     32                         raw_ostream &O);
     33   virtual bool printAliasInstr(const MCInst *MI, const MCSubtargetInfo &STI,
     34                                raw_ostream &O);
     35   virtual void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx,
     36                                        unsigned PrintMethodIdx,
     37                                        const MCSubtargetInfo &STI,
     38                                        raw_ostream &O);
     39   static const char *getRegisterName(unsigned RegNo);
     40 
     41   void printOperand(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
     42                     raw_ostream &O);
     43 
     44   void printSORegRegOperand(const MCInst *MI, unsigned OpNum,
     45                             const MCSubtargetInfo &STI, raw_ostream &O);
     46   void printSORegImmOperand(const MCInst *MI, unsigned OpNum,
     47                             const MCSubtargetInfo &STI, raw_ostream &O);
     48 
     49   void printAddrModeTBB(const MCInst *MI, unsigned OpNum,
     50                         const MCSubtargetInfo &STI, raw_ostream &O);
     51   void printAddrModeTBH(const MCInst *MI, unsigned OpNum,
     52                         const MCSubtargetInfo &STI, raw_ostream &O);
     53   void printAddrMode2Operand(const MCInst *MI, unsigned OpNum,
     54                              const MCSubtargetInfo &STI, raw_ostream &O);
     55   void printAM2PostIndexOp(const MCInst *MI, unsigned OpNum,
     56                            const MCSubtargetInfo &STI, raw_ostream &O);
     57   void printAM2PreOrOffsetIndexOp(const MCInst *MI, unsigned OpNum,
     58                                   const MCSubtargetInfo &STI, raw_ostream &O);
     59   void printAddrMode2OffsetOperand(const MCInst *MI, unsigned OpNum,
     60                                    const MCSubtargetInfo &STI, raw_ostream &O);
     61   template <bool AlwaysPrintImm0>
     62   void printAddrMode3Operand(const MCInst *MI, unsigned OpNum,
     63                              const MCSubtargetInfo &STI, raw_ostream &O);
     64   void printAddrMode3OffsetOperand(const MCInst *MI, unsigned OpNum,
     65                                    const MCSubtargetInfo &STI, raw_ostream &O);
     66   void printAM3PreOrOffsetIndexOp(const MCInst *MI, unsigned Op, raw_ostream &O,
     67                                   bool AlwaysPrintImm0);
     68   void printPostIdxImm8Operand(const MCInst *MI, unsigned OpNum,
     69                                const MCSubtargetInfo &STI, raw_ostream &O);
     70   void printPostIdxRegOperand(const MCInst *MI, unsigned OpNum,
     71                               const MCSubtargetInfo &STI, raw_ostream &O);
     72   void printPostIdxImm8s4Operand(const MCInst *MI, unsigned OpNum,
     73                                  const MCSubtargetInfo &STI, raw_ostream &O);
     74 
     75   void printLdStmModeOperand(const MCInst *MI, unsigned OpNum,
     76                              const MCSubtargetInfo &STI, raw_ostream &O);
     77   template <bool AlwaysPrintImm0>
     78   void printAddrMode5Operand(const MCInst *MI, unsigned OpNum,
     79                              const MCSubtargetInfo &STI, raw_ostream &O);
     80   template <bool AlwaysPrintImm0>
     81   void printAddrMode5FP16Operand(const MCInst *MI, unsigned OpNum,
     82                                  const MCSubtargetInfo &STI, raw_ostream &O);
     83   void printAddrMode6Operand(const MCInst *MI, unsigned OpNum,
     84                              const MCSubtargetInfo &STI, raw_ostream &O);
     85   void printAddrMode7Operand(const MCInst *MI, unsigned OpNum,
     86                              const MCSubtargetInfo &STI, raw_ostream &O);
     87   void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum,
     88                                    const MCSubtargetInfo &STI, raw_ostream &O);
     89 
     90   void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum,
     91                                       const MCSubtargetInfo &STI,
     92                                       raw_ostream &O);
     93   void printMemBOption(const MCInst *MI, unsigned OpNum,
     94                        const MCSubtargetInfo &STI, raw_ostream &O);
     95   void printInstSyncBOption(const MCInst *MI, unsigned OpNum,
     96                             const MCSubtargetInfo &STI, raw_ostream &O);
     97   void printShiftImmOperand(const MCInst *MI, unsigned OpNum,
     98                             const MCSubtargetInfo &STI, raw_ostream &O);
     99   void printPKHLSLShiftImm(const MCInst *MI, unsigned OpNum,
    100                            const MCSubtargetInfo &STI, raw_ostream &O);
    101   void printPKHASRShiftImm(const MCInst *MI, unsigned OpNum,
    102                            const MCSubtargetInfo &STI, raw_ostream &O);
    103 
    104   template <unsigned scale>
    105   void printAdrLabelOperand(const MCInst *MI, unsigned OpNum,
    106                             const MCSubtargetInfo &STI, raw_ostream &O);
    107   void printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum,
    108                               const MCSubtargetInfo &STI, raw_ostream &O);
    109   void printThumbSRImm(const MCInst *MI, unsigned OpNum,
    110                        const MCSubtargetInfo &STI, raw_ostream &O);
    111   void printThumbITMask(const MCInst *MI, unsigned OpNum,
    112                         const MCSubtargetInfo &STI, raw_ostream &O);
    113   void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum,
    114                                    const MCSubtargetInfo &STI, raw_ostream &O);
    115   void printThumbAddrModeImm5SOperand(const MCInst *MI, unsigned OpNum,
    116                                       const MCSubtargetInfo &STI,
    117                                       raw_ostream &O, unsigned Scale);
    118   void printThumbAddrModeImm5S1Operand(const MCInst *MI, unsigned OpNum,
    119                                        const MCSubtargetInfo &STI,
    120                                        raw_ostream &O);
    121   void printThumbAddrModeImm5S2Operand(const MCInst *MI, unsigned OpNum,
    122                                        const MCSubtargetInfo &STI,
    123                                        raw_ostream &O);
    124   void printThumbAddrModeImm5S4Operand(const MCInst *MI, unsigned OpNum,
    125                                        const MCSubtargetInfo &STI,
    126                                        raw_ostream &O);
    127   void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum,
    128                                    const MCSubtargetInfo &STI, raw_ostream &O);
    129 
    130   void printT2SOOperand(const MCInst *MI, unsigned OpNum,
    131                         const MCSubtargetInfo &STI, raw_ostream &O);
    132   template <bool AlwaysPrintImm0>
    133   void printAddrModeImm12Operand(const MCInst *MI, unsigned OpNum,
    134                                  const MCSubtargetInfo &STI, raw_ostream &O);
    135   template <bool AlwaysPrintImm0>
    136   void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum,
    137                                   const MCSubtargetInfo &STI, raw_ostream &O);
    138   template <bool AlwaysPrintImm0>
    139   void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum,
    140                                     const MCSubtargetInfo &STI, raw_ostream &O);
    141   void printT2AddrModeImm0_1020s4Operand(const MCInst *MI, unsigned OpNum,
    142                                          const MCSubtargetInfo &STI,
    143                                          raw_ostream &O);
    144   void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum,
    145                                         const MCSubtargetInfo &STI,
    146                                         raw_ostream &O);
    147   void printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, unsigned OpNum,
    148                                           const MCSubtargetInfo &STI,
    149                                           raw_ostream &O);
    150   void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum,
    151                                    const MCSubtargetInfo &STI, raw_ostream &O);
    152 
    153   void printSetendOperand(const MCInst *MI, unsigned OpNum,
    154                           const MCSubtargetInfo &STI, raw_ostream &O);
    155   void printCPSIMod(const MCInst *MI, unsigned OpNum,
    156                     const MCSubtargetInfo &STI, raw_ostream &O);
    157   void printCPSIFlag(const MCInst *MI, unsigned OpNum,
    158                      const MCSubtargetInfo &STI, raw_ostream &O);
    159   void printMSRMaskOperand(const MCInst *MI, unsigned OpNum,
    160                            const MCSubtargetInfo &STI, raw_ostream &O);
    161   void printBankedRegOperand(const MCInst *MI, unsigned OpNum,
    162                              const MCSubtargetInfo &STI, raw_ostream &O);
    163   void printPredicateOperand(const MCInst *MI, unsigned OpNum,
    164                              const MCSubtargetInfo &STI, raw_ostream &O);
    165   void printMandatoryPredicateOperand(const MCInst *MI, unsigned OpNum,
    166                                       const MCSubtargetInfo &STI,
    167                                       raw_ostream &O);
    168   void printSBitModifierOperand(const MCInst *MI, unsigned OpNum,
    169                                 const MCSubtargetInfo &STI, raw_ostream &O);
    170   void printRegisterList(const MCInst *MI, unsigned OpNum,
    171                          const MCSubtargetInfo &STI, raw_ostream &O);
    172   void printNoHashImmediate(const MCInst *MI, unsigned OpNum,
    173                             const MCSubtargetInfo &STI, raw_ostream &O);
    174   void printPImmediate(const MCInst *MI, unsigned OpNum,
    175                        const MCSubtargetInfo &STI, raw_ostream &O);
    176   void printCImmediate(const MCInst *MI, unsigned OpNum,
    177                        const MCSubtargetInfo &STI, raw_ostream &O);
    178   void printCoprocOptionImm(const MCInst *MI, unsigned OpNum,
    179                             const MCSubtargetInfo &STI, raw_ostream &O);
    180   void printFPImmOperand(const MCInst *MI, unsigned OpNum,
    181                          const MCSubtargetInfo &STI, raw_ostream &O);
    182   void printNEONModImmOperand(const MCInst *MI, unsigned OpNum,
    183                               const MCSubtargetInfo &STI, raw_ostream &O);
    184   void printImmPlusOneOperand(const MCInst *MI, unsigned OpNum,
    185                               const MCSubtargetInfo &STI, raw_ostream &O);
    186   void printRotImmOperand(const MCInst *MI, unsigned OpNum,
    187                           const MCSubtargetInfo &STI, raw_ostream &O);
    188   void printModImmOperand(const MCInst *MI, unsigned OpNum,
    189                           const MCSubtargetInfo &STI, raw_ostream &O);
    190   void printGPRPairOperand(const MCInst *MI, unsigned OpNum,
    191                            const MCSubtargetInfo &STI, raw_ostream &O);
    192 
    193   void printPCLabel(const MCInst *MI, unsigned OpNum,
    194                     const MCSubtargetInfo &STI, raw_ostream &O);
    195   void printThumbLdrLabelOperand(const MCInst *MI, unsigned OpNum,
    196                                  const MCSubtargetInfo &STI, raw_ostream &O);
    197   void printFBits16(const MCInst *MI, unsigned OpNum,
    198                     const MCSubtargetInfo &STI, raw_ostream &O);
    199   void printFBits32(const MCInst *MI, unsigned OpNum,
    200                     const MCSubtargetInfo &STI, raw_ostream &O);
    201   void printVectorIndex(const MCInst *MI, unsigned OpNum,
    202                         const MCSubtargetInfo &STI, raw_ostream &O);
    203   void printVectorListOne(const MCInst *MI, unsigned OpNum,
    204                           const MCSubtargetInfo &STI, raw_ostream &O);
    205   void printVectorListTwo(const MCInst *MI, unsigned OpNum,
    206                           const MCSubtargetInfo &STI, raw_ostream &O);
    207   void printVectorListTwoSpaced(const MCInst *MI, unsigned OpNum,
    208                                 const MCSubtargetInfo &STI, raw_ostream &O);
    209   void printVectorListThree(const MCInst *MI, unsigned OpNum,
    210                             const MCSubtargetInfo &STI, raw_ostream &O);
    211   void printVectorListFour(const MCInst *MI, unsigned OpNum,
    212                            const MCSubtargetInfo &STI, raw_ostream &O);
    213   void printVectorListOneAllLanes(const MCInst *MI, unsigned OpNum,
    214                                   const MCSubtargetInfo &STI, raw_ostream &O);
    215   void printVectorListTwoAllLanes(const MCInst *MI, unsigned OpNum,
    216                                   const MCSubtargetInfo &STI, raw_ostream &O);
    217   void printVectorListThreeAllLanes(const MCInst *MI, unsigned OpNum,
    218                                     const MCSubtargetInfo &STI, raw_ostream &O);
    219   void printVectorListFourAllLanes(const MCInst *MI, unsigned OpNum,
    220                                    const MCSubtargetInfo &STI, raw_ostream &O);
    221   void printVectorListTwoSpacedAllLanes(const MCInst *MI, unsigned OpNum,
    222                                         const MCSubtargetInfo &STI,
    223                                         raw_ostream &O);
    224   void printVectorListThreeSpacedAllLanes(const MCInst *MI, unsigned OpNum,
    225                                           const MCSubtargetInfo &STI,
    226                                           raw_ostream &O);
    227   void printVectorListFourSpacedAllLanes(const MCInst *MI, unsigned OpNum,
    228                                          const MCSubtargetInfo &STI,
    229                                          raw_ostream &O);
    230   void printVectorListThreeSpaced(const MCInst *MI, unsigned OpNum,
    231                                   const MCSubtargetInfo &STI, raw_ostream &O);
    232   void printVectorListFourSpaced(const MCInst *MI, unsigned OpNum,
    233                                  const MCSubtargetInfo &STI, raw_ostream &O);
    234 };
    235 
    236 } // end namespace llvm
    237 
    238 #endif
    239