Commit fe0d2653 authored by Jakob Kummerow's avatar Jakob Kummerow Committed by Commit Bot

[cleanup] Drop ObjectSlot::Relaxed_Load(int, ...)

and Relaxed_Store(int, ...) by migrating the only call site
to using slot increment/decrement instead of offset calculations.
Also use SlotBase::location() more consistently.

Bug: v8:8238
Change-Id: I3099884a2a9e05041114205e7fb81691261afe19
Reviewed-on: https://chromium-review.googlesource.com/c/1349731Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
Commit-Queue: Jakob Kummerow <jkummerow@chromium.org>
Cr-Commit-Position: refs/heads/master@{#57852}
parent 3896c047
...@@ -1429,11 +1429,18 @@ void Heap::MoveElements(FixedArray array, int dst_index, int src_index, int len, ...@@ -1429,11 +1429,18 @@ void Heap::MoveElements(FixedArray array, int dst_index, int src_index, int len,
if (FLAG_concurrent_marking && incremental_marking()->IsMarking()) { if (FLAG_concurrent_marking && incremental_marking()->IsMarking()) {
if (dst < src) { if (dst < src) {
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
dst.Relaxed_Store(i, src.Relaxed_Load(i)); dst.Relaxed_Store(src.Relaxed_Load());
++dst;
++src;
} }
} else { } else {
for (int i = len - 1; i >= 0; i--) { // Copy backwards.
dst.Relaxed_Store(i, src.Relaxed_Load(i)); dst += len - 1;
src += len - 1;
for (int i = 0; i < len; i++) {
dst.Relaxed_Store(src.Relaxed_Load());
--dst;
--src;
} }
} }
} else { } else {
......
...@@ -18,34 +18,20 @@ namespace internal { ...@@ -18,34 +18,20 @@ namespace internal {
ObjectSlot::ObjectSlot(ObjectPtr* object) ObjectSlot::ObjectSlot(ObjectPtr* object)
: SlotBase(reinterpret_cast<Address>(&object->ptr_)) {} : SlotBase(reinterpret_cast<Address>(&object->ptr_)) {}
void ObjectSlot::store(Object* value) { void ObjectSlot::store(Object* value) { *location() = value->ptr(); }
*reinterpret_cast<Address*>(address()) = value->ptr();
}
ObjectPtr ObjectSlot::Acquire_Load() const { ObjectPtr ObjectSlot::Acquire_Load() const {
return ObjectPtr(base::AsAtomicWord::Acquire_Load(location())); return ObjectPtr(base::AsAtomicWord::Acquire_Load(location()));
} }
Object* ObjectSlot::Relaxed_Load() const { ObjectPtr ObjectSlot::Relaxed_Load() const {
Address object_ptr = base::AsAtomicWord::Relaxed_Load(location()); return ObjectPtr(base::AsAtomicWord::Relaxed_Load(location()));
return reinterpret_cast<Object*>(object_ptr);
}
Object* ObjectSlot::Relaxed_Load(int offset) const {
Address object_ptr = base::AsAtomicWord::Relaxed_Load(
reinterpret_cast<Address*>(address() + offset * kPointerSize));
return reinterpret_cast<Object*>(object_ptr);
} }
void ObjectSlot::Relaxed_Store(ObjectPtr value) const { void ObjectSlot::Relaxed_Store(ObjectPtr value) const {
base::AsAtomicWord::Relaxed_Store(location(), value->ptr()); base::AsAtomicWord::Relaxed_Store(location(), value->ptr());
} }
void ObjectSlot::Relaxed_Store(int offset, Object* value) const {
Address* addr = reinterpret_cast<Address*>(address() + offset * kPointerSize);
base::AsAtomicWord::Relaxed_Store(addr, value->ptr());
}
void ObjectSlot::Release_Store(ObjectPtr value) const { void ObjectSlot::Release_Store(ObjectPtr value) const {
base::AsAtomicWord::Release_Store(location(), value->ptr()); base::AsAtomicWord::Release_Store(location(), value->ptr());
} }
...@@ -57,17 +43,12 @@ ObjectPtr ObjectSlot::Release_CompareAndSwap(ObjectPtr old, ...@@ -57,17 +43,12 @@ ObjectPtr ObjectSlot::Release_CompareAndSwap(ObjectPtr old,
return ObjectPtr(result); return ObjectPtr(result);
} }
MaybeObject MaybeObjectSlot::operator*() { MaybeObject MaybeObjectSlot::operator*() { return MaybeObject(*location()); }
return MaybeObject(*reinterpret_cast<Address*>(address()));
}
void MaybeObjectSlot::store(MaybeObject value) { void MaybeObjectSlot::store(MaybeObject value) { *location() = value.ptr(); }
*reinterpret_cast<Address*>(address()) = value.ptr();
}
MaybeObject MaybeObjectSlot::Relaxed_Load() const { MaybeObject MaybeObjectSlot::Relaxed_Load() const {
Address object_ptr = base::AsAtomicWord::Relaxed_Load(location()); return MaybeObject(base::AsAtomicWord::Relaxed_Load(location()));
return MaybeObject(object_ptr);
} }
void MaybeObjectSlot::Release_CompareAndSwap(MaybeObject old, void MaybeObjectSlot::Release_CompareAndSwap(MaybeObject old,
...@@ -77,10 +58,10 @@ void MaybeObjectSlot::Release_CompareAndSwap(MaybeObject old, ...@@ -77,10 +58,10 @@ void MaybeObjectSlot::Release_CompareAndSwap(MaybeObject old,
} }
HeapObjectReference HeapObjectSlot::operator*() { HeapObjectReference HeapObjectSlot::operator*() {
return HeapObjectReference(*reinterpret_cast<Address*>(address())); return HeapObjectReference(*location());
} }
void HeapObjectSlot::store(HeapObjectReference value) { void HeapObjectSlot::store(HeapObjectReference value) {
*reinterpret_cast<Address*>(address()) = value.ptr(); *location() = value.ptr();
} }
} // namespace internal } // namespace internal
......
...@@ -101,10 +101,8 @@ class ObjectSlot : public SlotBase<ObjectSlot, kTaggedSize> { ...@@ -101,10 +101,8 @@ class ObjectSlot : public SlotBase<ObjectSlot, kTaggedSize> {
inline void store(Object* value); inline void store(Object* value);
inline ObjectPtr Acquire_Load() const; inline ObjectPtr Acquire_Load() const;
inline Object* Relaxed_Load() const; inline ObjectPtr Relaxed_Load() const;
inline Object* Relaxed_Load(int offset) const;
inline void Relaxed_Store(ObjectPtr value) const; inline void Relaxed_Store(ObjectPtr value) const;
inline void Relaxed_Store(int offset, Object* value) const;
inline void Release_Store(ObjectPtr value) const; inline void Release_Store(ObjectPtr value) const;
inline ObjectPtr Release_CompareAndSwap(ObjectPtr old, inline ObjectPtr Release_CompareAndSwap(ObjectPtr old,
ObjectPtr target) const; ObjectPtr target) const;
...@@ -148,9 +146,8 @@ class HeapObjectSlot : public SlotBase<HeapObjectSlot, kTaggedSize> { ...@@ -148,9 +146,8 @@ class HeapObjectSlot : public SlotBase<HeapObjectSlot, kTaggedSize> {
inline void store(HeapObjectReference value); inline void store(HeapObjectReference value);
HeapObject* ToHeapObject() { HeapObject* ToHeapObject() {
DCHECK((*reinterpret_cast<Address*>(address()) & kHeapObjectTagMask) == DCHECK((*location() & kHeapObjectTagMask) == kHeapObjectTag);
kHeapObjectTag); return reinterpret_cast<HeapObject*>(*location());
return *reinterpret_cast<HeapObject**>(address());
} }
void StoreHeapObject(HeapObject* value) { void StoreHeapObject(HeapObject* value) {
......
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