Chromium Code Reviews| Index: src/hydrogen-instructions.h |
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
| index d1f2372db689de8059d55f532d8ad26bf3bd661a..f1720f444247d83635c84d00a99cf2457ee0022e 100644 |
| --- a/src/hydrogen-instructions.h |
| +++ b/src/hydrogen-instructions.h |
| @@ -6049,9 +6049,14 @@ class HObjectAccess V8_FINAL { |
| return HObjectAccess(kMaps, JSObject::kMapOffset); |
| } |
| - static HObjectAccess ForMapInstanceSize() { |
| + static HObjectAccess ForMapAsInteger32() { |
| + return HObjectAccess(kMaps, JSObject::kMapOffset, |
| + Representation::Integer32()); |
| + } |
| + |
| + static HObjectAccess ForMapInObjectProperties() { |
| return HObjectAccess(kInobject, |
| - Map::kInstanceSizeOffset, |
| + Map::kInObjectPropertiesOffset, |
| Representation::UInteger8()); |
| } |
| @@ -6061,6 +6066,38 @@ class HObjectAccess V8_FINAL { |
| Representation::UInteger8()); |
| } |
| + static HObjectAccess ForMapInstanceSize() { |
| + return HObjectAccess(kInobject, |
| + Map::kInstanceSizeOffset, |
| + Representation::UInteger8()); |
| + } |
| + |
| + static HObjectAccess ForMapBitField() { |
| + return HObjectAccess(kInobject, |
| + Map::kBitFieldOffset, |
| + Representation::UInteger8()); |
| + } |
| + |
| + static HObjectAccess ForMapBitField2() { |
| + return HObjectAccess(kInobject, |
| + Map::kBitField2Offset, |
| + Representation::UInteger8()); |
| + } |
| + |
| + static HObjectAccess ForNameHashField() { |
| + return HObjectAccess(kInobject, |
| + Name::kHashFieldOffset, |
| + Representation::Integer32()); |
| + } |
| + |
| + static HObjectAccess ForMapInstanceTypeAndBitField() { |
| + STATIC_ASSERT((Map::kInstanceTypeOffset & 1) == 0); |
|
mtbrandy
2014/06/17 13:45:40
These asserts are invalid on big endian platforms.
|
| + STATIC_ASSERT(Map::kBitFieldOffset == Map::kInstanceTypeOffset + 1); |
| + return HObjectAccess(kInobject, |
| + Map::kInstanceTypeOffset, |
| + Representation::UInteger16()); |
| + } |
| + |
| static HObjectAccess ForPropertyCellValue() { |
| return HObjectAccess(kInobject, PropertyCell::kValueOffset); |
| } |
| @@ -6453,6 +6490,10 @@ class HLoadKeyed V8_FINAL |
| bool HasDependency() const { return OperandAt(0) != OperandAt(2); } |
| uint32_t base_offset() { return BaseOffsetField::decode(bit_field_); } |
| void IncreaseBaseOffset(uint32_t base_offset) { |
| + // The base offset is usually simply the size of the array header, except |
| + // with dehoisting adds an addition offset due to a array index key |
| + // manipulation, in which case it becomes (array header size + |
| + // constant-offset-from-key * kPointerSize) |
| base_offset += BaseOffsetField::decode(bit_field_); |
| bit_field_ = BaseOffsetField::update(bit_field_, base_offset); |
| } |
| @@ -6465,7 +6506,7 @@ class HLoadKeyed V8_FINAL |
| void SetDehoisted(bool is_dehoisted) { |
| bit_field_ = IsDehoistedField::update(bit_field_, is_dehoisted); |
| } |
| - ElementsKind elements_kind() const { |
| + virtual ElementsKind elements_kind() const V8_OVERRIDE { |
| return ElementsKindField::decode(bit_field_); |
| } |
| LoadKeyedHoleMode hole_mode() const { |
| @@ -6923,6 +6964,10 @@ class HStoreKeyed V8_FINAL |
| ElementsKind elements_kind() const { return elements_kind_; } |
| uint32_t base_offset() { return base_offset_; } |
| void IncreaseBaseOffset(uint32_t base_offset) { |
| + // The base offset is usually simply the size of the array header, except |
| + // with dehoisting adds an addition offset due to a array index key |
| + // manipulation, in which case it becomes (array header size + |
| + // constant-offset-from-key * kPointerSize) |
| base_offset_ += base_offset; |
| } |
| virtual int MaxBaseOffsetBits() { |