ByteStreamer.h revision 280031
1274955Ssvnmir//===-- llvm/CodeGen/ByteStreamer.h - ByteStreamer class --------*- C++ -*-===// 2274955Ssvnmir// 3274955Ssvnmir// The LLVM Compiler Infrastructure 4274955Ssvnmir// 5274955Ssvnmir// This file is distributed under the University of Illinois Open Source 6274955Ssvnmir// License. See LICENSE.TXT for details. 7274955Ssvnmir// 8274955Ssvnmir//===----------------------------------------------------------------------===// 9274955Ssvnmir// 10274955Ssvnmir// This file contains a class that can take bytes that would normally be 11274955Ssvnmir// streamed via the AsmPrinter. 12274955Ssvnmir// 13274955Ssvnmir//===----------------------------------------------------------------------===// 14274955Ssvnmir 15280031Sdim#ifndef LLVM_LIB_CODEGEN_ASMPRINTER_BYTESTREAMER_H 16280031Sdim#define LLVM_LIB_CODEGEN_ASMPRINTER_BYTESTREAMER_H 17274955Ssvnmir 18280031Sdim#include "DIEHash.h" 19274955Ssvnmir#include "llvm/ADT/ArrayRef.h" 20274955Ssvnmir#include "llvm/CodeGen/AsmPrinter.h" 21274955Ssvnmir#include "llvm/MC/MCStreamer.h" 22274955Ssvnmir 23274955Ssvnmirnamespace llvm { 24274955Ssvnmirclass ByteStreamer { 25274955Ssvnmir public: 26274955Ssvnmir virtual ~ByteStreamer() {} 27274955Ssvnmir 28274955Ssvnmir // For now we're just handling the calls we need for dwarf emission/hashing. 29274955Ssvnmir virtual void EmitInt8(uint8_t Byte, const Twine &Comment = "") = 0; 30274955Ssvnmir virtual void EmitSLEB128(uint64_t DWord, const Twine &Comment = "") = 0; 31274955Ssvnmir virtual void EmitULEB128(uint64_t DWord, const Twine &Comment = "") = 0; 32274955Ssvnmir}; 33274955Ssvnmir 34274955Ssvnmirclass APByteStreamer : public ByteStreamer { 35274955Ssvnmirprivate: 36274955Ssvnmir AsmPrinter ≈ 37274955Ssvnmir 38274955Ssvnmirpublic: 39274955Ssvnmir APByteStreamer(AsmPrinter &Asm) : AP(Asm) {} 40274955Ssvnmir void EmitInt8(uint8_t Byte, const Twine &Comment) override { 41274955Ssvnmir AP.OutStreamer.AddComment(Comment); 42274955Ssvnmir AP.EmitInt8(Byte); 43274955Ssvnmir } 44274955Ssvnmir void EmitSLEB128(uint64_t DWord, const Twine &Comment) override { 45274955Ssvnmir AP.OutStreamer.AddComment(Comment); 46274955Ssvnmir AP.EmitSLEB128(DWord); 47274955Ssvnmir } 48274955Ssvnmir void EmitULEB128(uint64_t DWord, const Twine &Comment) override { 49274955Ssvnmir AP.OutStreamer.AddComment(Comment); 50274955Ssvnmir AP.EmitULEB128(DWord); 51274955Ssvnmir } 52274955Ssvnmir}; 53274955Ssvnmir 54274955Ssvnmirclass HashingByteStreamer : public ByteStreamer { 55274955Ssvnmir private: 56274955Ssvnmir DIEHash &Hash; 57274955Ssvnmir public: 58274955Ssvnmir HashingByteStreamer(DIEHash &H) : Hash(H) {} 59274955Ssvnmir void EmitInt8(uint8_t Byte, const Twine &Comment) override { 60274955Ssvnmir Hash.update(Byte); 61274955Ssvnmir } 62274955Ssvnmir void EmitSLEB128(uint64_t DWord, const Twine &Comment) override { 63274955Ssvnmir Hash.addSLEB128(DWord); 64274955Ssvnmir } 65274955Ssvnmir void EmitULEB128(uint64_t DWord, const Twine &Comment) override { 66274955Ssvnmir Hash.addULEB128(DWord); 67274955Ssvnmir } 68274955Ssvnmir}; 69274955Ssvnmir} 70274955Ssvnmir 71274955Ssvnmir#endif 72