82 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8///9/// \file10/// This file contains M68k assembler printer declarations.11///12//===----------------------------------------------------------------------===//13 14#ifndef LLVM_LIB_TARGET_M68K_M68KASMPRINTER_H15#define LLVM_LIB_TARGET_M68K_M68KASMPRINTER_H16 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 M68kAsmPrinter39 : 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 static char ID;53 54 const M68kSubtarget *Subtarget;55 const M68kMachineFunctionInfo *MMFI;56 std::unique_ptr<M68kMCInstLower> MCInstLowering;57 58 explicit M68kAsmPrinter(TargetMachine &TM,59 std::unique_ptr<MCStreamer> Streamer)60 : AsmPrinter(TM, std::move(Streamer), ID) {61 Subtarget = static_cast<M68kTargetMachine &>(TM).getSubtargetImpl();62 }63 64 StringRef getPassName() const override { return "M68k Assembly Printer"; }65 66 virtual bool runOnMachineFunction(MachineFunction &MF) override;67 68 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,69 const char *ExtraCode, raw_ostream &OS) override;70 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,71 const char *ExtraCode, raw_ostream &OS) override;72 73 void emitInstruction(const MachineInstr *MI) override;74 void emitFunctionBodyStart() override;75 void emitFunctionBodyEnd() override;76 void emitStartOfAsmFile(Module &M) override;77 void emitEndOfAsmFile(Module &M) override;78};79} // namespace llvm80 81#endif // LLVM_LIB_TARGET_M68K_M68KASMPRINTER_H82