| Index: src/ia32/virtual-frame-ia32.cc
 | 
| ===================================================================
 | 
| --- src/ia32/virtual-frame-ia32.cc	(revision 3519)
 | 
| +++ src/ia32/virtual-frame-ia32.cc	(working copy)
 | 
| @@ -513,13 +513,33 @@
 | 
|      Handle<Object> undefined = Factory::undefined_value();
 | 
|      FrameElement initial_value =
 | 
|          FrameElement::ConstantElement(undefined, FrameElement::SYNCED);
 | 
| -    Result temp = cgen()->allocator()->Allocate();
 | 
| -    ASSERT(temp.is_valid());
 | 
| -    __ Set(temp.reg(), Immediate(undefined));
 | 
| +    if (count == 1) {
 | 
| +      __ push(Immediate(undefined));
 | 
| +    } else if (count < kLocalVarBound) {
 | 
| +      // For less locals the unrolled loop is more compact.
 | 
| +      Result temp = cgen()->allocator()->Allocate();
 | 
| +      ASSERT(temp.is_valid());
 | 
| +      __ Set(temp.reg(), Immediate(undefined));
 | 
| +      for (int i = 0; i < count; i++) {
 | 
| +        __ push(temp.reg());
 | 
| +      }
 | 
| +    } else {
 | 
| +      // For more locals a loop in generated code is more compact.
 | 
| +      Label alloc_locals_loop;
 | 
| +      Result cnt = cgen()->allocator()->Allocate();
 | 
| +      Result tmp = cgen()->allocator()->Allocate();
 | 
| +      ASSERT(cnt.is_valid());
 | 
| +      ASSERT(tmp.is_valid());
 | 
| +      __ mov(cnt.reg(), Immediate(count));
 | 
| +      __ mov(tmp.reg(), Immediate(undefined));
 | 
| +      __ bind(&alloc_locals_loop);
 | 
| +      __ push(tmp.reg());
 | 
| +      __ dec(cnt.reg());
 | 
| +      __ j(not_zero, &alloc_locals_loop);
 | 
| +    }
 | 
|      for (int i = 0; i < count; i++) {
 | 
|        elements_.Add(initial_value);
 | 
|        stack_pointer_++;
 | 
| -      __ push(temp.reg());
 | 
|      }
 | 
|    }
 | 
|  }
 | 
| 
 |