xref: /llvm-project/llvm/lib/Target/M68k/MCTargetDesc/M68kInstPrinter.h (revision eeb987f6f35aa614ed7a555be33d67c5cb1be230)
16bf22ae4SJim Lin //===-- M68kInstPrinter.h - Convert M68k MCInst to asm ----------*- C++ -*-===//
28dddc152SMin-Yih Hsu //
38dddc152SMin-Yih Hsu // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
48dddc152SMin-Yih Hsu // See https://llvm.org/LICENSE.txt for license information.
58dddc152SMin-Yih Hsu // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
68dddc152SMin-Yih Hsu //
78dddc152SMin-Yih Hsu //===----------------------------------------------------------------------===//
88dddc152SMin-Yih Hsu ///
98dddc152SMin-Yih Hsu /// \file
108dddc152SMin-Yih Hsu /// This file contains declarations for an M68k MCInst printer.
118dddc152SMin-Yih Hsu ///
128dddc152SMin-Yih Hsu //===----------------------------------------------------------------------===//
138dddc152SMin-Yih Hsu 
148dddc152SMin-Yih Hsu #ifndef LLVM_LIB_TARGET_M68K_INSTPRINTER_M68KINSTPRINTER_H
158dddc152SMin-Yih Hsu #define LLVM_LIB_TARGET_M68K_INSTPRINTER_M68KINSTPRINTER_H
168dddc152SMin-Yih Hsu 
17aaa2503aSMin-Yih Hsu #include "M68kMemOperandPrinter.h"
188dddc152SMin-Yih Hsu #include "llvm/MC/MCInstPrinter.h"
198dddc152SMin-Yih Hsu 
208dddc152SMin-Yih Hsu namespace llvm {
218dddc152SMin-Yih Hsu 
228dddc152SMin-Yih Hsu class TargetMachine;
238dddc152SMin-Yih Hsu 
24aaa2503aSMin-Yih Hsu class M68kInstPrinter : public MCInstPrinter,
25aaa2503aSMin-Yih Hsu                         public M68kMemOperandPrinter<M68kInstPrinter, MCInst> {
26aaa2503aSMin-Yih Hsu   friend class M68kMemOperandPrinter;
27aaa2503aSMin-Yih Hsu 
288dddc152SMin-Yih Hsu public:
298dddc152SMin-Yih Hsu   M68kInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
308dddc152SMin-Yih Hsu                   const MCRegisterInfo &MRI)
318dddc152SMin-Yih Hsu       : MCInstPrinter(MAI, MII, MRI) {}
328dddc152SMin-Yih Hsu 
338dddc152SMin-Yih Hsu   // Autogenerated by tblgen.
348dddc152SMin-Yih Hsu   void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O);
356ae84d66SSergei Barannikov   static const char *getRegisterName(MCRegister Reg);
368dddc152SMin-Yih Hsu 
37facdae62SFangrui Song   void printRegName(raw_ostream &OS, MCRegister Reg) override;
388dddc152SMin-Yih Hsu   void printInst(const MCInst *MI, uint64_t Address, StringRef Annot,
398dddc152SMin-Yih Hsu                  const MCSubtargetInfo &STI, raw_ostream &O) override;
408dddc152SMin-Yih Hsu 
418dddc152SMin-Yih Hsu   bool printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS);
428dddc152SMin-Yih Hsu   void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx,
438dddc152SMin-Yih Hsu                                unsigned PrintMethodIdx, raw_ostream &O);
448dddc152SMin-Yih Hsu 
45*eeb987f6SSergei Barannikov   std::pair<const char *, uint64_t>
46*eeb987f6SSergei Barannikov   getMnemonic(const MCInst &MI) const override;
478dddc152SMin-Yih Hsu 
488dddc152SMin-Yih Hsu private:
498dddc152SMin-Yih Hsu   void printOperand(const MCInst *MI, unsigned opNum, raw_ostream &O);
508dddc152SMin-Yih Hsu   void printImmediate(const MCInst *MI, unsigned opNum, raw_ostream &O);
518dddc152SMin-Yih Hsu   /// Print register mask for MOVEM instruction in order D0-D7,A0-A7
528dddc152SMin-Yih Hsu   void printMoveMask(const MCInst *MI, unsigned opNum, raw_ostream &O);
538dddc152SMin-Yih Hsu   /// Print register mask for MOVEM instruction in order A7-A0,D7-D0
548dddc152SMin-Yih Hsu   void printMoveMaskR(const MCInst *MI, unsigned opNum, raw_ostream &O);
558dddc152SMin-Yih Hsu   void printDisp(const MCInst *MI, unsigned opNum, raw_ostream &O);
568dddc152SMin-Yih Hsu   void printAbsMem(const MCInst *MI, unsigned opNum, raw_ostream &O);
578dddc152SMin-Yih Hsu 
588dddc152SMin-Yih Hsu   //===----------------------------------------------------------------------===//
598dddc152SMin-Yih Hsu   // Specializations
608dddc152SMin-Yih Hsu   //===----------------------------------------------------------------------===//
618dddc152SMin-Yih Hsu   //
628dddc152SMin-Yih Hsu   void printPCRelImm(const MCInst *MI, uint64_t Address, unsigned opNum,
638dddc152SMin-Yih Hsu                      raw_ostream &O) {
646de26282SRicky Taylor     printAbsMem(MI, opNum, O);
658dddc152SMin-Yih Hsu   }
668dddc152SMin-Yih Hsu 
678dddc152SMin-Yih Hsu   void printARI8Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
688dddc152SMin-Yih Hsu     printARIMem(MI, opNum, O);
698dddc152SMin-Yih Hsu   }
708dddc152SMin-Yih Hsu   void printARI16Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
718dddc152SMin-Yih Hsu     printARIMem(MI, opNum, O);
728dddc152SMin-Yih Hsu   }
738dddc152SMin-Yih Hsu   void printARI32Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
748dddc152SMin-Yih Hsu     printARIMem(MI, opNum, O);
758dddc152SMin-Yih Hsu   }
768dddc152SMin-Yih Hsu 
778dddc152SMin-Yih Hsu   void printARIPI8Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
788dddc152SMin-Yih Hsu     printARIPIMem(MI, opNum, O);
798dddc152SMin-Yih Hsu   }
808dddc152SMin-Yih Hsu   void printARIPI16Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
818dddc152SMin-Yih Hsu     printARIPIMem(MI, opNum, O);
828dddc152SMin-Yih Hsu   }
838dddc152SMin-Yih Hsu   void printARIPI32Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
848dddc152SMin-Yih Hsu     printARIPIMem(MI, opNum, O);
858dddc152SMin-Yih Hsu   }
868dddc152SMin-Yih Hsu 
878dddc152SMin-Yih Hsu   void printARIPD8Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
888dddc152SMin-Yih Hsu     printARIPDMem(MI, opNum, O);
898dddc152SMin-Yih Hsu   }
908dddc152SMin-Yih Hsu   void printARIPD16Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
918dddc152SMin-Yih Hsu     printARIPDMem(MI, opNum, O);
928dddc152SMin-Yih Hsu   }
938dddc152SMin-Yih Hsu   void printARIPD32Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
948dddc152SMin-Yih Hsu     printARIPDMem(MI, opNum, O);
958dddc152SMin-Yih Hsu   }
968dddc152SMin-Yih Hsu 
978dddc152SMin-Yih Hsu   void printARID8Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
988dddc152SMin-Yih Hsu     printARIDMem(MI, opNum, O);
998dddc152SMin-Yih Hsu   }
1008dddc152SMin-Yih Hsu   void printARID16Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
1018dddc152SMin-Yih Hsu     printARIDMem(MI, opNum, O);
1028dddc152SMin-Yih Hsu   }
1038dddc152SMin-Yih Hsu   void printARID32Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
1048dddc152SMin-Yih Hsu     printARIDMem(MI, opNum, O);
1058dddc152SMin-Yih Hsu   }
1068dddc152SMin-Yih Hsu 
1078dddc152SMin-Yih Hsu   void printARII8Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
1088dddc152SMin-Yih Hsu     printARIIMem(MI, opNum, O);
1098dddc152SMin-Yih Hsu   }
1108dddc152SMin-Yih Hsu   void printARII16Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
1118dddc152SMin-Yih Hsu     printARIIMem(MI, opNum, O);
1128dddc152SMin-Yih Hsu   }
1138dddc152SMin-Yih Hsu   void printARII32Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
1148dddc152SMin-Yih Hsu     printARIIMem(MI, opNum, O);
1158dddc152SMin-Yih Hsu   }
1168dddc152SMin-Yih Hsu 
1178dddc152SMin-Yih Hsu   void printAS8Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
1188dddc152SMin-Yih Hsu     printAbsMem(MI, opNum, O);
1198dddc152SMin-Yih Hsu   }
1208dddc152SMin-Yih Hsu   void printAS16Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
1218dddc152SMin-Yih Hsu     printAbsMem(MI, opNum, O);
1228dddc152SMin-Yih Hsu   }
1238dddc152SMin-Yih Hsu   void printAS32Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
1248dddc152SMin-Yih Hsu     printAbsMem(MI, opNum, O);
1258dddc152SMin-Yih Hsu   }
1268dddc152SMin-Yih Hsu 
1278dddc152SMin-Yih Hsu   void printAL8Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
1288dddc152SMin-Yih Hsu     printAbsMem(MI, opNum, O);
1298dddc152SMin-Yih Hsu   }
1308dddc152SMin-Yih Hsu   void printAL16Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
1318dddc152SMin-Yih Hsu     printAbsMem(MI, opNum, O);
1328dddc152SMin-Yih Hsu   }
1338dddc152SMin-Yih Hsu   void printAL32Mem(const MCInst *MI, unsigned opNum, raw_ostream &O) {
1348dddc152SMin-Yih Hsu     printAbsMem(MI, opNum, O);
1358dddc152SMin-Yih Hsu   }
1368dddc152SMin-Yih Hsu 
1378dddc152SMin-Yih Hsu   void printPCD8Mem(const MCInst *MI, uint64_t Address, unsigned opNum,
1388dddc152SMin-Yih Hsu                     raw_ostream &O) {
1398dddc152SMin-Yih Hsu     printPCDMem(MI, Address, opNum, O);
1408dddc152SMin-Yih Hsu   }
1418dddc152SMin-Yih Hsu   void printPCD16Mem(const MCInst *MI, uint64_t Address, unsigned opNum,
1428dddc152SMin-Yih Hsu                      raw_ostream &O) {
1438dddc152SMin-Yih Hsu     printPCDMem(MI, Address, opNum, O);
1448dddc152SMin-Yih Hsu   }
1458dddc152SMin-Yih Hsu   void printPCD32Mem(const MCInst *MI, uint64_t Address, unsigned opNum,
1468dddc152SMin-Yih Hsu                      raw_ostream &O) {
1478dddc152SMin-Yih Hsu     printPCDMem(MI, Address, opNum, O);
1488dddc152SMin-Yih Hsu   }
1498dddc152SMin-Yih Hsu 
1508dddc152SMin-Yih Hsu   void printPCI8Mem(const MCInst *MI, uint64_t Address, unsigned opNum,
1518dddc152SMin-Yih Hsu                     raw_ostream &O) {
1528dddc152SMin-Yih Hsu     printPCIMem(MI, Address, opNum, O);
1538dddc152SMin-Yih Hsu   }
1548dddc152SMin-Yih Hsu   void printPCI16Mem(const MCInst *MI, uint64_t Address, unsigned opNum,
1558dddc152SMin-Yih Hsu                      raw_ostream &O) {
1568dddc152SMin-Yih Hsu     printPCIMem(MI, Address, opNum, O);
1578dddc152SMin-Yih Hsu   }
1588dddc152SMin-Yih Hsu   void printPCI32Mem(const MCInst *MI, uint64_t Address, unsigned opNum,
1598dddc152SMin-Yih Hsu                      raw_ostream &O) {
1608dddc152SMin-Yih Hsu     printPCIMem(MI, Address, opNum, O);
1618dddc152SMin-Yih Hsu   }
1628dddc152SMin-Yih Hsu };
1638dddc152SMin-Yih Hsu } // end namespace llvm
1648dddc152SMin-Yih Hsu 
1654a7890c6SJim Lin #endif // LLVM_LIB_TARGET_M68K_INSTPRINTER_M68KINSTPRINTER_H
166