xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/CSKY/CSKYAsmPrinter.h (revision 04eeddc0aa8e0a417a16eaf9d7d095207f4a8623)
1349cc55cSDimitry Andric //===-- CSKYAsmPrinter.h - CSKY implementation of AsmPrinter ----*- C++ -*-===//
2349cc55cSDimitry Andric //
3349cc55cSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4349cc55cSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5349cc55cSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6349cc55cSDimitry Andric //
7349cc55cSDimitry Andric //===----------------------------------------------------------------------===//
8349cc55cSDimitry Andric 
9349cc55cSDimitry Andric #ifndef LLVM_LIB_TARGET_CSKY_CSKYASMPRINTER_H
10349cc55cSDimitry Andric #define LLVM_LIB_TARGET_CSKY_CSKYASMPRINTER_H
11349cc55cSDimitry Andric 
12349cc55cSDimitry Andric #include "CSKYMCInstLower.h"
13349cc55cSDimitry Andric #include "CSKYSubtarget.h"
14349cc55cSDimitry Andric #include "llvm/CodeGen/AsmPrinter.h"
15349cc55cSDimitry Andric #include "llvm/MC/MCDirectives.h"
16349cc55cSDimitry Andric 
17349cc55cSDimitry Andric namespace llvm {
18349cc55cSDimitry Andric class LLVM_LIBRARY_VISIBILITY CSKYAsmPrinter : public AsmPrinter {
19349cc55cSDimitry Andric   CSKYMCInstLower MCInstLowering;
20349cc55cSDimitry Andric 
21349cc55cSDimitry Andric   const CSKYSubtarget *Subtarget;
22349cc55cSDimitry Andric 
23*04eeddc0SDimitry Andric   bool InConstantPool = false;
24*04eeddc0SDimitry Andric 
25*04eeddc0SDimitry Andric   /// Keep a pointer to constantpool entries of the current
26*04eeddc0SDimitry Andric   /// MachineFunction.
27*04eeddc0SDimitry Andric   MachineConstantPool *MCP;
28*04eeddc0SDimitry Andric 
29*04eeddc0SDimitry Andric   void expandTLSLA(const MachineInstr *MI);
30*04eeddc0SDimitry Andric   void emitCustomConstantPool(const MachineInstr *MI);
31*04eeddc0SDimitry Andric 
32349cc55cSDimitry Andric public:
33349cc55cSDimitry Andric   explicit CSKYAsmPrinter(TargetMachine &TM,
34349cc55cSDimitry Andric                           std::unique_ptr<MCStreamer> Streamer);
35349cc55cSDimitry Andric 
36349cc55cSDimitry Andric   StringRef getPassName() const override { return "CSKY Assembly Printer"; }
37349cc55cSDimitry Andric 
380eae32dcSDimitry Andric   void EmitToStreamer(MCStreamer &S, const MCInst &Inst);
390eae32dcSDimitry Andric 
40349cc55cSDimitry Andric   /// tblgen'erated driver function for lowering simple MI->MC
41349cc55cSDimitry Andric   /// pseudo instructions.
42349cc55cSDimitry Andric   bool emitPseudoExpansionLowering(MCStreamer &OutStreamer,
43349cc55cSDimitry Andric                                    const MachineInstr *MI);
44349cc55cSDimitry Andric 
45*04eeddc0SDimitry Andric   void emitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) override;
46*04eeddc0SDimitry Andric 
47*04eeddc0SDimitry Andric   void emitFunctionBodyEnd() override;
48*04eeddc0SDimitry Andric 
49349cc55cSDimitry Andric   void emitInstruction(const MachineInstr *MI) override;
50349cc55cSDimitry Andric 
51349cc55cSDimitry Andric   bool runOnMachineFunction(MachineFunction &MF) override;
52*04eeddc0SDimitry Andric 
53*04eeddc0SDimitry Andric   // we emit constant pools customly!
54*04eeddc0SDimitry Andric   void emitConstantPool() override{};
55349cc55cSDimitry Andric };
56349cc55cSDimitry Andric } // end namespace llvm
57349cc55cSDimitry Andric 
58349cc55cSDimitry Andric #endif // LLVM_LIB_TARGET_CSKY_CSKYASMPRINTER_H
59