diff options
author | 2015-05-29 15:50:18 +0100 | |
---|---|---|
committer | 2015-06-15 15:13:28 +0100 | |
commit | f38caa68cce551fb153dff37d01db518e58ed00f (patch) | |
tree | 723612f20666f429b7c67321f0353d57425b1c63 /compiler/utils/assembler.h | |
parent | bd8c725e465cc7f44062745a6f2b73248f5159ed (diff) |
ART: Implement literal pool for arm, fix branch fixup.
Change-Id: Iecc91418bb4ee1c957f42fefb737d0ee2ba960e7
Diffstat (limited to 'compiler/utils/assembler.h')
-rw-r--r-- | compiler/utils/assembler.h | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/compiler/utils/assembler.h b/compiler/utils/assembler.h index 672e1503be..0381af3956 100644 --- a/compiler/utils/assembler.h +++ b/compiler/utils/assembler.h @@ -199,13 +199,18 @@ class AssemblerBuffer { *reinterpret_cast<T*>(contents_ + position) = value; } - void Move(size_t newposition, size_t oldposition) { - CHECK(HasEnsuredCapacity()); - // Move the contents of the buffer from oldposition to - // newposition by nbytes. - size_t nbytes = Size() - oldposition; - memmove(contents_ + newposition, contents_ + oldposition, nbytes); - cursor_ += newposition - oldposition; + void Resize(size_t new_size) { + if (new_size > Capacity()) { + ExtendCapacity(new_size); + } + cursor_ = contents_ + new_size; + } + + void Move(size_t newposition, size_t oldposition, size_t size) { + // Move a chunk of the buffer from oldposition to newposition. + DCHECK_LE(oldposition + size, Size()); + DCHECK_LE(newposition + size, Size()); + memmove(contents_ + newposition, contents_ + oldposition, size); } // Emit a fixup at the current location. @@ -350,7 +355,7 @@ class AssemblerBuffer { return data + capacity - kMinimumGap; } - void ExtendCapacity(); + void ExtendCapacity(size_t min_capacity = 0u); friend class AssemblerFixup; }; @@ -376,8 +381,8 @@ class Assembler { public: static Assembler* Create(InstructionSet instruction_set); - // Emit slow paths queued during assembly - virtual void EmitSlowPaths() { buffer_.EmitSlowPaths(this); } + // Finalize the code; emit slow paths, fixup branches, add literal pool, etc. + virtual void FinalizeCode() { buffer_.EmitSlowPaths(this); } // Size of generated code virtual size_t CodeSize() const { return buffer_.Size(); } |