| Index: src/IceFixups.cpp
 | 
| diff --git a/src/IceFixups.cpp b/src/IceFixups.cpp
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..52bb0dd1c1de4fad4be4e5d588aaed33a8a667f1
 | 
| --- /dev/null
 | 
| +++ b/src/IceFixups.cpp
 | 
| @@ -0,0 +1,52 @@
 | 
| +//===- subzero/src/IceFixups.cpp - Implementation of Assembler Fixups -----===//
 | 
| +//
 | 
| +//                        The Subzero Code Generator
 | 
| +//
 | 
| +// This file is distributed under the University of Illinois Open Source
 | 
| +// License. See LICENSE.TXT for details.
 | 
| +//
 | 
| +//===----------------------------------------------------------------------===//
 | 
| +//
 | 
| +// This file implements the AssemblerFixup class, a very basic
 | 
| +// target-independent representation of a fixup or relocation.
 | 
| +//
 | 
| +//===----------------------------------------------------------------------===//
 | 
| +
 | 
| +#include "IceFixups.h"
 | 
| +#include "IceOperand.h"
 | 
| +
 | 
| +namespace Ice {
 | 
| +
 | 
| +RelocOffsetT AssemblerFixup::offset() const {
 | 
| +  if (const auto CR = llvm::dyn_cast<ConstantRelocatable>(value_))
 | 
| +    return CR->getOffset();
 | 
| +  return 0;
 | 
| +}
 | 
| +
 | 
| +IceString AssemblerFixup::symbol(const GlobalContext *Ctx) const {
 | 
| +  std::string Buffer;
 | 
| +  llvm::raw_string_ostream Str(Buffer);
 | 
| +  const Constant *C = value_;
 | 
| +  if (const auto CR = llvm::dyn_cast<ConstantRelocatable>(C)) {
 | 
| +    if (CR->getSuppressMangling())
 | 
| +      Str << CR->getName();
 | 
| +    else
 | 
| +      Str << Ctx->mangleName(CR->getName());
 | 
| +  } else {
 | 
| +    // NOTE: currently only float/doubles are put into constant pools.
 | 
| +    // In the future we may put integers as well.
 | 
| +    assert(llvm::isa<ConstantFloat>(C) || llvm::isa<ConstantDouble>(C));
 | 
| +    C->emitPoolLabel(Str);
 | 
| +  }
 | 
| +  return Str.str();
 | 
| +}
 | 
| +
 | 
| +void AssemblerFixup::emit(GlobalContext *Ctx) const {
 | 
| +  Ostream &Str = Ctx->getStrEmit();
 | 
| +  Str << symbol(Ctx);
 | 
| +  RelocOffsetT Offset = offset();
 | 
| +  if (Offset)
 | 
| +    Str << " + " << Offset;
 | 
| +}
 | 
| +
 | 
| +} // end of namespace Ice
 | 
| 
 |