| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index 3939921bf7304378b13540fc4a1fda3f426216b3..ff5c9c459fa3b6bc6ead23defcc4dadece260552 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -134,6 +134,14 @@ PropertyDetails PropertyDetails::AsDeleted() const {
|
| RELEASE_WRITE_FIELD(this, offset, Smi::FromInt(value)); \
|
| }
|
|
|
| +#define NOBARRIER_SMI_ACCESSORS(holder, name, offset) \
|
| + int holder::nobarrier_##name() { \
|
| + Object* value = NOBARRIER_READ_FIELD(this, offset); \
|
| + return Smi::cast(value)->value(); \
|
| + } \
|
| + void holder::nobarrier_set_##name(int value) { \
|
| + NOBARRIER_WRITE_FIELD(this, offset, Smi::FromInt(value)); \
|
| + }
|
|
|
| #define BOOL_GETTER(holder, field, name, offset) \
|
| bool holder::name() { \
|
| @@ -1108,7 +1116,7 @@ MaybeObject* Object::GetProperty(Name* key, PropertyAttributes* attributes) {
|
| reinterpret_cast<Object*>( \
|
| Acquire_Load(reinterpret_cast<AtomicWord*>(FIELD_ADDR(p, offset))))
|
|
|
| -#define NO_BARRIER_READ_FIELD(p, offset) \
|
| +#define NOBARRIER_READ_FIELD(p, offset) \
|
| reinterpret_cast<Object*>( \
|
| NoBarrier_Load(reinterpret_cast<AtomicWord*>(FIELD_ADDR(p, offset))))
|
|
|
| @@ -1119,7 +1127,7 @@ MaybeObject* Object::GetProperty(Name* key, PropertyAttributes* attributes) {
|
| Release_Store(reinterpret_cast<AtomicWord*>(FIELD_ADDR(p, offset)), \
|
| reinterpret_cast<AtomicWord>(value));
|
|
|
| -#define NO_BARRIER_WRITE_FIELD(p, offset, value) \
|
| +#define NOBARRIER_WRITE_FIELD(p, offset, value) \
|
| NoBarrier_Store(reinterpret_cast<AtomicWord*>(FIELD_ADDR(p, offset)), \
|
| reinterpret_cast<AtomicWord>(value));
|
|
|
| @@ -1388,6 +1396,11 @@ void HeapObject::synchronized_set_map(Map* value) {
|
| }
|
|
|
|
|
| +void HeapObject::synchronized_set_map_no_write_barrier(Map* value) {
|
| + synchronized_set_map_word(MapWord::FromMap(value));
|
| +}
|
| +
|
| +
|
| // Unsafe accessor omitting write barrier.
|
| void HeapObject::set_map_no_write_barrier(Map* value) {
|
| set_map_word(MapWord::FromMap(value));
|
| @@ -1396,12 +1409,12 @@ void HeapObject::set_map_no_write_barrier(Map* value) {
|
|
|
| MapWord HeapObject::map_word() {
|
| return MapWord(
|
| - reinterpret_cast<uintptr_t>(NO_BARRIER_READ_FIELD(this, kMapOffset)));
|
| + reinterpret_cast<uintptr_t>(NOBARRIER_READ_FIELD(this, kMapOffset)));
|
| }
|
|
|
|
|
| void HeapObject::set_map_word(MapWord map_word) {
|
| - NO_BARRIER_WRITE_FIELD(
|
| + NOBARRIER_WRITE_FIELD(
|
| this, kMapOffset, reinterpret_cast<Object*>(map_word.value_));
|
| }
|
|
|
| @@ -2989,6 +3002,7 @@ SMI_ACCESSORS(FixedArrayBase, length, kLengthOffset)
|
| SYNCHRONIZED_SMI_ACCESSORS(FixedArrayBase, length, kLengthOffset)
|
|
|
| SMI_ACCESSORS(FreeSpace, size, kSizeOffset)
|
| +NOBARRIER_SMI_ACCESSORS(FreeSpace, size, kSizeOffset)
|
|
|
| SMI_ACCESSORS(String, length, kLengthOffset)
|
| SYNCHRONIZED_SMI_ACCESSORS(String, length, kLengthOffset)
|
| @@ -4016,7 +4030,7 @@ int HeapObject::SizeFromMap(Map* map) {
|
| return reinterpret_cast<ByteArray*>(this)->ByteArraySize();
|
| }
|
| if (instance_type == FREE_SPACE_TYPE) {
|
| - return reinterpret_cast<FreeSpace*>(this)->size();
|
| + return reinterpret_cast<FreeSpace*>(this)->nobarrier_size();
|
| }
|
| if (instance_type == STRING_TYPE ||
|
| instance_type == INTERNALIZED_STRING_TYPE) {
|
|
|