Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index 1fc800e6ffd6b6e8857c7b86bca00e1858566cf3..d1f2372db689de8059d55f532d8ad26bf3bd661a 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -6404,9 +6404,8 @@ class ArrayInstructionInterface { |
virtual HValue* GetKey() = 0; |
virtual void SetKey(HValue* key) = 0; |
virtual ElementsKind elements_kind() const = 0; |
- // increase_by_value should be non-negative |
- virtual bool CanIncreaseBaseOffset(int32_t increase_by_value) = 0; |
- virtual void IncreaseBaseOffset(int32_t increase_by_value) = 0; |
+ virtual void IncreaseBaseOffset(uint32_t base_offset) = 0; |
+ virtual int MaxBaseOffsetBits() = 0; |
virtual bool IsDehoisted() = 0; |
virtual void SetDehoisted(bool is_dehoisted) = 0; |
virtual ~ArrayInstructionInterface() { } |
@@ -6452,20 +6451,13 @@ class HLoadKeyed V8_FINAL |
return OperandAt(2); |
} |
bool HasDependency() const { return OperandAt(0) != OperandAt(2); } |
- uint32_t base_offset() { |
- int32_t base_offset_value = BaseOffsetField::decode(bit_field_); |
- ASSERT(base_offset_value >= 0); |
- return static_cast<uint32_t>(base_offset_value); |
+ uint32_t base_offset() { return BaseOffsetField::decode(bit_field_); } |
+ void IncreaseBaseOffset(uint32_t base_offset) { |
+ base_offset += BaseOffsetField::decode(bit_field_); |
+ bit_field_ = BaseOffsetField::update(bit_field_, base_offset); |
} |
- bool CanIncreaseBaseOffset(int32_t increase_by_value) { |
- ASSERT(increase_by_value >= 0); |
- int32_t new_value = BaseOffsetField::decode(bit_field_) + increase_by_value; |
- return (new_value >= 0 && BaseOffsetField::is_valid(new_value)); |
- } |
- void IncreaseBaseOffset(int32_t increase_by_value) { |
- ASSERT(increase_by_value >= 0); |
- increase_by_value += BaseOffsetField::decode(bit_field_); |
- bit_field_ = BaseOffsetField::update(bit_field_, increase_by_value); |
+ virtual int MaxBaseOffsetBits() { |
+ return kBitsForBaseOffset; |
} |
HValue* GetKey() { return key(); } |
void SetKey(HValue* key) { SetOperandAt(1, key); } |
@@ -6615,7 +6607,7 @@ class HLoadKeyed V8_FINAL |
public BitField<LoadKeyedHoleMode, kStartHoleMode, kBitsForHoleMode> |
{}; // NOLINT |
class BaseOffsetField: |
- public BitField<int32_t, kStartBaseOffset, kBitsForBaseOffset> |
+ public BitField<uint32_t, kStartBaseOffset, kBitsForBaseOffset> |
{}; // NOLINT |
class IsDehoistedField: |
public BitField<bool, kStartIsDehoisted, kBitsForIsDehoisted> |
@@ -6929,18 +6921,12 @@ class HStoreKeyed V8_FINAL |
} |
StoreFieldOrKeyedMode store_mode() const { return store_mode_; } |
ElementsKind elements_kind() const { return elements_kind_; } |
- uint32_t base_offset() { |
- ASSERT(base_offset_ >= 0); |
- return static_cast<uint32_t>(base_offset_); |
- } |
- bool CanIncreaseBaseOffset(int32_t increase_by_value) { |
- ASSERT(increase_by_value >= 0); |
- // Guard against overflow |
- return (increase_by_value + base_offset_) >= 0; |
+ uint32_t base_offset() { return base_offset_; } |
+ void IncreaseBaseOffset(uint32_t base_offset) { |
+ base_offset_ += base_offset; |
} |
- void IncreaseBaseOffset(int32_t increase_by_value) { |
- ASSERT(increase_by_value >= 0); |
- base_offset_ += increase_by_value; |
+ virtual int MaxBaseOffsetBits() { |
+ return 31 - ElementsKindToShiftSize(elements_kind_); |
} |
HValue* GetKey() { return key(); } |
void SetKey(HValue* key) { SetOperandAt(1, key); } |
@@ -7031,7 +7017,7 @@ class HStoreKeyed V8_FINAL |
} |
ElementsKind elements_kind_; |
- int32_t base_offset_; |
+ uint32_t base_offset_; |
bool is_dehoisted_ : 1; |
bool is_uninitialized_ : 1; |
StoreFieldOrKeyedMode store_mode_: 1; |