| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 9d19b710fe9c5d274156b09edfeda24bd6dff360..9dd8baf8c1d64b707a4d98898a618fa88531210f 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -6035,6 +6035,8 @@ class HObjectAccess FINAL {
|
| return ExistingInobjectPropertyField::decode(value_);
|
| }
|
|
|
| + inline bool read_barrier() const { return ReadBarrierField::decode(value_); }
|
| +
|
| inline HObjectAccess WithRepresentation(Representation representation) {
|
| return HObjectAccess(portion(), offset(), representation, name(),
|
| immutable(), existing_inobject_property());
|
| @@ -6201,16 +6203,10 @@ class HObjectAccess FINAL {
|
| Representation::UInteger16());
|
| }
|
|
|
| - static HObjectAccess ForPropertyCellValue() {
|
| - return HObjectAccess(kInobject, PropertyCell::kValueOffset);
|
| - }
|
| -
|
| - static HObjectAccess ForCellValue() {
|
| - return HObjectAccess(kInobject, Cell::kValueOffset);
|
| - }
|
| -
|
| static HObjectAccess ForWeakCellValue() {
|
| - return HObjectAccess(kInobject, WeakCell::kValueOffset);
|
| + return HObjectAccess(
|
| + kInobject, WeakCell::kValueOffsetDontForgetTheReadBarrier,
|
| + Representation::Tagged(), Handle<String>::null(), false, true, true);
|
| }
|
|
|
| static HObjectAccess ForAllocationMementoSite() {
|
| @@ -6384,15 +6380,16 @@ class HObjectAccess FINAL {
|
| HObjectAccess(Portion portion, int offset,
|
| Representation representation = Representation::Tagged(),
|
| Handle<String> name = Handle<String>::null(),
|
| - bool immutable = false,
|
| - bool existing_inobject_property = true)
|
| - : value_(PortionField::encode(portion) |
|
| - RepresentationField::encode(representation.kind()) |
|
| - ImmutableField::encode(immutable ? 1 : 0) |
|
| - ExistingInobjectPropertyField::encode(
|
| - existing_inobject_property ? 1 : 0) |
|
| - OffsetField::encode(offset)),
|
| - name_(name) {
|
| + bool immutable = false, bool existing_inobject_property = true,
|
| + bool read_barrier = false)
|
| + : value_(PortionField::encode(portion) |
|
| + RepresentationField::encode(representation.kind()) |
|
| + ImmutableField::encode(immutable ? 1 : 0) |
|
| + ExistingInobjectPropertyField::encode(
|
| + existing_inobject_property ? 1 : 0) |
|
| + ReadBarrierField::encode(read_barrier ? 1 : 0) |
|
| + OffsetField::encode(offset)),
|
| + name_(name) {
|
| // assert that the fields decode correctly
|
| DCHECK(this->offset() == offset);
|
| DCHECK(this->portion() == portion);
|
| @@ -6406,7 +6403,8 @@ class HObjectAccess FINAL {
|
| class RepresentationField : public BitField<Representation::Kind, 3, 4> {};
|
| class ImmutableField : public BitField<bool, 7, 1> {};
|
| class ExistingInobjectPropertyField : public BitField<bool, 8, 1> {};
|
| - class OffsetField : public BitField<int, 9, 23> {};
|
| + class ReadBarrierField : public BitField<bool, 9, 1> {};
|
| + class OffsetField : public BitField<int, 10, 22> {};
|
|
|
| uint32_t value_; // encodes portion, representation, immutable, and offset
|
| Handle<String> name_;
|
|
|