| 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 7029 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7040 HObjectAccess access_; | 7040 HObjectAccess access_; |
| 7041 HValue* dominator_; | 7041 HValue* dominator_; |
| 7042 uint32_t bit_field_; | 7042 uint32_t bit_field_; |
| 7043 }; | 7043 }; |
| 7044 | 7044 |
| 7045 | 7045 |
| 7046 class HStoreNamedGeneric FINAL : public HTemplateInstruction<3> { | 7046 class HStoreNamedGeneric FINAL : public HTemplateInstruction<3> { |
| 7047 public: | 7047 public: |
| 7048 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreNamedGeneric, HValue*, | 7048 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreNamedGeneric, HValue*, |
| 7049 Handle<String>, HValue*, | 7049 Handle<String>, HValue*, |
| 7050 StrictMode); | 7050 LanguageMode); |
| 7051 HValue* object() const { return OperandAt(0); } | 7051 HValue* object() const { return OperandAt(0); } |
| 7052 HValue* value() const { return OperandAt(1); } | 7052 HValue* value() const { return OperandAt(1); } |
| 7053 HValue* context() const { return OperandAt(2); } | 7053 HValue* context() const { return OperandAt(2); } |
| 7054 Handle<String> name() const { return name_; } | 7054 Handle<String> name() const { return name_; } |
| 7055 StrictMode strict_mode() const { return strict_mode_; } | 7055 LanguageMode language_mode() const { return language_mode_; } |
| 7056 | 7056 |
| 7057 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 7057 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
| 7058 | 7058 |
| 7059 Representation RequiredInputRepresentation(int index) OVERRIDE { | 7059 Representation RequiredInputRepresentation(int index) OVERRIDE { |
| 7060 return Representation::Tagged(); | 7060 return Representation::Tagged(); |
| 7061 } | 7061 } |
| 7062 | 7062 |
| 7063 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric) | 7063 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric) |
| 7064 | 7064 |
| 7065 private: | 7065 private: |
| 7066 HStoreNamedGeneric(HValue* context, | 7066 HStoreNamedGeneric(HValue* context, HValue* object, Handle<String> name, |
| 7067 HValue* object, | 7067 HValue* value, LanguageMode language_mode) |
| 7068 Handle<String> name, | 7068 : name_(name), language_mode_(language_mode) { |
| 7069 HValue* value, | |
| 7070 StrictMode strict_mode) | |
| 7071 : name_(name), | |
| 7072 strict_mode_(strict_mode) { | |
| 7073 SetOperandAt(0, object); | 7069 SetOperandAt(0, object); |
| 7074 SetOperandAt(1, value); | 7070 SetOperandAt(1, value); |
| 7075 SetOperandAt(2, context); | 7071 SetOperandAt(2, context); |
| 7076 SetAllSideEffects(); | 7072 SetAllSideEffects(); |
| 7077 } | 7073 } |
| 7078 | 7074 |
| 7079 Handle<String> name_; | 7075 Handle<String> name_; |
| 7080 StrictMode strict_mode_; | 7076 LanguageMode language_mode_; |
| 7081 }; | 7077 }; |
| 7082 | 7078 |
| 7083 | 7079 |
| 7084 class HStoreKeyed FINAL | 7080 class HStoreKeyed FINAL |
| 7085 : public HTemplateInstruction<3>, public ArrayInstructionInterface { | 7081 : public HTemplateInstruction<3>, public ArrayInstructionInterface { |
| 7086 public: | 7082 public: |
| 7087 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*, | 7083 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*, |
| 7088 ElementsKind); | 7084 ElementsKind); |
| 7089 DECLARE_INSTRUCTION_FACTORY_P5(HStoreKeyed, HValue*, HValue*, HValue*, | 7085 DECLARE_INSTRUCTION_FACTORY_P5(HStoreKeyed, HValue*, HValue*, HValue*, |
| 7090 ElementsKind, StoreFieldOrKeyedMode); | 7086 ElementsKind, StoreFieldOrKeyedMode); |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7261 | 7257 |
| 7262 uint32_t base_offset_; | 7258 uint32_t base_offset_; |
| 7263 uint32_t bit_field_; | 7259 uint32_t bit_field_; |
| 7264 HValue* dominator_; | 7260 HValue* dominator_; |
| 7265 }; | 7261 }; |
| 7266 | 7262 |
| 7267 | 7263 |
| 7268 class HStoreKeyedGeneric FINAL : public HTemplateInstruction<4> { | 7264 class HStoreKeyedGeneric FINAL : public HTemplateInstruction<4> { |
| 7269 public: | 7265 public: |
| 7270 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreKeyedGeneric, HValue*, | 7266 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreKeyedGeneric, HValue*, |
| 7271 HValue*, HValue*, StrictMode); | 7267 HValue*, HValue*, LanguageMode); |
| 7272 | 7268 |
| 7273 HValue* object() const { return OperandAt(0); } | 7269 HValue* object() const { return OperandAt(0); } |
| 7274 HValue* key() const { return OperandAt(1); } | 7270 HValue* key() const { return OperandAt(1); } |
| 7275 HValue* value() const { return OperandAt(2); } | 7271 HValue* value() const { return OperandAt(2); } |
| 7276 HValue* context() const { return OperandAt(3); } | 7272 HValue* context() const { return OperandAt(3); } |
| 7277 StrictMode strict_mode() const { return strict_mode_; } | 7273 LanguageMode language_mode() const { return language_mode_; } |
| 7278 | 7274 |
| 7279 Representation RequiredInputRepresentation(int index) OVERRIDE { | 7275 Representation RequiredInputRepresentation(int index) OVERRIDE { |
| 7280 // tagged[tagged] = tagged | 7276 // tagged[tagged] = tagged |
| 7281 return Representation::Tagged(); | 7277 return Representation::Tagged(); |
| 7282 } | 7278 } |
| 7283 | 7279 |
| 7284 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT | 7280 std::ostream& PrintDataTo(std::ostream& os) const OVERRIDE; // NOLINT |
| 7285 | 7281 |
| 7286 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric) | 7282 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric) |
| 7287 | 7283 |
| 7288 private: | 7284 private: |
| 7289 HStoreKeyedGeneric(HValue* context, | 7285 HStoreKeyedGeneric(HValue* context, HValue* object, HValue* key, |
| 7290 HValue* object, | 7286 HValue* value, LanguageMode language_mode) |
| 7291 HValue* key, | 7287 : language_mode_(language_mode) { |
| 7292 HValue* value, | |
| 7293 StrictMode strict_mode) | |
| 7294 : strict_mode_(strict_mode) { | |
| 7295 SetOperandAt(0, object); | 7288 SetOperandAt(0, object); |
| 7296 SetOperandAt(1, key); | 7289 SetOperandAt(1, key); |
| 7297 SetOperandAt(2, value); | 7290 SetOperandAt(2, value); |
| 7298 SetOperandAt(3, context); | 7291 SetOperandAt(3, context); |
| 7299 SetAllSideEffects(); | 7292 SetAllSideEffects(); |
| 7300 } | 7293 } |
| 7301 | 7294 |
| 7302 StrictMode strict_mode_; | 7295 LanguageMode language_mode_; |
| 7303 }; | 7296 }; |
| 7304 | 7297 |
| 7305 | 7298 |
| 7306 class HTransitionElementsKind FINAL : public HTemplateInstruction<2> { | 7299 class HTransitionElementsKind FINAL : public HTemplateInstruction<2> { |
| 7307 public: | 7300 public: |
| 7308 inline static HTransitionElementsKind* New(Isolate* isolate, Zone* zone, | 7301 inline static HTransitionElementsKind* New(Isolate* isolate, Zone* zone, |
| 7309 HValue* context, HValue* object, | 7302 HValue* context, HValue* object, |
| 7310 Handle<Map> original_map, | 7303 Handle<Map> original_map, |
| 7311 Handle<Map> transitioned_map) { | 7304 Handle<Map> transitioned_map) { |
| 7312 return new(zone) HTransitionElementsKind(context, object, | 7305 return new(zone) HTransitionElementsKind(context, object, |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7581 Handle<SharedFunctionInfo> shared_info() const { return shared_info_; } | 7574 Handle<SharedFunctionInfo> shared_info() const { return shared_info_; } |
| 7582 bool pretenure() const { return PretenureField::decode(bit_field_); } | 7575 bool pretenure() const { return PretenureField::decode(bit_field_); } |
| 7583 bool has_no_literals() const { | 7576 bool has_no_literals() const { |
| 7584 return HasNoLiteralsField::decode(bit_field_); | 7577 return HasNoLiteralsField::decode(bit_field_); |
| 7585 } | 7578 } |
| 7586 bool is_arrow() const { return IsArrowFunction(kind()); } | 7579 bool is_arrow() const { return IsArrowFunction(kind()); } |
| 7587 bool is_generator() const { return IsGeneratorFunction(kind()); } | 7580 bool is_generator() const { return IsGeneratorFunction(kind()); } |
| 7588 bool is_concise_method() const { return IsConciseMethod(kind()); } | 7581 bool is_concise_method() const { return IsConciseMethod(kind()); } |
| 7589 bool is_default_constructor() const { return IsDefaultConstructor(kind()); } | 7582 bool is_default_constructor() const { return IsDefaultConstructor(kind()); } |
| 7590 FunctionKind kind() const { return FunctionKindField::decode(bit_field_); } | 7583 FunctionKind kind() const { return FunctionKindField::decode(bit_field_); } |
| 7591 StrictMode strict_mode() const { return StrictModeField::decode(bit_field_); } | 7584 LanguageMode language_mode() const { |
| 7585 return LanguageModeField::decode(bit_field_); |
| 7586 } |
| 7592 | 7587 |
| 7593 private: | 7588 private: |
| 7594 HFunctionLiteral(HValue* context, Handle<SharedFunctionInfo> shared, | 7589 HFunctionLiteral(HValue* context, Handle<SharedFunctionInfo> shared, |
| 7595 bool pretenure) | 7590 bool pretenure) |
| 7596 : HTemplateInstruction<1>(HType::JSObject()), | 7591 : HTemplateInstruction<1>(HType::JSObject()), |
| 7597 shared_info_(shared), | 7592 shared_info_(shared), |
| 7598 bit_field_(FunctionKindField::encode(shared->kind()) | | 7593 bit_field_(FunctionKindField::encode(shared->kind()) | |
| 7599 PretenureField::encode(pretenure) | | 7594 PretenureField::encode(pretenure) | |
| 7600 HasNoLiteralsField::encode(shared->num_literals() == 0) | | 7595 HasNoLiteralsField::encode(shared->num_literals() == 0) | |
| 7601 StrictModeField::encode(shared->strict_mode())) { | 7596 LanguageModeField::encode(shared->language_mode())) { |
| 7602 SetOperandAt(0, context); | 7597 SetOperandAt(0, context); |
| 7603 set_representation(Representation::Tagged()); | 7598 set_representation(Representation::Tagged()); |
| 7604 SetChangesFlag(kNewSpacePromotion); | 7599 SetChangesFlag(kNewSpacePromotion); |
| 7605 } | 7600 } |
| 7606 | 7601 |
| 7607 bool IsDeletable() const OVERRIDE { return true; } | 7602 bool IsDeletable() const OVERRIDE { return true; } |
| 7608 | 7603 |
| 7609 class FunctionKindField : public BitField<FunctionKind, 0, 4> {}; | 7604 class FunctionKindField : public BitField<FunctionKind, 0, 4> {}; |
| 7610 class PretenureField : public BitField<bool, 5, 1> {}; | 7605 class PretenureField : public BitField<bool, 5, 1> {}; |
| 7611 class HasNoLiteralsField : public BitField<bool, 6, 1> {}; | 7606 class HasNoLiteralsField : public BitField<bool, 6, 1> {}; |
| 7612 class StrictModeField : public BitField<StrictMode, 7, 1> {}; | 7607 STATIC_ASSERT(LANGUAGE_END == 2); |
| 7608 class LanguageModeField : public BitField<LanguageMode, 7, 1> {}; |
| 7613 | 7609 |
| 7614 Handle<SharedFunctionInfo> shared_info_; | 7610 Handle<SharedFunctionInfo> shared_info_; |
| 7615 uint32_t bit_field_; | 7611 uint32_t bit_field_; |
| 7616 }; | 7612 }; |
| 7617 | 7613 |
| 7618 | 7614 |
| 7619 class HTypeof FINAL : public HTemplateInstruction<2> { | 7615 class HTypeof FINAL : public HTemplateInstruction<2> { |
| 7620 public: | 7616 public: |
| 7621 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(HTypeof, HValue*); | 7617 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(HTypeof, HValue*); |
| 7622 | 7618 |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7989 }; | 7985 }; |
| 7990 | 7986 |
| 7991 | 7987 |
| 7992 | 7988 |
| 7993 #undef DECLARE_INSTRUCTION | 7989 #undef DECLARE_INSTRUCTION |
| 7994 #undef DECLARE_CONCRETE_INSTRUCTION | 7990 #undef DECLARE_CONCRETE_INSTRUCTION |
| 7995 | 7991 |
| 7996 } } // namespace v8::internal | 7992 } } // namespace v8::internal |
| 7997 | 7993 |
| 7998 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 7994 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
| OLD | NEW |