| Index: src/heap/spaces.cc | 
| diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc | 
| index 23323a4a7daa224fd8f862ec9e4d45b7aa87fa66..f0e2cf631489e0240691f8580fb863b46272fcc9 100644 | 
| --- a/src/heap/spaces.cc | 
| +++ b/src/heap/spaces.cc | 
| @@ -1458,19 +1458,23 @@ bool NewSpace::AddFreshPage() { | 
| } | 
|  | 
|  | 
| -AllocationResult NewSpace::SlowAllocateRaw(int size_in_bytes) { | 
| +AllocationResult NewSpace::SlowAllocateRaw(int size_in_bytes, | 
| +                                           bool double_aligned) { | 
| Address old_top = allocation_info_.top(); | 
| Address high = to_space_.page_high(); | 
| if (allocation_info_.limit() < high) { | 
| // Either the limit has been lowered because linear allocation was disabled | 
| // or because incremental marking wants to get a chance to do a step. Set | 
| // the new limit accordingly. | 
| -    Address new_top = old_top + size_in_bytes; | 
| +    int aligned_size = size_in_bytes; | 
| +    aligned_size += (double_aligned ? kPointerSize : 0); | 
| +    Address new_top = old_top + aligned_size; | 
| int bytes_allocated = static_cast<int>(new_top - top_on_previous_step_); | 
| heap()->incremental_marking()->Step(bytes_allocated, | 
| IncrementalMarking::GC_VIA_STACK_GUARD); | 
| -    UpdateInlineAllocationLimit(size_in_bytes); | 
| +    UpdateInlineAllocationLimit(aligned_size); | 
| top_on_previous_step_ = new_top; | 
| +    if (double_aligned) return AllocateRawDoubleAligned(size_in_bytes); | 
| return AllocateRaw(size_in_bytes); | 
| } else if (AddFreshPage()) { | 
| // Switched to new page. Try allocating again. | 
| @@ -1478,6 +1482,7 @@ AllocationResult NewSpace::SlowAllocateRaw(int size_in_bytes) { | 
| heap()->incremental_marking()->Step(bytes_allocated, | 
| IncrementalMarking::GC_VIA_STACK_GUARD); | 
| top_on_previous_step_ = to_space_.page_low(); | 
| +    if (double_aligned) return AllocateRawDoubleAligned(size_in_bytes); | 
| return AllocateRaw(size_in_bytes); | 
| } else { | 
| return AllocationResult::Retry(); | 
|  |