summaryrefslogtreecommitdiff
path: root/compiler/utils/assembler.h
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2015-05-29 15:50:18 +0100
committer Vladimir Marko <vmarko@google.com> 2015-06-15 15:13:28 +0100
commitf38caa68cce551fb153dff37d01db518e58ed00f (patch)
tree723612f20666f429b7c67321f0353d57425b1c63 /compiler/utils/assembler.h
parentbd8c725e465cc7f44062745a6f2b73248f5159ed (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.h25
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(); }