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