10b57cec5SDimitry Andric //===- ARMInstPrinter.h - Convert ARM MCInst to assembly syntax -*- C++ -*-===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric // 90b57cec5SDimitry Andric // This class prints an ARM MCInst to a .s file. 100b57cec5SDimitry Andric // 110b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric #ifndef LLVM_LIB_TARGET_ARM_MCTARGETDESC_ARMINSTPRINTER_H 140b57cec5SDimitry Andric #define LLVM_LIB_TARGET_ARM_MCTARGETDESC_ARMINSTPRINTER_H 150b57cec5SDimitry Andric 160b57cec5SDimitry Andric #include "MCTargetDesc/ARMMCTargetDesc.h" 170b57cec5SDimitry Andric #include "llvm/MC/MCInstPrinter.h" 180b57cec5SDimitry Andric 190b57cec5SDimitry Andric namespace llvm { 200b57cec5SDimitry Andric 210b57cec5SDimitry Andric class ARMInstPrinter : public MCInstPrinter { 220b57cec5SDimitry Andric public: 230b57cec5SDimitry Andric ARMInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 240b57cec5SDimitry Andric const MCRegisterInfo &MRI); 250b57cec5SDimitry Andric 260b57cec5SDimitry Andric bool applyTargetSpecificCLOption(StringRef Opt) override; 270b57cec5SDimitry Andric 28480093f4SDimitry Andric void printInst(const MCInst *MI, uint64_t Address, StringRef Annot, 29480093f4SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O) override; 30bdd1243dSDimitry Andric void printRegName(raw_ostream &OS, MCRegister Reg) const override; 310b57cec5SDimitry Andric 320b57cec5SDimitry Andric // Autogenerated by tblgen. 33e8d8bef9SDimitry Andric std::pair<const char *, uint64_t> getMnemonic(const MCInst *MI) override; 34480093f4SDimitry Andric void printInstruction(const MCInst *MI, uint64_t Address, 35480093f4SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 365ffd83dbSDimitry Andric virtual bool printAliasInstr(const MCInst *MI, uint64_t Address, 375ffd83dbSDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 385ffd83dbSDimitry Andric virtual void printCustomAliasOperand(const MCInst *MI, uint64_t Address, 395ffd83dbSDimitry Andric unsigned OpIdx, unsigned PrintMethodIdx, 400b57cec5SDimitry Andric const MCSubtargetInfo &STI, 410b57cec5SDimitry Andric raw_ostream &O); 42bdd1243dSDimitry Andric static const char *getRegisterName(MCRegister Reg, 430b57cec5SDimitry Andric unsigned AltIdx = ARM::NoRegAltName); 440b57cec5SDimitry Andric 450b57cec5SDimitry Andric void printOperand(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, 460b57cec5SDimitry Andric raw_ostream &O); 47fe6060f1SDimitry Andric void printOperand(const MCInst *MI, uint64_t Address, unsigned OpNum, 48fe6060f1SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 490b57cec5SDimitry Andric 500b57cec5SDimitry Andric void printSORegRegOperand(const MCInst *MI, unsigned OpNum, 510b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 520b57cec5SDimitry Andric void printSORegImmOperand(const MCInst *MI, unsigned OpNum, 530b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 540b57cec5SDimitry Andric 550b57cec5SDimitry Andric void printAddrModeTBB(const MCInst *MI, unsigned OpNum, 560b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 570b57cec5SDimitry Andric void printAddrModeTBH(const MCInst *MI, unsigned OpNum, 580b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 590b57cec5SDimitry Andric void printAddrMode2Operand(const MCInst *MI, unsigned OpNum, 600b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 610b57cec5SDimitry Andric void printAM2PostIndexOp(const MCInst *MI, unsigned OpNum, 620b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 630b57cec5SDimitry Andric void printAM2PreOrOffsetIndexOp(const MCInst *MI, unsigned OpNum, 640b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 650b57cec5SDimitry Andric void printAddrMode2OffsetOperand(const MCInst *MI, unsigned OpNum, 660b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 670b57cec5SDimitry Andric template <bool AlwaysPrintImm0> 680b57cec5SDimitry Andric void printAddrMode3Operand(const MCInst *MI, unsigned OpNum, 690b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 700b57cec5SDimitry Andric void printAddrMode3OffsetOperand(const MCInst *MI, unsigned OpNum, 710b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 720b57cec5SDimitry Andric void printAM3PreOrOffsetIndexOp(const MCInst *MI, unsigned Op, raw_ostream &O, 730b57cec5SDimitry Andric bool AlwaysPrintImm0); 740b57cec5SDimitry Andric void printPostIdxImm8Operand(const MCInst *MI, unsigned OpNum, 750b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 760b57cec5SDimitry Andric void printPostIdxRegOperand(const MCInst *MI, unsigned OpNum, 770b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 780b57cec5SDimitry Andric void printPostIdxImm8s4Operand(const MCInst *MI, unsigned OpNum, 790b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 800b57cec5SDimitry Andric 810b57cec5SDimitry Andric void printLdStmModeOperand(const MCInst *MI, unsigned OpNum, 820b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 830b57cec5SDimitry Andric template <bool AlwaysPrintImm0> 840b57cec5SDimitry Andric void printAddrMode5Operand(const MCInst *MI, unsigned OpNum, 850b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 860b57cec5SDimitry Andric template <bool AlwaysPrintImm0> 870b57cec5SDimitry Andric void printAddrMode5FP16Operand(const MCInst *MI, unsigned OpNum, 880b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 890b57cec5SDimitry Andric void printAddrMode6Operand(const MCInst *MI, unsigned OpNum, 900b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 910b57cec5SDimitry Andric void printAddrMode7Operand(const MCInst *MI, unsigned OpNum, 920b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 930b57cec5SDimitry Andric void printAddrMode6OffsetOperand(const MCInst *MI, unsigned OpNum, 940b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 950b57cec5SDimitry Andric 960b57cec5SDimitry Andric void printBitfieldInvMaskImmOperand(const MCInst *MI, unsigned OpNum, 970b57cec5SDimitry Andric const MCSubtargetInfo &STI, 980b57cec5SDimitry Andric raw_ostream &O); 990b57cec5SDimitry Andric void printMemBOption(const MCInst *MI, unsigned OpNum, 1000b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1010b57cec5SDimitry Andric void printInstSyncBOption(const MCInst *MI, unsigned OpNum, 1020b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1030b57cec5SDimitry Andric void printTraceSyncBOption(const MCInst *MI, unsigned OpNum, 1040b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1050b57cec5SDimitry Andric void printShiftImmOperand(const MCInst *MI, unsigned OpNum, 1060b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1070b57cec5SDimitry Andric void printPKHLSLShiftImm(const MCInst *MI, unsigned OpNum, 1080b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1090b57cec5SDimitry Andric void printPKHASRShiftImm(const MCInst *MI, unsigned OpNum, 1100b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1110b57cec5SDimitry Andric 1120b57cec5SDimitry Andric template <unsigned scale> 1130b57cec5SDimitry Andric void printAdrLabelOperand(const MCInst *MI, unsigned OpNum, 1140b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1155ffd83dbSDimitry Andric template <unsigned scale> printAdrLabelOperand(const MCInst * MI,uint64_t,unsigned OpNum,const MCSubtargetInfo & STI,raw_ostream & O)1165ffd83dbSDimitry Andric void printAdrLabelOperand(const MCInst *MI, uint64_t /*Address*/, 1175ffd83dbSDimitry Andric unsigned OpNum, const MCSubtargetInfo &STI, 1185ffd83dbSDimitry Andric raw_ostream &O) { 1195ffd83dbSDimitry Andric printAdrLabelOperand<scale>(MI, OpNum, STI, O); 1205ffd83dbSDimitry Andric } 1210b57cec5SDimitry Andric void printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum, 1220b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1230b57cec5SDimitry Andric void printThumbSRImm(const MCInst *MI, unsigned OpNum, 1240b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1250b57cec5SDimitry Andric void printThumbITMask(const MCInst *MI, unsigned OpNum, 1260b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1270b57cec5SDimitry Andric void printThumbAddrModeRROperand(const MCInst *MI, unsigned OpNum, 1280b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1290b57cec5SDimitry Andric void printThumbAddrModeImm5SOperand(const MCInst *MI, unsigned OpNum, 1300b57cec5SDimitry Andric const MCSubtargetInfo &STI, 1310b57cec5SDimitry Andric raw_ostream &O, unsigned Scale); 1320b57cec5SDimitry Andric void printThumbAddrModeImm5S1Operand(const MCInst *MI, unsigned OpNum, 1330b57cec5SDimitry Andric const MCSubtargetInfo &STI, 1340b57cec5SDimitry Andric raw_ostream &O); 1350b57cec5SDimitry Andric void printThumbAddrModeImm5S2Operand(const MCInst *MI, unsigned OpNum, 1360b57cec5SDimitry Andric const MCSubtargetInfo &STI, 1370b57cec5SDimitry Andric raw_ostream &O); 1380b57cec5SDimitry Andric void printThumbAddrModeImm5S4Operand(const MCInst *MI, unsigned OpNum, 1390b57cec5SDimitry Andric const MCSubtargetInfo &STI, 1400b57cec5SDimitry Andric raw_ostream &O); 1410b57cec5SDimitry Andric void printThumbAddrModeSPOperand(const MCInst *MI, unsigned OpNum, 1420b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1430b57cec5SDimitry Andric 1440b57cec5SDimitry Andric void printT2SOOperand(const MCInst *MI, unsigned OpNum, 1450b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1460b57cec5SDimitry Andric template <bool AlwaysPrintImm0> 1470b57cec5SDimitry Andric void printAddrModeImm12Operand(const MCInst *MI, unsigned OpNum, 1480b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1490b57cec5SDimitry Andric template <bool AlwaysPrintImm0> 1500b57cec5SDimitry Andric void printT2AddrModeImm8Operand(const MCInst *MI, unsigned OpNum, 1510b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1520b57cec5SDimitry Andric template <bool AlwaysPrintImm0> 1530b57cec5SDimitry Andric void printT2AddrModeImm8s4Operand(const MCInst *MI, unsigned OpNum, 1540b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1550b57cec5SDimitry Andric void printT2AddrModeImm0_1020s4Operand(const MCInst *MI, unsigned OpNum, 1560b57cec5SDimitry Andric const MCSubtargetInfo &STI, 1570b57cec5SDimitry Andric raw_ostream &O); 1580b57cec5SDimitry Andric void printT2AddrModeImm8OffsetOperand(const MCInst *MI, unsigned OpNum, 1590b57cec5SDimitry Andric const MCSubtargetInfo &STI, 1600b57cec5SDimitry Andric raw_ostream &O); 1610b57cec5SDimitry Andric void printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, unsigned OpNum, 1620b57cec5SDimitry Andric const MCSubtargetInfo &STI, 1630b57cec5SDimitry Andric raw_ostream &O); 1640b57cec5SDimitry Andric void printT2AddrModeSoRegOperand(const MCInst *MI, unsigned OpNum, 1650b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1660b57cec5SDimitry Andric 1670b57cec5SDimitry Andric void printSetendOperand(const MCInst *MI, unsigned OpNum, 1680b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1690b57cec5SDimitry Andric void printCPSIMod(const MCInst *MI, unsigned OpNum, 1700b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1710b57cec5SDimitry Andric void printCPSIFlag(const MCInst *MI, unsigned OpNum, 1720b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1730b57cec5SDimitry Andric void printMSRMaskOperand(const MCInst *MI, unsigned OpNum, 1740b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1750b57cec5SDimitry Andric void printBankedRegOperand(const MCInst *MI, unsigned OpNum, 1760b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1770b57cec5SDimitry Andric void printPredicateOperand(const MCInst *MI, unsigned OpNum, 1780b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1790b57cec5SDimitry Andric void printMandatoryPredicateOperand(const MCInst *MI, unsigned OpNum, 1800b57cec5SDimitry Andric const MCSubtargetInfo &STI, 1810b57cec5SDimitry Andric raw_ostream &O); 1820b57cec5SDimitry Andric void printMandatoryRestrictedPredicateOperand(const MCInst *MI, 1830b57cec5SDimitry Andric unsigned OpNum, 1840b57cec5SDimitry Andric const MCSubtargetInfo &STI, 1850b57cec5SDimitry Andric raw_ostream &O); 1860b57cec5SDimitry Andric void printMandatoryInvertedPredicateOperand(const MCInst *MI, unsigned OpNum, 1870b57cec5SDimitry Andric const MCSubtargetInfo &STI, 1880b57cec5SDimitry Andric raw_ostream &O); 1890b57cec5SDimitry Andric void printSBitModifierOperand(const MCInst *MI, unsigned OpNum, 1900b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1910b57cec5SDimitry Andric void printRegisterList(const MCInst *MI, unsigned OpNum, 1920b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1930b57cec5SDimitry Andric void printNoHashImmediate(const MCInst *MI, unsigned OpNum, 1940b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1950b57cec5SDimitry Andric void printPImmediate(const MCInst *MI, unsigned OpNum, 1960b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1970b57cec5SDimitry Andric void printCImmediate(const MCInst *MI, unsigned OpNum, 1980b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 1990b57cec5SDimitry Andric void printCoprocOptionImm(const MCInst *MI, unsigned OpNum, 2000b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2010b57cec5SDimitry Andric void printFPImmOperand(const MCInst *MI, unsigned OpNum, 2020b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2038bcb0991SDimitry Andric void printVMOVModImmOperand(const MCInst *MI, unsigned OpNum, 2040b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2050b57cec5SDimitry Andric void printImmPlusOneOperand(const MCInst *MI, unsigned OpNum, 2060b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2070b57cec5SDimitry Andric void printRotImmOperand(const MCInst *MI, unsigned OpNum, 2080b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2090b57cec5SDimitry Andric void printModImmOperand(const MCInst *MI, unsigned OpNum, 2100b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2110b57cec5SDimitry Andric void printGPRPairOperand(const MCInst *MI, unsigned OpNum, 2120b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2130b57cec5SDimitry Andric 2140b57cec5SDimitry Andric void printPCLabel(const MCInst *MI, unsigned OpNum, 2150b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2160b57cec5SDimitry Andric void printThumbLdrLabelOperand(const MCInst *MI, unsigned OpNum, 2170b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); printThumbLdrLabelOperand(const MCInst * MI,uint64_t,unsigned OpNum,const MCSubtargetInfo & STI,raw_ostream & O)2185ffd83dbSDimitry Andric void printThumbLdrLabelOperand(const MCInst *MI, uint64_t /*Address*/, 2195ffd83dbSDimitry Andric unsigned OpNum, const MCSubtargetInfo &STI, 2205ffd83dbSDimitry Andric raw_ostream &O) { 2215ffd83dbSDimitry Andric printThumbLdrLabelOperand(MI, OpNum, STI, O); 2225ffd83dbSDimitry Andric } 2230b57cec5SDimitry Andric void printFBits16(const MCInst *MI, unsigned OpNum, 2240b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2250b57cec5SDimitry Andric void printFBits32(const MCInst *MI, unsigned OpNum, 2260b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2270b57cec5SDimitry Andric void printVectorIndex(const MCInst *MI, unsigned OpNum, 2280b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2290b57cec5SDimitry Andric void printVectorListOne(const MCInst *MI, unsigned OpNum, 2300b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2310b57cec5SDimitry Andric void printVectorListTwo(const MCInst *MI, unsigned OpNum, 2320b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2330b57cec5SDimitry Andric void printVectorListTwoSpaced(const MCInst *MI, unsigned OpNum, 2340b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2350b57cec5SDimitry Andric void printVectorListThree(const MCInst *MI, unsigned OpNum, 2360b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2370b57cec5SDimitry Andric void printVectorListFour(const MCInst *MI, unsigned OpNum, 2380b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2390b57cec5SDimitry Andric void printVectorListOneAllLanes(const MCInst *MI, unsigned OpNum, 2400b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2410b57cec5SDimitry Andric void printVectorListTwoAllLanes(const MCInst *MI, unsigned OpNum, 2420b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2430b57cec5SDimitry Andric void printVectorListThreeAllLanes(const MCInst *MI, unsigned OpNum, 2440b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2450b57cec5SDimitry Andric void printVectorListFourAllLanes(const MCInst *MI, unsigned OpNum, 2460b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2470b57cec5SDimitry Andric void printVectorListTwoSpacedAllLanes(const MCInst *MI, unsigned OpNum, 2480b57cec5SDimitry Andric const MCSubtargetInfo &STI, 2490b57cec5SDimitry Andric raw_ostream &O); 2500b57cec5SDimitry Andric void printVectorListThreeSpacedAllLanes(const MCInst *MI, unsigned OpNum, 2510b57cec5SDimitry Andric const MCSubtargetInfo &STI, 2520b57cec5SDimitry Andric raw_ostream &O); 2530b57cec5SDimitry Andric void printVectorListFourSpacedAllLanes(const MCInst *MI, unsigned OpNum, 2540b57cec5SDimitry Andric const MCSubtargetInfo &STI, 2550b57cec5SDimitry Andric raw_ostream &O); 2560b57cec5SDimitry Andric void printVectorListThreeSpaced(const MCInst *MI, unsigned OpNum, 2570b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2580b57cec5SDimitry Andric void printVectorListFourSpaced(const MCInst *MI, unsigned OpNum, 2590b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2600b57cec5SDimitry Andric template<unsigned NumRegs> 2610b57cec5SDimitry Andric void printMVEVectorList(const MCInst *MI, unsigned OpNum, 2620b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2630b57cec5SDimitry Andric template<int64_t Angle, int64_t Remainder> 2640b57cec5SDimitry Andric void printComplexRotationOp(const MCInst *MI, unsigned OpNum, 2650b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2660b57cec5SDimitry Andric // MVE 2670b57cec5SDimitry Andric void printVPTPredicateOperand(const MCInst *MI, unsigned OpNum, 2680b57cec5SDimitry Andric const MCSubtargetInfo &STI, 2690b57cec5SDimitry Andric raw_ostream &O); 2700b57cec5SDimitry Andric void printVPTMask(const MCInst *MI, unsigned OpNum, 2710b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2720b57cec5SDimitry Andric template<int shift> 2730b57cec5SDimitry Andric void printMveAddrModeRQOperand(const MCInst *MI, unsigned OpNum, 2740b57cec5SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2758bcb0991SDimitry Andric void printMveSaturateOp(const MCInst *MI, unsigned OpNum, 2768bcb0991SDimitry Andric const MCSubtargetInfo &STI, raw_ostream &O); 2770b57cec5SDimitry Andric private: 2780b57cec5SDimitry Andric unsigned DefaultAltIdx = ARM::NoRegAltName; 2790b57cec5SDimitry Andric }; 2800b57cec5SDimitry Andric 2810b57cec5SDimitry Andric } // end namespace llvm 2820b57cec5SDimitry Andric 2830b57cec5SDimitry Andric #endif // LLVM_LIB_TARGET_ARM_MCTARGETDESC_ARMINSTPRINTER_H 284