1356843Sdim//===-- VETargetStreamer.h - VE Target Streamer ----------------*- C++ -*--===//
2356843Sdim//
3356843Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4356843Sdim// See https://llvm.org/LICENSE.txt for license information.
5356843Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6356843Sdim//
7356843Sdim//===----------------------------------------------------------------------===//
8356843Sdim
9356843Sdim#ifndef LLVM_LIB_TARGET_VE_VETARGETSTREAMER_H
10356843Sdim#define LLVM_LIB_TARGET_VE_VETARGETSTREAMER_H
11356843Sdim
12356843Sdim#include "llvm/MC/MCELFStreamer.h"
13356843Sdim#include "llvm/MC/MCStreamer.h"
14356843Sdim
15356843Sdimnamespace llvm {
16356843Sdimclass VETargetStreamer : public MCTargetStreamer {
17356843Sdim  virtual void anchor();
18356843Sdim
19356843Sdimpublic:
20356843Sdim  VETargetStreamer(MCStreamer &S);
21356843Sdim  /// Emit ".register <reg>, #ignore".
22356843Sdim  virtual void emitVERegisterIgnore(unsigned reg) = 0;
23356843Sdim  /// Emit ".register <reg>, #scratch".
24356843Sdim  virtual void emitVERegisterScratch(unsigned reg) = 0;
25356843Sdim};
26356843Sdim
27356843Sdim// This part is for ascii assembly output
28356843Sdimclass VETargetAsmStreamer : public VETargetStreamer {
29356843Sdim  formatted_raw_ostream &OS;
30356843Sdim
31356843Sdimpublic:
32356843Sdim  VETargetAsmStreamer(MCStreamer &S, formatted_raw_ostream &OS);
33356843Sdim  void emitVERegisterIgnore(unsigned reg) override;
34356843Sdim  void emitVERegisterScratch(unsigned reg) override;
35356843Sdim};
36356843Sdim
37356843Sdim// This part is for ELF object output
38356843Sdimclass VETargetELFStreamer : public VETargetStreamer {
39356843Sdimpublic:
40356843Sdim  VETargetELFStreamer(MCStreamer &S);
41356843Sdim  MCELFStreamer &getStreamer();
42356843Sdim  void emitVERegisterIgnore(unsigned reg) override {}
43356843Sdim  void emitVERegisterScratch(unsigned reg) override {}
44356843Sdim};
45356843Sdim} // namespace llvm
46356843Sdim
47356843Sdim#endif
48