Revision: 13067
Author:   [email protected]
Date:     Tue Nov 27 05:27:15 2012
Log: Only fill in holes if storing the number to the double array has succeeded.

Review URL: https://chromiumcodereview.appspot.com/11299200
http://code.google.com/p/v8/source/detail?r=13067

Modified:
 /branches/bleeding_edge/src/arm/stub-cache-arm.cc
 /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc
 /branches/bleeding_edge/src/x64/stub-cache-x64.cc

=======================================
--- /branches/bleeding_edge/src/arm/stub-cache-arm.cc Mon Nov 26 07:58:27 2012 +++ /branches/bleeding_edge/src/arm/stub-cache-arm.cc Tue Nov 27 05:27:15 2012
@@ -4794,14 +4794,6 @@
            Operand(Smi::FromInt(JSArray::kPreallocatedArrayElements)));
     __ str(scratch1,
            FieldMemOperand(elements_reg, FixedDoubleArray::kLengthOffset));
-
-    __ mov(scratch1, Operand(kHoleNanLower32));
-    __ mov(scratch2, Operand(kHoleNanUpper32));
-    for (int i = 1; i < JSArray::kPreallocatedArrayElements; i++) {
-      int offset = FixedDoubleArray::OffsetOfElementAt(i);
-      __ str(scratch1, FieldMemOperand(elements_reg, offset));
- __ str(scratch2, FieldMemOperand(elements_reg, offset + kPointerSize));
-    }

     __ mov(scratch1, elements_reg);
     __ StoreNumberToDoubleElements(value_reg,
@@ -4813,6 +4805,14 @@
                                    scratch4,
                                    scratch5,
                                    &transition_elements_kind);
+
+    __ mov(scratch1, Operand(kHoleNanLower32));
+    __ mov(scratch2, Operand(kHoleNanUpper32));
+    for (int i = 1; i < JSArray::kPreallocatedArrayElements; i++) {
+      int offset = FixedDoubleArray::OffsetOfElementAt(i);
+      __ str(scratch1, FieldMemOperand(elements_reg, offset));
+ __ str(scratch2, FieldMemOperand(elements_reg, offset + kPointerSize));
+    }

     // Install the new backing store in the JSArray.
     __ str(elements_reg,
=======================================
--- /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Mon Nov 26 06:29:21 2012 +++ /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Tue Nov 27 05:27:15 2012
@@ -4359,15 +4359,15 @@
     __ mov(FieldOperand(edi, FixedDoubleArray::kLengthOffset),
            Immediate(Smi::FromInt(JSArray::kPreallocatedArrayElements)));

+    __ StoreNumberToDoubleElements(eax, edi, ecx, ebx, xmm0,
+                                   &transition_elements_kind, true);
+
     for (int i = 1; i < JSArray::kPreallocatedArrayElements; i++) {
       int offset = FixedDoubleArray::OffsetOfElementAt(i);
       __ mov(FieldOperand(edi, offset), Immediate(kHoleNanLower32));
       __ mov(FieldOperand(edi, offset + kPointerSize),
              Immediate(kHoleNanUpper32));
     }
-
-    __ StoreNumberToDoubleElements(eax, edi, ecx, ebx, xmm0,
-                                   &transition_elements_kind, true);

     // Install the new backing store in the JSArray.
     __ mov(FieldOperand(edx, JSObject::kElementsOffset), edi);
=======================================
--- /branches/bleeding_edge/src/x64/stub-cache-x64.cc Mon Nov 26 06:29:21 2012 +++ /branches/bleeding_edge/src/x64/stub-cache-x64.cc Tue Nov 27 05:27:15 2012
@@ -4107,16 +4107,16 @@
             masm->isolate()->factory()->fixed_double_array_map());
     __ Move(FieldOperand(rdi, FixedDoubleArray::kLengthOffset),
             Smi::FromInt(JSArray::kPreallocatedArrayElements));
-
- __ movq(r8, BitCast<int64_t, uint64_t>(kHoleNanInt64), RelocInfo::NONE);
-    for (int i = 1; i < JSArray::kPreallocatedArrayElements; i++) {
- __ movq(FieldOperand(rdi, FixedDoubleArray::OffsetOfElementAt(i)), r8);
-    }

     // Increment the length of the array.
     __ SmiToInteger32(rcx, rcx);
     __ StoreNumberToDoubleElements(rax, rdi, rcx, xmm0,
                                    &restore_key_transition_elements_kind);
+
+ __ movq(r8, BitCast<int64_t, uint64_t>(kHoleNanInt64), RelocInfo::NONE);
+    for (int i = 1; i < JSArray::kPreallocatedArrayElements; i++) {
+ __ movq(FieldOperand(rdi, FixedDoubleArray::OffsetOfElementAt(i)), r8);
+    }

     // Install the new backing store in the JSArray.
     __ movq(FieldOperand(rdx, JSObject::kElementsOffset), rdi);

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to