ByteStreamer.h revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
1//===-- llvm/CodeGen/ByteStreamer.h - ByteStreamer class --------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file contains a class that can take bytes that would normally be 11// streamed via the AsmPrinter. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_CODEGEN_BYTESTREAMER_H 16#define LLVM_CODEGEN_BYTESTREAMER_H 17 18#include "llvm/ADT/ArrayRef.h" 19#include "llvm/CodeGen/AsmPrinter.h" 20#include "llvm/MC/MCStreamer.h" 21#include "DIEHash.h" 22 23namespace llvm { 24class ByteStreamer { 25 public: 26 virtual ~ByteStreamer() {} 27 28 // For now we're just handling the calls we need for dwarf emission/hashing. 29 virtual void EmitInt8(uint8_t Byte, const Twine &Comment = "") = 0; 30 virtual void EmitSLEB128(uint64_t DWord, const Twine &Comment = "") = 0; 31 virtual void EmitULEB128(uint64_t DWord, const Twine &Comment = "") = 0; 32}; 33 34class APByteStreamer : public ByteStreamer { 35private: 36 AsmPrinter ≈ 37 38public: 39 APByteStreamer(AsmPrinter &Asm) : AP(Asm) {} 40 void EmitInt8(uint8_t Byte, const Twine &Comment) override { 41 AP.OutStreamer.AddComment(Comment); 42 AP.EmitInt8(Byte); 43 } 44 void EmitSLEB128(uint64_t DWord, const Twine &Comment) override { 45 AP.OutStreamer.AddComment(Comment); 46 AP.EmitSLEB128(DWord); 47 } 48 void EmitULEB128(uint64_t DWord, const Twine &Comment) override { 49 AP.OutStreamer.AddComment(Comment); 50 AP.EmitULEB128(DWord); 51 } 52}; 53 54class HashingByteStreamer : public ByteStreamer { 55 private: 56 DIEHash &Hash; 57 public: 58 HashingByteStreamer(DIEHash &H) : Hash(H) {} 59 void EmitInt8(uint8_t Byte, const Twine &Comment) override { 60 Hash.update(Byte); 61 } 62 void EmitSLEB128(uint64_t DWord, const Twine &Comment) override { 63 Hash.addSLEB128(DWord); 64 } 65 void EmitULEB128(uint64_t DWord, const Twine &Comment) override { 66 Hash.addULEB128(DWord); 67 } 68}; 69} 70 71#endif 72