xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/CSKY/CSKYAsmPrinter.h (revision 81ad626541db97eb356e2c1d4a20eb2a26a766ab)
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 
21*81ad6265SDimitry Andric   const MCSubtargetInfo *Subtarget;
22*81ad6265SDimitry Andric   const TargetInstrInfo *TII;
23349cc55cSDimitry Andric 
2404eeddc0SDimitry Andric   bool InConstantPool = false;
2504eeddc0SDimitry Andric 
2604eeddc0SDimitry Andric   /// Keep a pointer to constantpool entries of the current
2704eeddc0SDimitry Andric   /// MachineFunction.
2804eeddc0SDimitry Andric   MachineConstantPool *MCP;
2904eeddc0SDimitry Andric 
3004eeddc0SDimitry Andric   void expandTLSLA(const MachineInstr *MI);
3104eeddc0SDimitry Andric   void emitCustomConstantPool(const MachineInstr *MI);
32*81ad6265SDimitry Andric   void emitAttributes();
3304eeddc0SDimitry Andric 
34349cc55cSDimitry Andric public:
35349cc55cSDimitry Andric   explicit CSKYAsmPrinter(TargetMachine &TM,
36349cc55cSDimitry Andric                           std::unique_ptr<MCStreamer> Streamer);
37349cc55cSDimitry Andric 
38349cc55cSDimitry Andric   StringRef getPassName() const override { return "CSKY Assembly Printer"; }
39349cc55cSDimitry Andric 
400eae32dcSDimitry Andric   void EmitToStreamer(MCStreamer &S, const MCInst &Inst);
410eae32dcSDimitry Andric 
42349cc55cSDimitry Andric   /// tblgen'erated driver function for lowering simple MI->MC
43349cc55cSDimitry Andric   /// pseudo instructions.
44349cc55cSDimitry Andric   bool emitPseudoExpansionLowering(MCStreamer &OutStreamer,
45349cc55cSDimitry Andric                                    const MachineInstr *MI);
46349cc55cSDimitry Andric 
4704eeddc0SDimitry Andric   void emitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) override;
4804eeddc0SDimitry Andric 
4904eeddc0SDimitry Andric   void emitFunctionBodyEnd() override;
5004eeddc0SDimitry Andric 
51*81ad6265SDimitry Andric   void emitStartOfAsmFile(Module &M) override;
52*81ad6265SDimitry Andric 
53*81ad6265SDimitry Andric   void emitEndOfAsmFile(Module &M) override;
54*81ad6265SDimitry Andric 
55349cc55cSDimitry Andric   void emitInstruction(const MachineInstr *MI) override;
56349cc55cSDimitry Andric 
57349cc55cSDimitry Andric   bool runOnMachineFunction(MachineFunction &MF) override;
5804eeddc0SDimitry Andric 
5904eeddc0SDimitry Andric   // we emit constant pools customly!
6004eeddc0SDimitry Andric   void emitConstantPool() override{};
61*81ad6265SDimitry Andric 
62*81ad6265SDimitry Andric   bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
63*81ad6265SDimitry Andric                        const char *ExtraCode, raw_ostream &OS) override;
64*81ad6265SDimitry Andric 
65*81ad6265SDimitry Andric   bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
66*81ad6265SDimitry Andric                              const char *ExtraCode, raw_ostream &OS) override;
67349cc55cSDimitry Andric };
68349cc55cSDimitry Andric } // end namespace llvm
69349cc55cSDimitry Andric 
70349cc55cSDimitry Andric #endif // LLVM_LIB_TARGET_CSKY_CSKYASMPRINTER_H
71