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()); |