Chromium Code Reviews| Index: src/arm/codegen-arm.cc |
| diff --git a/src/arm/codegen-arm.cc b/src/arm/codegen-arm.cc |
| index cfc9dfec4dc6a3e1d905a3182ceb4635887a9596..be32ed4418eccc6742498e604b144166166f7b91 100644 |
| --- a/src/arm/codegen-arm.cc |
| +++ b/src/arm/codegen-arm.cc |
| @@ -562,7 +562,7 @@ void ElementsTransitionGenerator::GenerateDoubleToObject( |
| // -- r3 : target map, scratch for subsequent call |
| // -- r4 : scratch (elements) |
| // ----------------------------------- |
| - Label entry, loop, convert_hole, gc_required, only_change_map; |
| + Label entry, loop, convert_hole, gc_required, gc_cleanup, only_change_map; |
| if (mode == TRACK_ALLOCATION_SITE) { |
| __ JumpIfJSArrayHasAllocationMemento(r2, r4, fail); |
| @@ -604,6 +604,15 @@ void ElementsTransitionGenerator::GenerateDoubleToObject( |
| // r9: heap number map |
| __ b(&entry); |
| + __ bind(&gc_cleanup); |
| +#ifdef VERIFY_HEAP |
| + // Make sure new space is iterable if we are verifying the heap. |
| + __ mov(r0, Operand(Smi::FromInt(0))); |
|
Hannes Payer (out of office)
2014/04/08 14:19:27
In allocation folding, we store the one_pointer_fi
Jarin
2014/04/08 21:04:16
Replaced with one_pointer_filler_map (although I a
|
| + __ str(r0, MemOperand(r3, 4, PostIndex)); |
| + __ cmp(r3, r5); |
| + __ b(lt, &gc_cleanup); |
| +#endif |
| + |
| // Call into runtime if GC is required. |
| __ bind(&gc_required); |
| __ Pop(r3, r2, r1, r0); |
| @@ -618,7 +627,7 @@ void ElementsTransitionGenerator::GenerateDoubleToObject( |
| __ b(eq, &convert_hole); |
| // Non-hole double, copy value into a heap number. |
| - __ AllocateHeapNumber(r2, r0, lr, r9, &gc_required); |
| + __ AllocateHeapNumber(r2, r0, lr, r9, &gc_cleanup); |
| // r2: new heap number |
| __ ldr(r0, MemOperand(r4, 12, NegOffset)); |
| __ Strd(r0, r1, FieldMemOperand(r2, HeapNumber::kValueOffset)); |