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