| Index: src/arm/assembler-arm.cc
 | 
| ===================================================================
 | 
| --- src/arm/assembler-arm.cc	(revision 4448)
 | 
| +++ src/arm/assembler-arm.cc	(working copy)
 | 
| @@ -306,6 +306,7 @@
 | 
|    reloc_info_writer.Reposition(buffer_ + buffer_size, pc_);
 | 
|    num_prinfo_ = 0;
 | 
|    next_buffer_check_ = 0;
 | 
| +  const_pool_blocked_nesting_ = 0;
 | 
|    no_const_pool_before_ = 0;
 | 
|    last_const_pool_end_ = 0;
 | 
|    last_bound_pos_ = 0;
 | 
| @@ -1726,11 +1727,6 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void Assembler::BlockConstPoolFor(int instructions) {
 | 
| -  BlockConstPoolBefore(pc_offset() + instructions * kInstrSize);
 | 
| -}
 | 
| -
 | 
| -
 | 
|  // Debugging.
 | 
|  void Assembler::RecordJSReturn() {
 | 
|    WriteRecordedPositions();
 | 
| @@ -1894,12 +1890,17 @@
 | 
|  
 | 
|    // However, some small sequences of instructions must not be broken up by the
 | 
|    // insertion of a constant pool; such sequences are protected by setting
 | 
| -  // no_const_pool_before_, which is checked here. Also, recursive calls to
 | 
| -  // CheckConstPool are blocked by no_const_pool_before_.
 | 
| -  if (pc_offset() < no_const_pool_before_) {
 | 
| +  // either const_pool_blocked_nesting_ or no_const_pool_before_, which are
 | 
| +  // both checked here. Also, recursive calls to CheckConstPool are blocked by
 | 
| +  // no_const_pool_before_.
 | 
| +  if (const_pool_blocked_nesting_ > 0 || pc_offset() < no_const_pool_before_) {
 | 
|      // Emission is currently blocked; make sure we try again as soon as
 | 
|      // possible.
 | 
| -    next_buffer_check_ = no_const_pool_before_;
 | 
| +    if (const_pool_blocked_nesting_ > 0) {
 | 
| +      next_buffer_check_ = pc_offset() + kInstrSize;
 | 
| +    } else {
 | 
| +      next_buffer_check_ = no_const_pool_before_;
 | 
| +    }
 | 
|  
 | 
|      // Something is wrong if emission is forced and blocked at the same time.
 | 
|      ASSERT(!force_emit);
 | 
| 
 |