ARM64: Fix EnsureSpace to not emit pools.
authoralexandre.rames@arm.com <alexandre.rames@arm.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 14 Apr 2014 11:04:46 +0000 (11:04 +0000)
committeralexandre.rames@arm.com <alexandre.rames@arm.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 14 Apr 2014 11:04:46 +0000 (11:04 +0000)
The EnsureSpace scope must not trigger any code emission, so it should only grow
the buffer, and not check for pools.

R=ulan@chromium.org

Review URL: https://codereview.chromium.org/230223005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20714 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/arm64/assembler-arm64-inl.h
src/arm64/assembler-arm64.h

index b56e3ed..3d12ac0 100644 (file)
@@ -1199,11 +1199,16 @@ void Assembler::LoadRelocated(const CPURegister& rt, const Operand& operand) {
 }
 
 
-inline void Assembler::CheckBuffer() {
+inline void Assembler::CheckBufferSpace() {
   ASSERT(pc_ < (buffer_ + buffer_size_));
   if (buffer_space() < kGap) {
     GrowBuffer();
   }
+}
+
+
+inline void Assembler::CheckBuffer() {
+  CheckBufferSpace();
   if (pc_offset() >= next_veneer_pool_check_) {
     CheckVeneerPool(false, true);
   }
index a5784a6..391a900 100644 (file)
@@ -2040,6 +2040,7 @@ class Assembler : public AssemblerBase {
   }
 
   void GrowBuffer();
+  void CheckBufferSpace();
   void CheckBuffer();
 
   // Pc offset of the next constant pool check.
@@ -2238,7 +2239,7 @@ class PatchingAssembler : public Assembler {
 class EnsureSpace BASE_EMBEDDED {
  public:
   explicit EnsureSpace(Assembler* assembler) {
-    assembler->CheckBuffer();
+    assembler->CheckBufferSpace();
   }
 };