| 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
|
|
|