1//===-- M68kAsmPrinter.h - M68k LLVM Assembly Printer -----------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8/// 9/// \file 10/// This file contains M68k assembler printer declarations. 11/// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_LIB_TARGET_M68K_M68KASMPRINTER_H 15#define LLVM_LIB_TARGET_M68K_M68KASMPRINTER_H 16 17#include "M68kMCInstLower.h" 18#include "M68kTargetMachine.h" 19#include "MCTargetDesc/M68kMemOperandPrinter.h" 20 21#include "llvm/CodeGen/AsmPrinter.h" 22#include "llvm/MC/MCStreamer.h" 23#include "llvm/Support/Compiler.h" 24#include "llvm/Target/TargetMachine.h" 25#include <memory> 26#include <utility> 27 28namespace llvm { 29class MCStreamer; 30class MachineInstr; 31class MachineBasicBlock; 32class Module; 33class raw_ostream; 34 35class M68kSubtarget; 36class M68kMachineFunctionInfo; 37 38class LLVM_LIBRARY_VISIBILITY M68kAsmPrinter 39 : public AsmPrinter, 40 public M68kMemOperandPrinter<M68kAsmPrinter, MachineInstr> { 41 42 friend class M68kMemOperandPrinter; 43 44 void EmitInstrWithMacroNoAT(const MachineInstr *MI); 45 46 void printOperand(const MachineInstr *MI, int OpNum, raw_ostream &OS); 47 48 void printDisp(const MachineInstr *MI, unsigned OpNum, raw_ostream &OS); 49 void printAbsMem(const MachineInstr *MI, unsigned OpNum, raw_ostream &OS); 50 51public: 52 const M68kSubtarget *Subtarget; 53 const M68kMachineFunctionInfo *MMFI; 54 std::unique_ptr<M68kMCInstLower> MCInstLowering; 55 56 explicit M68kAsmPrinter(TargetMachine &TM, 57 std::unique_ptr<MCStreamer> Streamer) 58 : AsmPrinter(TM, std::move(Streamer)) { 59 Subtarget = static_cast<M68kTargetMachine &>(TM).getSubtargetImpl(); 60 } 61 62 StringRef getPassName() const override { return "M68k Assembly Printer"; } 63 64 virtual bool runOnMachineFunction(MachineFunction &MF) override; 65 66 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, 67 const char *ExtraCode, raw_ostream &OS) override; 68 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, 69 const char *ExtraCode, raw_ostream &OS) override; 70 71 void emitInstruction(const MachineInstr *MI) override; 72 void emitFunctionBodyStart() override; 73 void emitFunctionBodyEnd() override; 74 void emitStartOfAsmFile(Module &M) override; 75 void emitEndOfAsmFile(Module &M) override; 76}; 77} // namespace llvm 78 79#endif // LLVM_LIB_TARGET_M68K_M68KASMPRINTER_H 80