| Index: src/heap/mark-compact.cc
|
| diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc
|
| index 0255dfca96b438fc26fc914166216c93cb278d40..b56af23c4931dbf50e19ede19870a6817ed48732 100644
|
| --- a/src/heap/mark-compact.cc
|
| +++ b/src/heap/mark-compact.cc
|
| @@ -2779,7 +2779,12 @@ void MarkCompactCollector::MigrateObjectTagged(HeapObject* dst, HeapObject* src,
|
|
|
| void MarkCompactCollector::MigrateObjectMixed(HeapObject* dst, HeapObject* src,
|
| int size) {
|
| - if (FLAG_unbox_double_fields) {
|
| + if (src->IsFixedTypedArrayBase()) {
|
| + heap()->MoveBlock(dst->address(), src->address(), size);
|
| + Address base_pointer_slot =
|
| + dst->address() + FixedTypedArrayBase::kBasePointerOffset;
|
| + RecordMigratedSlot(Memory::Object_at(base_pointer_slot), base_pointer_slot);
|
| + } else if (FLAG_unbox_double_fields) {
|
| Address dst_addr = dst->address();
|
| Address src_addr = src->address();
|
| Address src_slot = src_addr;
|
| @@ -3198,7 +3203,10 @@ bool MarkCompactCollector::IsSlotInLiveObject(Address slot) {
|
| }
|
|
|
| case HeapObjectContents::kMixedValues: {
|
| - if (FLAG_unbox_double_fields) {
|
| + if (object->IsFixedTypedArrayBase()) {
|
| + return static_cast<int>(slot - object->address()) ==
|
| + FixedTypedArrayBase::kBasePointerOffset;
|
| + } else if (FLAG_unbox_double_fields) {
|
| // Filter out slots that happen to point to unboxed double fields.
|
| LayoutDescriptorHelper helper(object->map());
|
| DCHECK(!helper.all_fields_tagged());
|
|
|