| 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 <cstring> | 8 #include <cstring> |
| 9 #include <iosfwd> | 9 #include <iosfwd> |
| 10 | 10 |
| (...skipping 6776 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6787 {}; // NOLINT | 6787 {}; // NOLINT |
| 6788 class IsDehoistedField: | 6788 class IsDehoistedField: |
| 6789 public BitField<bool, kStartIsDehoisted, kBitsForIsDehoisted> | 6789 public BitField<bool, kStartIsDehoisted, kBitsForIsDehoisted> |
| 6790 {}; // NOLINT | 6790 {}; // NOLINT |
| 6791 uint32_t bit_field_; | 6791 uint32_t bit_field_; |
| 6792 }; | 6792 }; |
| 6793 | 6793 |
| 6794 | 6794 |
| 6795 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> { | 6795 class HLoadKeyedGeneric FINAL : public HTemplateInstruction<3> { |
| 6796 public: | 6796 public: |
| 6797 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*, | 6797 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadKeyedGeneric, HValue*, |
| 6798 HValue*); | 6798 HValue*, InlineCacheState); |
| 6799 HValue* object() const { return OperandAt(0); } | 6799 HValue* object() const { return OperandAt(0); } |
| 6800 HValue* key() const { return OperandAt(1); } | 6800 HValue* key() const { return OperandAt(1); } |
| 6801 HValue* context() const { return OperandAt(2); } | 6801 HValue* context() const { return OperandAt(2); } |
| 6802 InlineCacheState initialization_state() const { |
| 6803 return initialization_state_; |
| 6804 } |
| 6802 FeedbackVectorICSlot slot() const { return slot_; } | 6805 FeedbackVectorICSlot slot() const { return slot_; } |
| 6803 Handle<TypeFeedbackVector> feedback_vector() const { | 6806 Handle<TypeFeedbackVector> feedback_vector() const { |
| 6804 return feedback_vector_; | 6807 return feedback_vector_; |
| 6805 } | 6808 } |
| 6806 bool HasVectorAndSlot() const { return FLAG_vector_ics; } | 6809 bool HasVectorAndSlot() const { return FLAG_vector_ics; } |
| 6807 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, | 6810 void SetVectorAndSlot(Handle<TypeFeedbackVector> vector, |
| 6808 FeedbackVectorICSlot slot) { | 6811 FeedbackVectorICSlot slot) { |
| 6809 DCHECK(FLAG_vector_ics); | 6812 DCHECK(FLAG_vector_ics); |
| 6810 feedback_vector_ = vector; | 6813 feedback_vector_ = vector; |
| 6811 slot_ = slot; | 6814 slot_ = slot; |
| 6812 } | 6815 } |
| 6813 | 6816 |
| 6814 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 6817 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
| 6815 | 6818 |
| 6816 Representation RequiredInputRepresentation(int index) OVERRIDE { | 6819 Representation RequiredInputRepresentation(int index) OVERRIDE { |
| 6817 // tagged[tagged] | 6820 // tagged[tagged] |
| 6818 return Representation::Tagged(); | 6821 return Representation::Tagged(); |
| 6819 } | 6822 } |
| 6820 | 6823 |
| 6821 HValue* Canonicalize() OVERRIDE; | 6824 HValue* Canonicalize() OVERRIDE; |
| 6822 | 6825 |
| 6823 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric) | 6826 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric) |
| 6824 | 6827 |
| 6825 private: | 6828 private: |
| 6826 HLoadKeyedGeneric(HValue* context, HValue* obj, HValue* key) | 6829 HLoadKeyedGeneric(HValue* context, HValue* obj, HValue* key, |
| 6827 : slot_(FeedbackVectorICSlot::Invalid()) { | 6830 InlineCacheState initialization_state) |
| 6831 : slot_(FeedbackVectorICSlot::Invalid()), |
| 6832 initialization_state_(initialization_state) { |
| 6828 set_representation(Representation::Tagged()); | 6833 set_representation(Representation::Tagged()); |
| 6829 SetOperandAt(0, obj); | 6834 SetOperandAt(0, obj); |
| 6830 SetOperandAt(1, key); | 6835 SetOperandAt(1, key); |
| 6831 SetOperandAt(2, context); | 6836 SetOperandAt(2, context); |
| 6832 SetAllSideEffects(); | 6837 SetAllSideEffects(); |
| 6833 } | 6838 } |
| 6834 | 6839 |
| 6835 Handle<TypeFeedbackVector> feedback_vector_; | 6840 Handle<TypeFeedbackVector> feedback_vector_; |
| 6836 FeedbackVectorICSlot slot_; | 6841 FeedbackVectorICSlot slot_; |
| 6842 InlineCacheState initialization_state_; |
| 6837 }; | 6843 }; |
| 6838 | 6844 |
| 6839 | 6845 |
| 6840 // Indicates whether the store is a store to an entry that was previously | 6846 // Indicates whether the store is a store to an entry that was previously |
| 6841 // initialized or not. | 6847 // initialized or not. |
| 6842 enum StoreFieldOrKeyedMode { | 6848 enum StoreFieldOrKeyedMode { |
| 6843 // The entry could be either previously initialized or not. | 6849 // The entry could be either previously initialized or not. |
| 6844 INITIALIZING_STORE, | 6850 INITIALIZING_STORE, |
| 6845 // At the time of this store it is guaranteed that the entry is already | 6851 // At the time of this store it is guaranteed that the entry is already |
| 6846 // initialized. | 6852 // initialized. |
| (...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7226 class ElementsKindField : public BitField<ElementsKind, 3, 5> {}; | 7232 class ElementsKindField : public BitField<ElementsKind, 3, 5> {}; |
| 7227 | 7233 |
| 7228 uint32_t base_offset_; | 7234 uint32_t base_offset_; |
| 7229 uint32_t bit_field_; | 7235 uint32_t bit_field_; |
| 7230 HValue* dominator_; | 7236 HValue* dominator_; |
| 7231 }; | 7237 }; |
| 7232 | 7238 |
| 7233 | 7239 |
| 7234 class HStoreKeyedGeneric FINAL : public HTemplateInstruction<4> { | 7240 class HStoreKeyedGeneric FINAL : public HTemplateInstruction<4> { |
| 7235 public: | 7241 public: |
| 7236 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreKeyedGeneric, HValue*, | 7242 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5(HStoreKeyedGeneric, HValue*, |
| 7237 HValue*, HValue*, LanguageMode); | 7243 HValue*, HValue*, LanguageMode, |
| 7244 InlineCacheState); |
| 7238 | 7245 |
| 7239 HValue* object() const { return OperandAt(0); } | 7246 HValue* object() const { return OperandAt(0); } |
| 7240 HValue* key() const { return OperandAt(1); } | 7247 HValue* key() const { return OperandAt(1); } |
| 7241 HValue* value() const { return OperandAt(2); } | 7248 HValue* value() const { return OperandAt(2); } |
| 7242 HValue* context() const { return OperandAt(3); } | 7249 HValue* context() const { return OperandAt(3); } |
| 7243 LanguageMode language_mode() const { return language_mode_; } | 7250 LanguageMode language_mode() const { return language_mode_; } |
| 7251 InlineCacheState initialization_state() const { |
| 7252 return initialization_state_; |
| 7253 } |
| 7244 | 7254 |
| 7245 Representation RequiredInputRepresentation(int index) OVERRIDE { | 7255 Representation RequiredInputRepresentation(int index) OVERRIDE { |
| 7246 // tagged[tagged] = tagged | 7256 // tagged[tagged] = tagged |
| 7247 return Representation::Tagged(); | 7257 return Representation::Tagged(); |
| 7248 } | 7258 } |
| 7249 | 7259 |
| 7250 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 7260 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
| 7251 | 7261 |
| 7252 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric) | 7262 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric) |
| 7253 | 7263 |
| 7254 private: | 7264 private: |
| 7255 HStoreKeyedGeneric(HValue* context, HValue* object, HValue* key, | 7265 HStoreKeyedGeneric(HValue* context, HValue* object, HValue* key, |
| 7256 HValue* value, LanguageMode language_mode) | 7266 HValue* value, LanguageMode language_mode, |
| 7257 : language_mode_(language_mode) { | 7267 InlineCacheState initialization_state) |
| 7268 : language_mode_(language_mode), |
| 7269 initialization_state_(initialization_state) { |
| 7258 SetOperandAt(0, object); | 7270 SetOperandAt(0, object); |
| 7259 SetOperandAt(1, key); | 7271 SetOperandAt(1, key); |
| 7260 SetOperandAt(2, value); | 7272 SetOperandAt(2, value); |
| 7261 SetOperandAt(3, context); | 7273 SetOperandAt(3, context); |
| 7262 SetAllSideEffects(); | 7274 SetAllSideEffects(); |
| 7263 } | 7275 } |
| 7264 | 7276 |
| 7265 LanguageMode language_mode_; | 7277 LanguageMode language_mode_; |
| 7278 InlineCacheState initialization_state_; |
| 7266 }; | 7279 }; |
| 7267 | 7280 |
| 7268 | 7281 |
| 7269 class HTransitionElementsKind FINAL : public HTemplateInstruction<2> { | 7282 class HTransitionElementsKind FINAL : public HTemplateInstruction<2> { |
| 7270 public: | 7283 public: |
| 7271 inline static HTransitionElementsKind* New(Isolate* isolate, Zone* zone, | 7284 inline static HTransitionElementsKind* New(Isolate* isolate, Zone* zone, |
| 7272 HValue* context, HValue* object, | 7285 HValue* context, HValue* object, |
| 7273 Handle<Map> original_map, | 7286 Handle<Map> original_map, |
| 7274 Handle<Map> transitioned_map) { | 7287 Handle<Map> transitioned_map) { |
| 7275 return new(zone) HTransitionElementsKind(context, object, | 7288 return new(zone) HTransitionElementsKind(context, object, |
| (...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7951 }; | 7964 }; |
| 7952 | 7965 |
| 7953 | 7966 |
| 7954 | 7967 |
| 7955 #undef DECLARE_INSTRUCTION | 7968 #undef DECLARE_INSTRUCTION |
| 7956 #undef DECLARE_CONCRETE_INSTRUCTION | 7969 #undef DECLARE_CONCRETE_INSTRUCTION |
| 7957 | 7970 |
| 7958 } } // namespace v8::internal | 7971 } } // namespace v8::internal |
| 7959 | 7972 |
| 7960 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 7973 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
| OLD | NEW |