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