MCStreamer.cpp revision ab3b3651add0915a5a051b177029ad117a877f52
1//===- lib/MC/MCStreamer.cpp - Streaming Machine Code Output --------------===//
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#include "llvm/MC/MCStreamer.h"
11#include "llvm/MC/MCExpr.h"
12#include "llvm/Support/raw_ostream.h"
13#include "llvm/ADT/SmallString.h"
14#include "llvm/ADT/Twine.h"
15#include <cstdlib>
16using namespace llvm;
17
18MCStreamer::MCStreamer(MCContext &_Context) : Context(_Context), CurSection(0) {
19}
20
21MCStreamer::~MCStreamer() {
22}
23
24raw_ostream &MCStreamer::GetCommentOS() {
25  // By default, discard comments.
26  return nulls();
27}
28
29
30/// EmitIntValue - Special case of EmitValue that avoids the client having to
31/// pass in a MCExpr for constant integers.
32void MCStreamer::EmitIntValue(uint64_t Value, unsigned Size,
33                              unsigned AddrSpace) {
34  EmitValue(MCConstantExpr::Create(Value, getContext()), Size, AddrSpace);
35}
36
37void MCStreamer::EmitSymbolValue(const MCSymbol *Sym, unsigned Size,
38                                 unsigned AddrSpace) {
39  EmitValue(MCSymbolRefExpr::Create(Sym, getContext()), Size, AddrSpace);
40}
41
42/// EmitFill - Emit NumBytes bytes worth of the value specified by
43/// FillValue.  This implements directives such as '.space'.
44void MCStreamer::EmitFill(uint64_t NumBytes, uint8_t FillValue,
45                          unsigned AddrSpace) {
46  const MCExpr *E = MCConstantExpr::Create(FillValue, getContext());
47  for (uint64_t i = 0, e = NumBytes; i != e; ++i)
48    EmitValue(E, 1, AddrSpace);
49}
50
51/// EmitRawText - If this file is backed by an assembly streamer, this dumps
52/// the specified string in the output .s file.  This capability is
53/// indicated by the hasRawTextSupport() predicate.
54void MCStreamer::EmitRawText(StringRef String) {
55  errs() << "EmitRawText called on an MCStreamer that doesn't support it, "
56  " something must not be fully mc'ized\n";
57  abort();
58}
59
60void MCStreamer::EmitRawText(const Twine &T) {
61  SmallString<128> Str;
62  T.toVector(Str);
63  EmitRawText(Str.str());
64}
65