| Index: src/code-stub-assembler.cc
 | 
| diff --git a/src/code-stub-assembler.cc b/src/code-stub-assembler.cc
 | 
| index e45e66d40069f63bf06c1ee365b9f3bc47253de5..53f52b504d6eef27da6d564f5dfee2e5e32071c6 100644
 | 
| --- a/src/code-stub-assembler.cc
 | 
| +++ b/src/code-stub-assembler.cc
 | 
| @@ -726,8 +726,49 @@ Node* CodeStubAssembler::AllocateJSArray(ElementsKind kind, Node* array_map,
 | 
|        }
 | 
|      }
 | 
|    } else {
 | 
| -    // TODO(danno): Add a loop for initialization
 | 
| -    UNIMPLEMENTED();
 | 
| +    Variable current(this, MachineRepresentation::kTagged);
 | 
| +    Label test(this);
 | 
| +    Label decrement(this, ¤t);
 | 
| +    Label done(this);
 | 
| +    Node* limit = IntPtrAdd(elements, IntPtrConstant(first_element_offset));
 | 
| +    current.Bind(
 | 
| +        IntPtrAdd(limit, ElementOffsetFromIndex(capacity_node, kind, mode, 0)));
 | 
| +
 | 
| +    Branch(WordEqual(current.value(), limit), &done, &decrement);
 | 
| +
 | 
| +    Bind(&decrement);
 | 
| +    current.Bind(IntPtrSub(
 | 
| +        current.value(),
 | 
| +        Int32Constant(IsFastDoubleElementsKind(kind) ? kDoubleSize
 | 
| +                                                     : kPointerSize)));
 | 
| +    if (is_double) {
 | 
| +      // Don't use doubles to store the hole double, since manipulating the
 | 
| +      // signaling NaN used for the hole in C++, e.g. with bit_cast, will
 | 
| +      // change its value on ia32 (the x87 stack is used to return values
 | 
| +      // and stores to the stack silently clear the signalling bit).
 | 
| +      //
 | 
| +      // TODO(danno): When we have a Float32/Float64 wrapper class that
 | 
| +      // preserves double bits during manipulation, remove this code/change
 | 
| +      // this to an indexed Float64 store.
 | 
| +      if (Is64()) {
 | 
| +        StoreNoWriteBarrier(MachineRepresentation::kWord64, current.value(),
 | 
| +                            double_hole);
 | 
| +      } else {
 | 
| +        StoreNoWriteBarrier(MachineRepresentation::kWord32, current.value(),
 | 
| +                            double_hole);
 | 
| +        StoreNoWriteBarrier(
 | 
| +            MachineRepresentation::kWord32,
 | 
| +            IntPtrAdd(current.value(), Int32Constant(kPointerSize)),
 | 
| +            double_hole);
 | 
| +      }
 | 
| +    } else {
 | 
| +      StoreNoWriteBarrier(MachineRepresentation::kTagged, current.value(),
 | 
| +                          hole);
 | 
| +    }
 | 
| +    Node* compare = WordNotEqual(current.value(), limit);
 | 
| +    Branch(compare, &decrement, &done);
 | 
| +
 | 
| +    Bind(&done);
 | 
|    }
 | 
|  
 | 
|    return array;
 | 
| 
 |