xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/VE/MCTargetDesc/VETargetStreamer.h (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
1480093f4SDimitry Andric //===-- VETargetStreamer.h - VE Target Streamer ----------------*- C++ -*--===//
2480093f4SDimitry Andric //
3480093f4SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4480093f4SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5480093f4SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6480093f4SDimitry Andric //
7480093f4SDimitry Andric //===----------------------------------------------------------------------===//
8480093f4SDimitry Andric 
9480093f4SDimitry Andric #ifndef LLVM_LIB_TARGET_VE_VETARGETSTREAMER_H
10480093f4SDimitry Andric #define LLVM_LIB_TARGET_VE_VETARGETSTREAMER_H
11480093f4SDimitry Andric 
12480093f4SDimitry Andric #include "llvm/MC/MCELFStreamer.h"
13480093f4SDimitry Andric #include "llvm/MC/MCStreamer.h"
14fe6060f1SDimitry Andric #include "llvm/Support/FormattedStream.h"
15480093f4SDimitry Andric 
16480093f4SDimitry Andric namespace llvm {
17480093f4SDimitry Andric class VETargetStreamer : public MCTargetStreamer {
18480093f4SDimitry Andric   virtual void anchor();
19480093f4SDimitry Andric 
20480093f4SDimitry Andric public:
21480093f4SDimitry Andric   VETargetStreamer(MCStreamer &S);
22480093f4SDimitry Andric   /// Emit ".register <reg>, #ignore".
emitVERegisterIgnore(unsigned reg)23*06c3fb27SDimitry Andric   virtual void emitVERegisterIgnore(unsigned reg){};
24480093f4SDimitry Andric   /// Emit ".register <reg>, #scratch".
emitVERegisterScratch(unsigned reg)25*06c3fb27SDimitry Andric   virtual void emitVERegisterScratch(unsigned reg){};
26480093f4SDimitry Andric };
27480093f4SDimitry Andric 
28480093f4SDimitry Andric // This part is for ascii assembly output
29480093f4SDimitry Andric class VETargetAsmStreamer : public VETargetStreamer {
30480093f4SDimitry Andric   formatted_raw_ostream &OS;
31480093f4SDimitry Andric 
32480093f4SDimitry Andric public:
33480093f4SDimitry Andric   VETargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
34480093f4SDimitry Andric   void emitVERegisterIgnore(unsigned reg) override;
35480093f4SDimitry Andric   void emitVERegisterScratch(unsigned reg) override;
36480093f4SDimitry Andric };
37480093f4SDimitry Andric 
38480093f4SDimitry Andric // This part is for ELF object output
39480093f4SDimitry Andric class VETargetELFStreamer : public VETargetStreamer {
40480093f4SDimitry Andric public:
41480093f4SDimitry Andric   VETargetELFStreamer(MCStreamer &S);
42480093f4SDimitry Andric   MCELFStreamer &getStreamer();
emitVERegisterIgnore(unsigned reg)43480093f4SDimitry Andric   void emitVERegisterIgnore(unsigned reg) override {}
emitVERegisterScratch(unsigned reg)44480093f4SDimitry Andric   void emitVERegisterScratch(unsigned reg) override {}
45480093f4SDimitry Andric };
46480093f4SDimitry Andric } // namespace llvm
47480093f4SDimitry Andric 
48480093f4SDimitry Andric #endif
49