Index: src/ia32/codegen-ia32.cc |
=================================================================== |
--- src/ia32/codegen-ia32.cc (revision 11348) |
+++ src/ia32/codegen-ia32.cc (working copy) |
@@ -397,9 +397,25 @@ |
// Allocate new FixedDoubleArray. |
// edx: receiver |
// edi: length of source FixedArray (smi-tagged) |
- __ lea(esi, Operand(edi, times_4, FixedDoubleArray::kHeaderSize)); |
+ __ lea(esi, Operand(edi, |
+ times_4, |
+ FixedDoubleArray::kHeaderSize + kPointerSize)); |
__ AllocateInNewSpace(esi, eax, ebx, no_reg, &gc_required, TAG_OBJECT); |
+ Label aligned, aligned_done; |
+ __ test(eax, Immediate(kDoubleAlignmentMask - kHeapObjectTag)); |
+ __ j(zero, &aligned, Label::kNear); |
+ __ mov(FieldOperand(eax, 0), |
+ Immediate(masm->isolate()->factory()->one_pointer_filler_map())); |
+ __ add(eax, Immediate(kPointerSize)); |
+ __ jmp(&aligned_done); |
+ |
+ __ bind(&aligned); |
+ __ mov(Operand(eax, esi, times_1, -kPointerSize-1), |
+ Immediate(masm->isolate()->factory()->one_pointer_filler_map())); |
+ |
+ __ bind(&aligned_done); |
+ |
// eax: destination FixedDoubleArray |
// edi: number of elements |
// edx: receiver |