Chromium Code Reviews| Index: src/hydrogen-instructions.h |
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
| index 6b92d5baa987abc7c47c76c88a6e2b88a14f24d6..a0570e766879c4a2eb86021f8eca0a96accc685f 100644 |
| --- a/src/hydrogen-instructions.h |
| +++ b/src/hydrogen-instructions.h |
| @@ -4624,10 +4624,17 @@ class HAdd V8_FINAL : public HArithmeticBinaryOperation { |
| HValue* left, |
| HValue* right); |
| + static HAdd* NewExternalPointerOffset( |
|
danno
2013/11/18 14:26:17
This doesn't really work well the the Add<> templa
Dmitry Lomov (no reviews)
2013/11/18 16:43:54
Done, even though Add<> does not work with HAdd ev
|
| + Zone* zone, |
| + HValue* context, |
| + HValue* base_pointer, |
| + HValue* offset); |
| + |
| // Add is only commutative if two integer values are added and not if two |
| // tagged values are added (because it might be a String concatenation). |
| + // We also do not commute (pointer + offset). |
| virtual bool IsCommutative() const V8_OVERRIDE { |
| - return !representation().IsTagged(); |
| + return !representation().IsTagged() && !representation().IsExternal(); |
| } |
| virtual HValue* EnsureAndPropagateNotMinusZero( |
| @@ -4663,6 +4670,10 @@ class HAdd V8_FINAL : public HArithmeticBinaryOperation { |
| } |
| } |
| + virtual Representation RepresentationFromInputs() V8_OVERRIDE; |
| + |
| + virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE; |
| + |
| DECLARE_CONCRETE_INSTRUCTION(Add) |
| protected: |
| @@ -6380,6 +6391,8 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { |
| } else if (field_representation().IsDouble() || |
| field_representation().IsSmi()) { |
| return field_representation(); |
| + } else if (field_representation().IsExternal()) { |
| + return Representation::External(); |
| } |
| } |
| return Representation::Tagged(); |