OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ | 5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ |
6 #define V8_HYDROGEN_INSTRUCTIONS_H_ | 6 #define V8_HYDROGEN_INSTRUCTIONS_H_ |
7 | 7 |
8 #include "v8.h" | 8 #include "v8.h" |
9 | 9 |
10 #include "allocation.h" | 10 #include "allocation.h" |
(...skipping 6735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6746 } | 6746 } |
6747 | 6747 |
6748 Representation field_representation() const { | 6748 Representation field_representation() const { |
6749 return access_.representation(); | 6749 return access_.representation(); |
6750 } | 6750 } |
6751 | 6751 |
6752 void UpdateValue(HValue* value) { | 6752 void UpdateValue(HValue* value) { |
6753 SetOperandAt(1, value); | 6753 SetOperandAt(1, value); |
6754 } | 6754 } |
6755 | 6755 |
| 6756 bool CanBeReplacedWith(HStoreNamedField* that) const { |
| 6757 if (!this->access().Equals(that->access())) return false; |
| 6758 if (SmiValuesAre32Bits() && |
| 6759 this->field_representation().IsSmi() && |
| 6760 this->store_mode() == INITIALIZING_STORE && |
| 6761 that->store_mode() == STORE_TO_INITIALIZED_ENTRY) { |
| 6762 // We cannot replace an initializing store to a smi field with a store to |
| 6763 // an initialized entry on 64-bit architectures (with 32-bit smis). |
| 6764 return false; |
| 6765 } |
| 6766 return true; |
| 6767 } |
| 6768 |
6756 private: | 6769 private: |
6757 HStoreNamedField(HValue* obj, | 6770 HStoreNamedField(HValue* obj, |
6758 HObjectAccess access, | 6771 HObjectAccess access, |
6759 HValue* val, | 6772 HValue* val, |
6760 StoreFieldOrKeyedMode store_mode = INITIALIZING_STORE) | 6773 StoreFieldOrKeyedMode store_mode = INITIALIZING_STORE) |
6761 : access_(access), | 6774 : access_(access), |
6762 new_space_dominator_(NULL), | 6775 new_space_dominator_(NULL), |
6763 has_transition_(false), | 6776 has_transition_(false), |
6764 store_mode_(store_mode) { | 6777 store_mode_(store_mode) { |
6765 // Stores to a non existing in-object property are allowed only to the | 6778 // Stores to a non existing in-object property are allowed only to the |
(...skipping 946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7712 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 7725 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
7713 }; | 7726 }; |
7714 | 7727 |
7715 | 7728 |
7716 #undef DECLARE_INSTRUCTION | 7729 #undef DECLARE_INSTRUCTION |
7717 #undef DECLARE_CONCRETE_INSTRUCTION | 7730 #undef DECLARE_CONCRETE_INSTRUCTION |
7718 | 7731 |
7719 } } // namespace v8::internal | 7732 } } // namespace v8::internal |
7720 | 7733 |
7721 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 7734 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |