| 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);
|
|
|