Commit 2ce0e87f authored by jochen's avatar jochen Committed by Commit bot

Use FixedTypedArrayBase's body descriptor for static visiting

BUG=none
R=ishell@chromium.org,hpayer@chromium.org
LOG=n

Review URL: https://codereview.chromium.org/1488053002

Cr-Commit-Position: refs/heads/master@{#32618}
parent f0f707d8
...@@ -44,8 +44,15 @@ void StaticNewSpaceVisitor<StaticVisitor>::Initialize() { ...@@ -44,8 +44,15 @@ void StaticNewSpaceVisitor<StaticVisitor>::Initialize() {
FixedArray::BodyDescriptor, int>::Visit); FixedArray::BodyDescriptor, int>::Visit);
table_.Register(kVisitFixedDoubleArray, &VisitFixedDoubleArray); table_.Register(kVisitFixedDoubleArray, &VisitFixedDoubleArray);
table_.Register(kVisitFixedTypedArray, &VisitFixedTypedArray); table_.Register(
table_.Register(kVisitFixedFloat64Array, &VisitFixedTypedArray); kVisitFixedTypedArray,
&FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
int>::Visit);
table_.Register(
kVisitFixedFloat64Array,
&FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
int>::Visit);
table_.Register( table_.Register(
kVisitNativeContext, kVisitNativeContext,
...@@ -135,9 +142,15 @@ void StaticMarkingVisitor<StaticVisitor>::Initialize() { ...@@ -135,9 +142,15 @@ void StaticMarkingVisitor<StaticVisitor>::Initialize() {
table_.Register(kVisitFixedDoubleArray, &DataObjectVisitor::Visit); table_.Register(kVisitFixedDoubleArray, &DataObjectVisitor::Visit);
table_.Register(kVisitFixedTypedArray, &DataObjectVisitor::Visit); table_.Register(
kVisitFixedTypedArray,
&FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
void>::Visit);
table_.Register(kVisitFixedFloat64Array, &DataObjectVisitor::Visit); table_.Register(
kVisitFixedFloat64Array,
&FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
void>::Visit);
table_.Register(kVisitNativeContext, &VisitNativeContext); table_.Register(kVisitNativeContext, &VisitNativeContext);
......
...@@ -248,7 +248,9 @@ class StaticNewSpaceVisitor : public StaticVisitorBase { ...@@ -248,7 +248,9 @@ class StaticNewSpaceVisitor : public StaticVisitorBase {
INLINE(static void VisitPointers(Heap* heap, HeapObject* object, INLINE(static void VisitPointers(Heap* heap, HeapObject* object,
Object** start, Object** end)) { Object** start, Object** end)) {
for (Object** p = start; p < end; p++) StaticVisitor::VisitPointer(heap, p); for (Object** p = start; p < end; p++) {
StaticVisitor::VisitPointer(heap, object, p);
}
} }
// Although we are using the JSFunction body descriptor which does not // Although we are using the JSFunction body descriptor which does not
...@@ -269,10 +271,6 @@ class StaticNewSpaceVisitor : public StaticVisitorBase { ...@@ -269,10 +271,6 @@ class StaticNewSpaceVisitor : public StaticVisitorBase {
return FixedDoubleArray::SizeFor(length); return FixedDoubleArray::SizeFor(length);
} }
INLINE(static int VisitFixedTypedArray(Map* map, HeapObject* object)) {
return reinterpret_cast<FixedTypedArrayBase*>(object)->size();
}
INLINE(static int VisitJSObject(Map* map, HeapObject* object)) { INLINE(static int VisitJSObject(Map* map, HeapObject* object)) {
return JSObjectVisitor::Visit(map, object); return JSObjectVisitor::Visit(map, object);
} }
......
...@@ -38,7 +38,8 @@ void Scavenger::ScavengeObject(HeapObject** p, HeapObject* object) { ...@@ -38,7 +38,8 @@ void Scavenger::ScavengeObject(HeapObject** p, HeapObject* object) {
// static // static
void StaticScavengeVisitor::VisitPointer(Heap* heap, Object** p) { void StaticScavengeVisitor::VisitPointer(Heap* heap, HeapObject* obj,
Object** p) {
Object* object = *p; Object* object = *p;
if (!heap->InNewSpace(object)) return; if (!heap->InNewSpace(object)) return;
Scavenger::ScavengeObject(reinterpret_cast<HeapObject**>(p), Scavenger::ScavengeObject(reinterpret_cast<HeapObject**>(p),
......
...@@ -267,28 +267,16 @@ class ScavengingVisitor : public StaticVisitorBase { ...@@ -267,28 +267,16 @@ class ScavengingVisitor : public StaticVisitorBase {
static inline void EvacuateFixedTypedArray(Map* map, HeapObject** slot, static inline void EvacuateFixedTypedArray(Map* map, HeapObject** slot,
HeapObject* object) { HeapObject* object) {
int object_size = reinterpret_cast<FixedTypedArrayBase*>(object)->size(); int object_size = reinterpret_cast<FixedTypedArrayBase*>(object)->size();
EvacuateObject<DATA_OBJECT, kWordAligned>(map, slot, object, object_size); EvacuateObject<POINTER_OBJECT, kWordAligned>(map, slot, object,
object_size);
MapWord map_word = object->map_word();
DCHECK(map_word.IsForwardingAddress());
FixedTypedArrayBase* target =
reinterpret_cast<FixedTypedArrayBase*>(map_word.ToForwardingAddress());
if (target->base_pointer() != Smi::FromInt(0))
target->set_base_pointer(target, SKIP_WRITE_BARRIER);
} }
static inline void EvacuateFixedFloat64Array(Map* map, HeapObject** slot, static inline void EvacuateFixedFloat64Array(Map* map, HeapObject** slot,
HeapObject* object) { HeapObject* object) {
int object_size = reinterpret_cast<FixedFloat64Array*>(object)->size(); int object_size = reinterpret_cast<FixedFloat64Array*>(object)->size();
EvacuateObject<DATA_OBJECT, kDoubleAligned>(map, slot, object, object_size); EvacuateObject<POINTER_OBJECT, kDoubleAligned>(map, slot, object,
object_size);
MapWord map_word = object->map_word();
DCHECK(map_word.IsForwardingAddress());
FixedTypedArrayBase* target =
reinterpret_cast<FixedTypedArrayBase*>(map_word.ToForwardingAddress());
if (target->base_pointer() != Smi::FromInt(0))
target->set_base_pointer(target, SKIP_WRITE_BARRIER);
} }
......
...@@ -63,7 +63,7 @@ class ScavengeVisitor : public ObjectVisitor { ...@@ -63,7 +63,7 @@ class ScavengeVisitor : public ObjectVisitor {
class StaticScavengeVisitor class StaticScavengeVisitor
: public StaticNewSpaceVisitor<StaticScavengeVisitor> { : public StaticNewSpaceVisitor<StaticScavengeVisitor> {
public: public:
static inline void VisitPointer(Heap* heap, Object** p); static inline void VisitPointer(Heap* heap, HeapObject* object, Object** p);
}; };
} // namespace internal } // namespace internal
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment