Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index 23dbbd289c6c5d5a9e07697368e9fba6ab05e22d..71cd70cd89027e86cdec4a3567c3073898582752 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -6532,8 +6532,12 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { |
field_representation().IsUInteger16() || |
field_representation().IsInteger32()) { |
return Representation::Integer32(); |
- } else if (field_representation().IsDouble() || |
- field_representation().IsSmi()) { |
+ } else if (field_representation().IsDouble()) { |
+ return field_representation(); |
+ } else if (field_representation().IsSmi()) { |
+ if (SmiValuesAre32Bits()) { |
+ return Representation::Integer32(); |
+ } |
return field_representation(); |
} else if (field_representation().IsExternal()) { |
return Representation::External(); |
@@ -6561,6 +6565,11 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { |
HValue* new_space_dominator() const { return new_space_dominator_; } |
bool has_transition() const { return has_transition_; } |
+ // Controls whether it is guaranteed that the smi word already contains |
+ // correct smi tag (currently applicable only for x64). |
+ bool can_omit_smi_tag_store() const { return can_omit_smi_tag_store_; } |
+ void set_can_omit_smi_tag_store(bool v) { can_omit_smi_tag_store_ = v; } |
Toon Verwaest
2013/12/09 15:51:10
I'd rather distinguish between "initializing store
Igor Sheludko
2013/12/10 09:13:08
Good suggestion! Done.
|
+ |
Handle<Map> transition_map() const { |
if (has_transition()) { |
return Handle<Map>::cast( |
@@ -6614,7 +6623,8 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { |
: access_(access), |
new_space_dominator_(NULL), |
write_barrier_mode_(UPDATE_WRITE_BARRIER), |
- has_transition_(false) { |
+ has_transition_(false), |
+ can_omit_smi_tag_store_(false) { |
SetOperandAt(0, obj); |
SetOperandAt(1, val); |
SetOperandAt(2, obj); |
@@ -6625,6 +6635,7 @@ class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { |
HValue* new_space_dominator_; |
WriteBarrierMode write_barrier_mode_ : 1; |
bool has_transition_ : 1; |
+ bool can_omit_smi_tag_store_ : 1; |
}; |