| Index: src/heap/store-buffer.cc | 
| diff --git a/src/heap/store-buffer.cc b/src/heap/store-buffer.cc | 
| index eae3594a18a38b7e1b79803d3d72a9fedd55b278..aac68116ce840f3ca72715c41aaa3809ac028173 100644 | 
| --- a/src/heap/store-buffer.cc | 
| +++ b/src/heap/store-buffer.cc | 
| @@ -512,24 +512,28 @@ void StoreBuffer::IteratePointersToNewSpace(ObjectSlotCallback slot_callback, | 
| bool may_contain_raw_values = heap_object->MayContainRawValues(); | 
| if (!may_contain_raw_values) { | 
| Address obj_address = heap_object->address(); | 
| -                Address start_address = obj_address + HeapObject::kHeaderSize; | 
| -                Address end_address = obj_address + heap_object->Size(); | 
| +                const int start_offset = HeapObject::kHeaderSize; | 
| +                const int end_offset = heap_object->Size(); | 
| #if V8_DOUBLE_FIELDS_UNBOXING | 
| -                InobjectPropertiesHelper helper(heap_object->map()); | 
| +                LayoutDescriptorHelper helper(heap_object->map()); | 
| bool has_only_tagged_fields = helper.all_fields_tagged(); | 
|  | 
| if (!has_only_tagged_fields) { | 
| -                  for (Address slot = start_address; slot < end_address; | 
| -                       slot += kPointerSize) { | 
| -                    if (helper.IsTagged(static_cast<int>(slot - obj_address))) { | 
| -                      // TODO(ishell): call this once for contiguous region | 
| -                      // of tagged fields. | 
| -                      FindPointersToNewSpaceInRegion(slot, slot + kPointerSize, | 
| -                                                     slot_callback, clear_maps); | 
| +                  for (int offset = start_offset; offset < end_offset;) { | 
| +                    int end_of_region_offset; | 
| +                    if (helper.IsTagged(offset, end_offset, | 
| +                                        &end_of_region_offset)) { | 
| +                      FindPointersToNewSpaceInRegion( | 
| +                          obj_address + offset, | 
| +                          obj_address + end_of_region_offset, slot_callback, | 
| +                          clear_maps); | 
| } | 
| +                    offset = end_of_region_offset; | 
| } | 
| } else { | 
| #endif | 
| +                  Address start_address = obj_address + start_offset; | 
| +                  Address end_address = obj_address + end_offset; | 
| // Object has only tagged fields. | 
| FindPointersToNewSpaceInRegion(start_address, end_address, | 
| slot_callback, clear_maps); | 
|  |