| Index: src/IceAssembler.h
|
| diff --git a/src/IceAssembler.h b/src/IceAssembler.h
|
| index 2f5a505363f329f5b544d6378032c35ab155bca6..5e7815d321718308611d1f995edb7d45b41f0099 100644
|
| --- a/src/IceAssembler.h
|
| +++ b/src/IceAssembler.h
|
| @@ -174,6 +174,20 @@ public:
|
| /// Create and track a fixup in the current function.
|
| AssemblerFixup *createFixup(FixupKind Kind, const Constant *Value);
|
|
|
| + /// Create and track a textual fixup in the current function.
|
| + AssemblerTextFixup *createTextFixup(const std::string &Text,
|
| + size_t BytesUsed);
|
| +
|
| + /// Mark that an attempt was made to emit, but failed. Hence, in order to
|
| + /// continue, one must emit a text fixup.
|
| + void setNeedsTextFixup() { TextFixupNeeded = true; }
|
| +
|
| + /// Returns true if last emit failed and needs a text fixup.
|
| + bool needsTextFixup() const { return TextFixupNeeded; }
|
| +
|
| + /// Installs a created fixup, after it has been allocated.
|
| + void installFixup(AssemblerFixup *F);
|
| +
|
| const FixupRefList &fixups() const { return Fixups; }
|
|
|
| void setSize(intptr_t NewSize) {
|
| @@ -194,6 +208,9 @@ private:
|
| Assembler &Assemblr;
|
| /// List of pool-allocated fixups relative to the current function.
|
| FixupRefList Fixups;
|
| + // True if a textual fixup is needed, because the assembler was unable to
|
| + // emit the last request.
|
| + bool TextFixupNeeded;
|
|
|
| uintptr_t cursor() const { return Cursor; }
|
| uintptr_t limit() const { return Limit; }
|
| @@ -268,12 +285,24 @@ public:
|
| // Return a view of all the bytes of code for the current function.
|
| llvm::StringRef getBufferView() const;
|
|
|
| + /// Emit a fixup at the current location.
|
| + void emitFixup(AssemblerFixup *Fixup) { Buffer.emitFixup(Fixup); }
|
| +
|
| const FixupRefList &fixups() const { return Buffer.fixups(); }
|
|
|
| AssemblerFixup *createFixup(FixupKind Kind, const Constant *Value) {
|
| return Buffer.createFixup(Kind, Value);
|
| }
|
|
|
| + AssemblerTextFixup *createTextFixup(const std::string &Text,
|
| + size_t BytesUsed) {
|
| + return Buffer.createTextFixup(Text, BytesUsed);
|
| + }
|
| +
|
| + void setNeedsTextFixup() { Buffer.setNeedsTextFixup(); }
|
| +
|
| + bool needsTextFixup() const { return Buffer.needsTextFixup(); }
|
| +
|
| void emitIASBytes() const;
|
| bool getInternal() const { return IsInternal; }
|
| void setInternal(bool Internal) { IsInternal = Internal; }
|
| @@ -306,6 +335,9 @@ private:
|
| /// fully committed (Preliminary=false).
|
| bool Preliminary = false;
|
|
|
| + /// Installs a created fixup, after it has been allocated.
|
| + void installFixup(AssemblerFixup *F) { Buffer.installFixup(F); }
|
| +
|
| protected:
|
| GlobalContext *Ctx;
|
| // Buffer's constructor uses the Allocator, so it needs to appear after it.
|
|
|