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(); |