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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 V(DeclareGlobals) \ | 91 V(DeclareGlobals) \ |
92 V(Deoptimize) \ | 92 V(Deoptimize) \ |
93 V(Div) \ | 93 V(Div) \ |
94 V(DoubleBits) \ | 94 V(DoubleBits) \ |
95 V(DummyUse) \ | 95 V(DummyUse) \ |
96 V(EnterInlined) \ | 96 V(EnterInlined) \ |
97 V(EnvironmentMarker) \ | 97 V(EnvironmentMarker) \ |
98 V(ForceRepresentation) \ | 98 V(ForceRepresentation) \ |
99 V(ForInCacheArray) \ | 99 V(ForInCacheArray) \ |
100 V(ForInPrepareMap) \ | 100 V(ForInPrepareMap) \ |
101 V(FunctionLiteral) \ | |
102 V(GetCachedArrayIndex) \ | 101 V(GetCachedArrayIndex) \ |
103 V(Goto) \ | 102 V(Goto) \ |
104 V(HasCachedArrayIndexAndBranch) \ | 103 V(HasCachedArrayIndexAndBranch) \ |
105 V(HasInstanceTypeAndBranch) \ | 104 V(HasInstanceTypeAndBranch) \ |
106 V(InnerAllocatedObject) \ | 105 V(InnerAllocatedObject) \ |
107 V(InstanceOf) \ | 106 V(InstanceOf) \ |
108 V(InvokeFunction) \ | 107 V(InvokeFunction) \ |
109 V(IsConstructCallAndBranch) \ | 108 V(IsConstructCallAndBranch) \ |
110 V(HasInPrototypeChainAndBranch) \ | 109 V(HasInPrototypeChainAndBranch) \ |
111 V(IsStringAndBranch) \ | 110 V(IsStringAndBranch) \ |
(...skipping 7433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7545 SetAllSideEffects(); | 7544 SetAllSideEffects(); |
7546 set_type(HType::JSObject()); | 7545 set_type(HType::JSObject()); |
7547 } | 7546 } |
7548 | 7547 |
7549 Handle<FixedArray> literals_; | 7548 Handle<FixedArray> literals_; |
7550 Handle<String> pattern_; | 7549 Handle<String> pattern_; |
7551 Handle<String> flags_; | 7550 Handle<String> flags_; |
7552 }; | 7551 }; |
7553 | 7552 |
7554 | 7553 |
7555 class HFunctionLiteral final : public HTemplateInstruction<1> { | |
7556 public: | |
7557 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HFunctionLiteral, | |
7558 Handle<SharedFunctionInfo>, | |
7559 bool); | |
7560 HValue* context() { return OperandAt(0); } | |
7561 | |
7562 Representation RequiredInputRepresentation(int index) override { | |
7563 return Representation::Tagged(); | |
7564 } | |
7565 | |
7566 DECLARE_CONCRETE_INSTRUCTION(FunctionLiteral) | |
7567 | |
7568 Handle<SharedFunctionInfo> shared_info() const { return shared_info_; } | |
7569 bool pretenure() const { return PretenureField::decode(bit_field_); } | |
7570 bool has_no_literals() const { | |
7571 return HasNoLiteralsField::decode(bit_field_); | |
7572 } | |
7573 FunctionKind kind() const { return FunctionKindField::decode(bit_field_); } | |
7574 LanguageMode language_mode() const { | |
7575 return LanguageModeField::decode(bit_field_); | |
7576 } | |
7577 | |
7578 private: | |
7579 HFunctionLiteral(HValue* context, Handle<SharedFunctionInfo> shared, | |
7580 bool pretenure) | |
7581 : HTemplateInstruction<1>(HType::JSObject()), | |
7582 shared_info_(shared), | |
7583 bit_field_(FunctionKindField::encode(shared->kind()) | | |
7584 PretenureField::encode(pretenure) | | |
7585 HasNoLiteralsField::encode(shared->num_literals() == 0) | | |
7586 LanguageModeField::encode(shared->language_mode())) { | |
7587 SetOperandAt(0, context); | |
7588 set_representation(Representation::Tagged()); | |
7589 SetChangesFlag(kNewSpacePromotion); | |
7590 } | |
7591 | |
7592 bool IsDeletable() const override { return true; } | |
7593 | |
7594 class FunctionKindField : public BitField<FunctionKind, 0, 8> {}; | |
7595 class PretenureField : public BitField<bool, 8, 1> {}; | |
7596 class HasNoLiteralsField : public BitField<bool, 9, 1> {}; | |
7597 STATIC_ASSERT(LANGUAGE_END == 3); | |
7598 class LanguageModeField : public BitField<LanguageMode, 10, 2> {}; | |
7599 | |
7600 Handle<SharedFunctionInfo> shared_info_; | |
7601 uint32_t bit_field_; | |
7602 }; | |
7603 | |
7604 | |
7605 class HTypeof final : public HTemplateInstruction<2> { | 7554 class HTypeof final : public HTemplateInstruction<2> { |
7606 public: | 7555 public: |
7607 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(HTypeof, HValue*); | 7556 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(HTypeof, HValue*); |
7608 | 7557 |
7609 HValue* context() const { return OperandAt(0); } | 7558 HValue* context() const { return OperandAt(0); } |
7610 HValue* value() const { return OperandAt(1); } | 7559 HValue* value() const { return OperandAt(1); } |
7611 | 7560 |
7612 std::ostream& PrintDataTo(std::ostream& os) const override; // NOLINT | 7561 std::ostream& PrintDataTo(std::ostream& os) const override; // NOLINT |
7613 | 7562 |
7614 Representation RequiredInputRepresentation(int index) override { | 7563 Representation RequiredInputRepresentation(int index) override { |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8027 }; | 7976 }; |
8028 | 7977 |
8029 | 7978 |
8030 | 7979 |
8031 #undef DECLARE_INSTRUCTION | 7980 #undef DECLARE_INSTRUCTION |
8032 #undef DECLARE_CONCRETE_INSTRUCTION | 7981 #undef DECLARE_CONCRETE_INSTRUCTION |
8033 | 7982 |
8034 } } // namespace v8::internal | 7983 } } // namespace v8::internal |
8035 | 7984 |
8036 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 7985 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |