Chromium Code Reviews| 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; |
| }; |