Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 198 virtual int GetStubFlags() { | 198 virtual int GetStubFlags() { |
| 199 return -1; | 199 return -1; |
| 200 } | 200 } |
| 201 | 201 |
| 202 virtual void PrintName(StringStream* stream); | 202 virtual void PrintName(StringStream* stream); |
| 203 | 203 |
| 204 protected: | 204 protected: |
| 205 static bool CanUseFPRegisters(); | 205 static bool CanUseFPRegisters(); |
| 206 | 206 |
| 207 // Generates the assembler code for the stub. | 207 // Generates the assembler code for the stub. |
| 208 virtual Handle<Code> GenerateCode() = 0; | 208 virtual Handle<Code> GenerateCode(Isolate* isolate) = 0; |
| 209 | 209 |
| 210 | 210 |
| 211 // Returns whether the code generated for this stub needs to be allocated as | 211 // Returns whether the code generated for this stub needs to be allocated as |
| 212 // a fixed (non-moveable) code object. | 212 // a fixed (non-moveable) code object. |
| 213 virtual bool NeedsImmovableCode() { return false; } | 213 virtual bool NeedsImmovableCode() { return false; } |
| 214 | 214 |
| 215 // Returns a name for logging/debugging purposes. | 215 // Returns a name for logging/debugging purposes. |
| 216 SmartArrayPointer<const char> GetName(); | 216 SmartArrayPointer<const char> GetName(); |
| 217 virtual void PrintBaseName(StringStream* stream); | 217 virtual void PrintBaseName(StringStream* stream); |
| 218 virtual void PrintState(StringStream* stream) { } | 218 virtual void PrintState(StringStream* stream) { } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 256 class MinorKeyBits: public BitField<uint32_t, | 256 class MinorKeyBits: public BitField<uint32_t, |
| 257 kStubMajorKeyBits, kStubMinorKeyBits> {}; // NOLINT | 257 kStubMajorKeyBits, kStubMinorKeyBits> {}; // NOLINT |
| 258 | 258 |
| 259 friend class BreakPointIterator; | 259 friend class BreakPointIterator; |
| 260 }; | 260 }; |
| 261 | 261 |
| 262 | 262 |
| 263 class PlatformCodeStub : public CodeStub { | 263 class PlatformCodeStub : public CodeStub { |
| 264 public: | 264 public: |
| 265 // Retrieve the code for the stub. Generate the code if needed. | 265 // Retrieve the code for the stub. Generate the code if needed. |
| 266 virtual Handle<Code> GenerateCode(); | 266 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 267 | 267 |
| 268 virtual Code::Kind GetCodeKind() const { return Code::STUB; } | 268 virtual Code::Kind GetCodeKind() const { return Code::STUB; } |
| 269 | 269 |
| 270 protected: | 270 protected: |
| 271 // Generates the assembler code for the stub. | 271 // Generates the assembler code for the stub. |
| 272 virtual void Generate(MacroAssembler* masm) = 0; | 272 virtual void Generate(MacroAssembler* masm) = 0; |
| 273 }; | 273 }; |
| 274 | 274 |
| 275 | 275 |
| 276 enum StubFunctionMode { NOT_JS_FUNCTION_STUB_MODE, JS_FUNCTION_STUB_MODE }; | 276 enum StubFunctionMode { NOT_JS_FUNCTION_STUB_MODE, JS_FUNCTION_STUB_MODE }; |
| 277 | 277 |
| 278 | 278 |
| 279 struct CodeStubInterfaceDescriptor { | 279 struct CodeStubInterfaceDescriptor { |
| 280 CodeStubInterfaceDescriptor(); | 280 explicit CodeStubInterfaceDescriptor(); |
|
Sven Panne
2013/09/02 12:40:52
Huh?
dcarney
2013/09/02 12:47:01
will fix
| |
| 281 int register_param_count_; | 281 int register_param_count_; |
| 282 const Register* stack_parameter_count_; | 282 const Register* stack_parameter_count_; |
| 283 // if hint_stack_parameter_count_ > 0, the code stub can optimize the | 283 // if hint_stack_parameter_count_ > 0, the code stub can optimize the |
| 284 // return sequence. Default value is -1, which means it is ignored. | 284 // return sequence. Default value is -1, which means it is ignored. |
| 285 int hint_stack_parameter_count_; | 285 int hint_stack_parameter_count_; |
| 286 StubFunctionMode function_mode_; | 286 StubFunctionMode function_mode_; |
| 287 Register* register_params_; | 287 Register* register_params_; |
| 288 Address deoptimization_handler_; | 288 Address deoptimization_handler_; |
| 289 | 289 |
| 290 int environment_length() const { | 290 int environment_length() const { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 346 static Handle<Code> GetUninitialized(Isolate* isolate) { | 346 static Handle<Code> GetUninitialized(Isolate* isolate) { |
| 347 SubClass::GenerateAheadOfTime(isolate); | 347 SubClass::GenerateAheadOfTime(isolate); |
| 348 return SubClass().GetCode(isolate); | 348 return SubClass().GetCode(isolate); |
| 349 } | 349 } |
| 350 | 350 |
| 351 virtual void InitializeInterfaceDescriptor( | 351 virtual void InitializeInterfaceDescriptor( |
| 352 Isolate* isolate, | 352 Isolate* isolate, |
| 353 CodeStubInterfaceDescriptor* descriptor) = 0; | 353 CodeStubInterfaceDescriptor* descriptor) = 0; |
| 354 | 354 |
| 355 // Retrieve the code for the stub. Generate the code if needed. | 355 // Retrieve the code for the stub. Generate the code if needed. |
| 356 virtual Handle<Code> GenerateCode() = 0; | 356 virtual Handle<Code> GenerateCode(Isolate* isolate) = 0; |
| 357 | 357 |
| 358 virtual int NotMissMinorKey() = 0; | 358 virtual int NotMissMinorKey() = 0; |
| 359 | 359 |
| 360 Handle<Code> GenerateLightweightMissCode(Isolate* isolate); | 360 Handle<Code> GenerateLightweightMissCode(Isolate* isolate); |
| 361 | 361 |
| 362 template<class StateType> | 362 template<class StateType> |
| 363 void TraceTransition(StateType from, StateType to); | 363 void TraceTransition(StateType from, StateType to); |
| 364 | 364 |
| 365 private: | 365 private: |
| 366 class MinorKeyBits: public BitField<int, 0, kStubMinorKeyBits - 1> {}; | 366 class MinorKeyBits: public BitField<int, 0, kStubMinorKeyBits - 1> {}; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 446 virtual void BeforeCall(MacroAssembler* masm) const {} | 446 virtual void BeforeCall(MacroAssembler* masm) const {} |
| 447 | 447 |
| 448 virtual void AfterCall(MacroAssembler* masm) const {} | 448 virtual void AfterCall(MacroAssembler* masm) const {} |
| 449 }; | 449 }; |
| 450 | 450 |
| 451 | 451 |
| 452 class ToNumberStub: public HydrogenCodeStub { | 452 class ToNumberStub: public HydrogenCodeStub { |
| 453 public: | 453 public: |
| 454 ToNumberStub() { } | 454 ToNumberStub() { } |
| 455 | 455 |
| 456 virtual Handle<Code> GenerateCode(); | 456 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 457 | 457 |
| 458 virtual void InitializeInterfaceDescriptor( | 458 virtual void InitializeInterfaceDescriptor( |
| 459 Isolate* isolate, | 459 Isolate* isolate, |
| 460 CodeStubInterfaceDescriptor* descriptor); | 460 CodeStubInterfaceDescriptor* descriptor); |
| 461 | 461 |
| 462 private: | 462 private: |
| 463 Major MajorKey() { return ToNumber; } | 463 Major MajorKey() { return ToNumber; } |
| 464 int NotMissMinorKey() { return 0; } | 464 int NotMissMinorKey() { return 0; } |
| 465 }; | 465 }; |
| 466 | 466 |
| 467 | 467 |
| 468 class FastNewClosureStub : public HydrogenCodeStub { | 468 class FastNewClosureStub : public HydrogenCodeStub { |
| 469 public: | 469 public: |
| 470 explicit FastNewClosureStub(LanguageMode language_mode, bool is_generator) | 470 explicit FastNewClosureStub(LanguageMode language_mode, bool is_generator) |
| 471 : language_mode_(language_mode), | 471 : language_mode_(language_mode), |
| 472 is_generator_(is_generator) { } | 472 is_generator_(is_generator) { } |
| 473 | 473 |
| 474 virtual Handle<Code> GenerateCode(); | 474 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 475 | 475 |
| 476 virtual void InitializeInterfaceDescriptor( | 476 virtual void InitializeInterfaceDescriptor( |
| 477 Isolate* isolate, | 477 Isolate* isolate, |
| 478 CodeStubInterfaceDescriptor* descriptor); | 478 CodeStubInterfaceDescriptor* descriptor); |
| 479 | 479 |
| 480 static void InstallDescriptors(Isolate* isolate); | 480 static void InstallDescriptors(Isolate* isolate); |
| 481 | 481 |
| 482 LanguageMode language_mode() const { return language_mode_; } | 482 LanguageMode language_mode() const { return language_mode_; } |
| 483 bool is_generator() const { return is_generator_; } | 483 bool is_generator() const { return is_generator_; } |
| 484 | 484 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 532 int MinorKey() { return slots_; } | 532 int MinorKey() { return slots_; } |
| 533 }; | 533 }; |
| 534 | 534 |
| 535 class StoreGlobalStub : public HydrogenCodeStub { | 535 class StoreGlobalStub : public HydrogenCodeStub { |
| 536 public: | 536 public: |
| 537 StoreGlobalStub(StrictModeFlag strict_mode, bool is_constant) { | 537 StoreGlobalStub(StrictModeFlag strict_mode, bool is_constant) { |
| 538 bit_field_ = StrictModeBits::encode(strict_mode) | | 538 bit_field_ = StrictModeBits::encode(strict_mode) | |
| 539 IsConstantBits::encode(is_constant); | 539 IsConstantBits::encode(is_constant); |
| 540 } | 540 } |
| 541 | 541 |
| 542 virtual Handle<Code> GenerateCode(); | 542 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 543 | 543 |
| 544 virtual void InitializeInterfaceDescriptor( | 544 virtual void InitializeInterfaceDescriptor( |
| 545 Isolate* isolate, | 545 Isolate* isolate, |
| 546 CodeStubInterfaceDescriptor* descriptor); | 546 CodeStubInterfaceDescriptor* descriptor); |
| 547 | 547 |
| 548 virtual Code::Kind GetCodeKind() const { return Code::STORE_IC; } | 548 virtual Code::Kind GetCodeKind() const { return Code::STORE_IC; } |
| 549 virtual InlineCacheState GetICState() { return MONOMORPHIC; } | 549 virtual InlineCacheState GetICState() { return MONOMORPHIC; } |
| 550 virtual Code::ExtraICState GetExtraICState() { return bit_field_; } | 550 virtual Code::ExtraICState GetExtraICState() { return bit_field_; } |
| 551 | 551 |
| 552 bool is_constant() { | 552 bool is_constant() { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 614 return FAST_ELEMENTS; | 614 return FAST_ELEMENTS; |
| 615 case CLONE_DOUBLE_ELEMENTS: | 615 case CLONE_DOUBLE_ELEMENTS: |
| 616 return FAST_DOUBLE_ELEMENTS; | 616 return FAST_DOUBLE_ELEMENTS; |
| 617 case CLONE_ANY_ELEMENTS: | 617 case CLONE_ANY_ELEMENTS: |
| 618 /*fall-through*/; | 618 /*fall-through*/; |
| 619 } | 619 } |
| 620 UNREACHABLE(); | 620 UNREACHABLE(); |
| 621 return LAST_ELEMENTS_KIND; | 621 return LAST_ELEMENTS_KIND; |
| 622 } | 622 } |
| 623 | 623 |
| 624 virtual Handle<Code> GenerateCode(); | 624 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 625 | 625 |
| 626 virtual void InitializeInterfaceDescriptor( | 626 virtual void InitializeInterfaceDescriptor( |
| 627 Isolate* isolate, | 627 Isolate* isolate, |
| 628 CodeStubInterfaceDescriptor* descriptor); | 628 CodeStubInterfaceDescriptor* descriptor); |
| 629 | 629 |
| 630 private: | 630 private: |
| 631 Mode mode_; | 631 Mode mode_; |
| 632 AllocationSiteMode allocation_site_mode_; | 632 AllocationSiteMode allocation_site_mode_; |
| 633 int length_; | 633 int length_; |
| 634 | 634 |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 654 static const int kMaximumClonedProperties = 6; | 654 static const int kMaximumClonedProperties = 6; |
| 655 | 655 |
| 656 explicit FastCloneShallowObjectStub(int length) | 656 explicit FastCloneShallowObjectStub(int length) |
| 657 : length_(length) { | 657 : length_(length) { |
| 658 ASSERT_GE(length_, 0); | 658 ASSERT_GE(length_, 0); |
| 659 ASSERT_LE(length_, kMaximumClonedProperties); | 659 ASSERT_LE(length_, kMaximumClonedProperties); |
| 660 } | 660 } |
| 661 | 661 |
| 662 int length() const { return length_; } | 662 int length() const { return length_; } |
| 663 | 663 |
| 664 virtual Handle<Code> GenerateCode(); | 664 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 665 | 665 |
| 666 virtual void InitializeInterfaceDescriptor( | 666 virtual void InitializeInterfaceDescriptor( |
| 667 Isolate* isolate, | 667 Isolate* isolate, |
| 668 CodeStubInterfaceDescriptor* descriptor); | 668 CodeStubInterfaceDescriptor* descriptor); |
| 669 | 669 |
| 670 private: | 670 private: |
| 671 int length_; | 671 int length_; |
| 672 | 672 |
| 673 Major MajorKey() { return FastCloneShallowObject; } | 673 Major MajorKey() { return FastCloneShallowObject; } |
| 674 int NotMissMinorKey() { return length_; } | 674 int NotMissMinorKey() { return length_; } |
| 675 | 675 |
| 676 DISALLOW_COPY_AND_ASSIGN(FastCloneShallowObjectStub); | 676 DISALLOW_COPY_AND_ASSIGN(FastCloneShallowObjectStub); |
| 677 }; | 677 }; |
| 678 | 678 |
| 679 | 679 |
| 680 class CreateAllocationSiteStub : public HydrogenCodeStub { | 680 class CreateAllocationSiteStub : public HydrogenCodeStub { |
| 681 public: | 681 public: |
| 682 explicit CreateAllocationSiteStub() { } | 682 explicit CreateAllocationSiteStub() { } |
| 683 | 683 |
| 684 virtual Handle<Code> GenerateCode(); | 684 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 685 | 685 |
| 686 virtual bool IsPregenerated() { return true; } | 686 virtual bool IsPregenerated() { return true; } |
| 687 | 687 |
| 688 static void GenerateAheadOfTime(Isolate* isolate); | 688 static void GenerateAheadOfTime(Isolate* isolate); |
| 689 | 689 |
| 690 virtual void InitializeInterfaceDescriptor( | 690 virtual void InitializeInterfaceDescriptor( |
| 691 Isolate* isolate, | 691 Isolate* isolate, |
| 692 CodeStubInterfaceDescriptor* descriptor); | 692 CodeStubInterfaceDescriptor* descriptor); |
| 693 | 693 |
| 694 private: | 694 private: |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 891 }; | 891 }; |
| 892 | 892 |
| 893 | 893 |
| 894 class LoadFieldStub: public HandlerStub { | 894 class LoadFieldStub: public HandlerStub { |
| 895 public: | 895 public: |
| 896 LoadFieldStub(bool inobject, int index, Representation representation) | 896 LoadFieldStub(bool inobject, int index, Representation representation) |
| 897 : HandlerStub() { | 897 : HandlerStub() { |
| 898 Initialize(Code::LOAD_IC, inobject, index, representation); | 898 Initialize(Code::LOAD_IC, inobject, index, representation); |
| 899 } | 899 } |
| 900 | 900 |
| 901 virtual Handle<Code> GenerateCode(); | 901 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 902 | 902 |
| 903 virtual void InitializeInterfaceDescriptor( | 903 virtual void InitializeInterfaceDescriptor( |
| 904 Isolate* isolate, | 904 Isolate* isolate, |
| 905 CodeStubInterfaceDescriptor* descriptor); | 905 CodeStubInterfaceDescriptor* descriptor); |
| 906 | 906 |
| 907 Representation representation() { | 907 Representation representation() { |
| 908 if (unboxed_double()) return Representation::Double(); | 908 if (unboxed_double()) return Representation::Double(); |
| 909 return Representation::Tagged(); | 909 return Representation::Tagged(); |
| 910 } | 910 } |
| 911 | 911 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 960 public: | 960 public: |
| 961 KeyedLoadFieldStub(bool inobject, int index, Representation representation) | 961 KeyedLoadFieldStub(bool inobject, int index, Representation representation) |
| 962 : LoadFieldStub() { | 962 : LoadFieldStub() { |
| 963 Initialize(Code::KEYED_LOAD_IC, inobject, index, representation); | 963 Initialize(Code::KEYED_LOAD_IC, inobject, index, representation); |
| 964 } | 964 } |
| 965 | 965 |
| 966 virtual void InitializeInterfaceDescriptor( | 966 virtual void InitializeInterfaceDescriptor( |
| 967 Isolate* isolate, | 967 Isolate* isolate, |
| 968 CodeStubInterfaceDescriptor* descriptor); | 968 CodeStubInterfaceDescriptor* descriptor); |
| 969 | 969 |
| 970 virtual Handle<Code> GenerateCode(); | 970 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 971 | 971 |
| 972 private: | 972 private: |
| 973 virtual CodeStub::Major MajorKey() { return KeyedLoadField; } | 973 virtual CodeStub::Major MajorKey() { return KeyedLoadField; } |
| 974 }; | 974 }; |
| 975 | 975 |
| 976 | 976 |
| 977 class BinaryOpStub: public PlatformCodeStub { | 977 class BinaryOpStub: public PlatformCodeStub { |
| 978 public: | 978 public: |
| 979 BinaryOpStub(Token::Value op, OverwriteMode mode) | 979 BinaryOpStub(Token::Value op, OverwriteMode mode) |
| 980 : op_(op), | 980 : op_(op), |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1231 return MEGAMORPHIC; | 1231 return MEGAMORPHIC; |
| 1232 } else if (state_.Contains(MONOMORPHIC_MAP)) { | 1232 } else if (state_.Contains(MONOMORPHIC_MAP)) { |
| 1233 return MONOMORPHIC; | 1233 return MONOMORPHIC; |
| 1234 } else { | 1234 } else { |
| 1235 return PREMONOMORPHIC; | 1235 return PREMONOMORPHIC; |
| 1236 } | 1236 } |
| 1237 } | 1237 } |
| 1238 | 1238 |
| 1239 virtual Code::Kind GetCodeKind() const { return Code::COMPARE_NIL_IC; } | 1239 virtual Code::Kind GetCodeKind() const { return Code::COMPARE_NIL_IC; } |
| 1240 | 1240 |
| 1241 Handle<Code> GenerateCode(); | 1241 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 1242 | 1242 |
| 1243 virtual Code::ExtraICState GetExtraICState() { | 1243 virtual Code::ExtraICState GetExtraICState() { |
| 1244 return NilValueField::encode(nil_value_) | | 1244 return NilValueField::encode(nil_value_) | |
| 1245 TypesField::encode(state_.ToIntegral()); | 1245 TypesField::encode(state_.ToIntegral()); |
| 1246 } | 1246 } |
| 1247 | 1247 |
| 1248 void UpdateStatus(Handle<Object> object); | 1248 void UpdateStatus(Handle<Object> object); |
| 1249 | 1249 |
| 1250 bool IsMonomorphic() const { return state_.Contains(MONOMORPHIC_MAP); } | 1250 bool IsMonomorphic() const { return state_.Contains(MONOMORPHIC_MAP); } |
| 1251 NilValue GetNilValue() const { return nil_value_; } | 1251 NilValue GetNilValue() const { return nil_value_; } |
| (...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1756 } | 1756 } |
| 1757 | 1757 |
| 1758 bool is_js_array() const { | 1758 bool is_js_array() const { |
| 1759 return IsJSArrayBits::decode(bit_field_); | 1759 return IsJSArrayBits::decode(bit_field_); |
| 1760 } | 1760 } |
| 1761 | 1761 |
| 1762 ElementsKind elements_kind() const { | 1762 ElementsKind elements_kind() const { |
| 1763 return ElementsKindBits::decode(bit_field_); | 1763 return ElementsKindBits::decode(bit_field_); |
| 1764 } | 1764 } |
| 1765 | 1765 |
| 1766 virtual Handle<Code> GenerateCode(); | 1766 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 1767 | 1767 |
| 1768 virtual void InitializeInterfaceDescriptor( | 1768 virtual void InitializeInterfaceDescriptor( |
| 1769 Isolate* isolate, | 1769 Isolate* isolate, |
| 1770 CodeStubInterfaceDescriptor* descriptor); | 1770 CodeStubInterfaceDescriptor* descriptor); |
| 1771 | 1771 |
| 1772 private: | 1772 private: |
| 1773 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; | 1773 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; |
| 1774 class IsJSArrayBits: public BitField<bool, 8, 1> {}; | 1774 class IsJSArrayBits: public BitField<bool, 8, 1> {}; |
| 1775 uint32_t bit_field_; | 1775 uint32_t bit_field_; |
| 1776 | 1776 |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 1796 } | 1796 } |
| 1797 | 1797 |
| 1798 ElementsKind elements_kind() const { | 1798 ElementsKind elements_kind() const { |
| 1799 return ElementsKindBits::decode(bit_field_); | 1799 return ElementsKindBits::decode(bit_field_); |
| 1800 } | 1800 } |
| 1801 | 1801 |
| 1802 KeyedAccessStoreMode store_mode() const { | 1802 KeyedAccessStoreMode store_mode() const { |
| 1803 return StoreModeBits::decode(bit_field_); | 1803 return StoreModeBits::decode(bit_field_); |
| 1804 } | 1804 } |
| 1805 | 1805 |
| 1806 virtual Handle<Code> GenerateCode(); | 1806 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 1807 | 1807 |
| 1808 virtual void InitializeInterfaceDescriptor( | 1808 virtual void InitializeInterfaceDescriptor( |
| 1809 Isolate* isolate, | 1809 Isolate* isolate, |
| 1810 CodeStubInterfaceDescriptor* descriptor); | 1810 CodeStubInterfaceDescriptor* descriptor); |
| 1811 | 1811 |
| 1812 private: | 1812 private: |
| 1813 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; | 1813 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; |
| 1814 class StoreModeBits: public BitField<KeyedAccessStoreMode, 8, 4> {}; | 1814 class StoreModeBits: public BitField<KeyedAccessStoreMode, 8, 4> {}; |
| 1815 class IsJSArrayBits: public BitField<bool, 12, 1> {}; | 1815 class IsJSArrayBits: public BitField<bool, 12, 1> {}; |
| 1816 uint32_t bit_field_; | 1816 uint32_t bit_field_; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 1831 } | 1831 } |
| 1832 | 1832 |
| 1833 ElementsKind from_kind() const { | 1833 ElementsKind from_kind() const { |
| 1834 return FromKindBits::decode(bit_field_); | 1834 return FromKindBits::decode(bit_field_); |
| 1835 } | 1835 } |
| 1836 | 1836 |
| 1837 ElementsKind to_kind() const { | 1837 ElementsKind to_kind() const { |
| 1838 return ToKindBits::decode(bit_field_); | 1838 return ToKindBits::decode(bit_field_); |
| 1839 } | 1839 } |
| 1840 | 1840 |
| 1841 virtual Handle<Code> GenerateCode(); | 1841 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 1842 | 1842 |
| 1843 virtual void InitializeInterfaceDescriptor( | 1843 virtual void InitializeInterfaceDescriptor( |
| 1844 Isolate* isolate, | 1844 Isolate* isolate, |
| 1845 CodeStubInterfaceDescriptor* descriptor); | 1845 CodeStubInterfaceDescriptor* descriptor); |
| 1846 | 1846 |
| 1847 private: | 1847 private: |
| 1848 class FromKindBits: public BitField<ElementsKind, 8, 8> {}; | 1848 class FromKindBits: public BitField<ElementsKind, 8, 8> {}; |
| 1849 class ToKindBits: public BitField<ElementsKind, 0, 8> {}; | 1849 class ToKindBits: public BitField<ElementsKind, 0, 8> {}; |
| 1850 uint32_t bit_field_; | 1850 uint32_t bit_field_; |
| 1851 | 1851 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1927 | 1927 |
| 1928 class ArrayNoArgumentConstructorStub : public ArrayConstructorStubBase { | 1928 class ArrayNoArgumentConstructorStub : public ArrayConstructorStubBase { |
| 1929 public: | 1929 public: |
| 1930 ArrayNoArgumentConstructorStub( | 1930 ArrayNoArgumentConstructorStub( |
| 1931 ElementsKind kind, | 1931 ElementsKind kind, |
| 1932 ContextCheckMode context_mode = CONTEXT_CHECK_REQUIRED, | 1932 ContextCheckMode context_mode = CONTEXT_CHECK_REQUIRED, |
| 1933 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) | 1933 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) |
| 1934 : ArrayConstructorStubBase(kind, context_mode, override_mode) { | 1934 : ArrayConstructorStubBase(kind, context_mode, override_mode) { |
| 1935 } | 1935 } |
| 1936 | 1936 |
| 1937 virtual Handle<Code> GenerateCode(); | 1937 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 1938 | 1938 |
| 1939 virtual void InitializeInterfaceDescriptor( | 1939 virtual void InitializeInterfaceDescriptor( |
| 1940 Isolate* isolate, | 1940 Isolate* isolate, |
| 1941 CodeStubInterfaceDescriptor* descriptor); | 1941 CodeStubInterfaceDescriptor* descriptor); |
| 1942 | 1942 |
| 1943 private: | 1943 private: |
| 1944 Major MajorKey() { return ArrayNoArgumentConstructor; } | 1944 Major MajorKey() { return ArrayNoArgumentConstructor; } |
| 1945 | 1945 |
| 1946 DISALLOW_COPY_AND_ASSIGN(ArrayNoArgumentConstructorStub); | 1946 DISALLOW_COPY_AND_ASSIGN(ArrayNoArgumentConstructorStub); |
| 1947 }; | 1947 }; |
| 1948 | 1948 |
| 1949 | 1949 |
| 1950 class ArraySingleArgumentConstructorStub : public ArrayConstructorStubBase { | 1950 class ArraySingleArgumentConstructorStub : public ArrayConstructorStubBase { |
| 1951 public: | 1951 public: |
| 1952 ArraySingleArgumentConstructorStub( | 1952 ArraySingleArgumentConstructorStub( |
| 1953 ElementsKind kind, | 1953 ElementsKind kind, |
| 1954 ContextCheckMode context_mode = CONTEXT_CHECK_REQUIRED, | 1954 ContextCheckMode context_mode = CONTEXT_CHECK_REQUIRED, |
| 1955 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) | 1955 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) |
| 1956 : ArrayConstructorStubBase(kind, context_mode, override_mode) { | 1956 : ArrayConstructorStubBase(kind, context_mode, override_mode) { |
| 1957 } | 1957 } |
| 1958 | 1958 |
| 1959 virtual Handle<Code> GenerateCode(); | 1959 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 1960 | 1960 |
| 1961 virtual void InitializeInterfaceDescriptor( | 1961 virtual void InitializeInterfaceDescriptor( |
| 1962 Isolate* isolate, | 1962 Isolate* isolate, |
| 1963 CodeStubInterfaceDescriptor* descriptor); | 1963 CodeStubInterfaceDescriptor* descriptor); |
| 1964 | 1964 |
| 1965 private: | 1965 private: |
| 1966 Major MajorKey() { return ArraySingleArgumentConstructor; } | 1966 Major MajorKey() { return ArraySingleArgumentConstructor; } |
| 1967 | 1967 |
| 1968 DISALLOW_COPY_AND_ASSIGN(ArraySingleArgumentConstructorStub); | 1968 DISALLOW_COPY_AND_ASSIGN(ArraySingleArgumentConstructorStub); |
| 1969 }; | 1969 }; |
| 1970 | 1970 |
| 1971 | 1971 |
| 1972 class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase { | 1972 class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase { |
| 1973 public: | 1973 public: |
| 1974 ArrayNArgumentsConstructorStub( | 1974 ArrayNArgumentsConstructorStub( |
| 1975 ElementsKind kind, | 1975 ElementsKind kind, |
| 1976 ContextCheckMode context_mode = CONTEXT_CHECK_REQUIRED, | 1976 ContextCheckMode context_mode = CONTEXT_CHECK_REQUIRED, |
| 1977 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) | 1977 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) |
| 1978 : ArrayConstructorStubBase(kind, context_mode, override_mode) { | 1978 : ArrayConstructorStubBase(kind, context_mode, override_mode) { |
| 1979 } | 1979 } |
| 1980 | 1980 |
| 1981 virtual Handle<Code> GenerateCode(); | 1981 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 1982 | 1982 |
| 1983 virtual void InitializeInterfaceDescriptor( | 1983 virtual void InitializeInterfaceDescriptor( |
| 1984 Isolate* isolate, | 1984 Isolate* isolate, |
| 1985 CodeStubInterfaceDescriptor* descriptor); | 1985 CodeStubInterfaceDescriptor* descriptor); |
| 1986 | 1986 |
| 1987 private: | 1987 private: |
| 1988 Major MajorKey() { return ArrayNArgumentsConstructor; } | 1988 Major MajorKey() { return ArrayNArgumentsConstructor; } |
| 1989 | 1989 |
| 1990 DISALLOW_COPY_AND_ASSIGN(ArrayNArgumentsConstructorStub); | 1990 DISALLOW_COPY_AND_ASSIGN(ArrayNArgumentsConstructorStub); |
| 1991 }; | 1991 }; |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 2014 DISALLOW_COPY_AND_ASSIGN(InternalArrayConstructorStubBase); | 2014 DISALLOW_COPY_AND_ASSIGN(InternalArrayConstructorStubBase); |
| 2015 }; | 2015 }; |
| 2016 | 2016 |
| 2017 | 2017 |
| 2018 class InternalArrayNoArgumentConstructorStub : public | 2018 class InternalArrayNoArgumentConstructorStub : public |
| 2019 InternalArrayConstructorStubBase { | 2019 InternalArrayConstructorStubBase { |
| 2020 public: | 2020 public: |
| 2021 explicit InternalArrayNoArgumentConstructorStub(ElementsKind kind) | 2021 explicit InternalArrayNoArgumentConstructorStub(ElementsKind kind) |
| 2022 : InternalArrayConstructorStubBase(kind) { } | 2022 : InternalArrayConstructorStubBase(kind) { } |
| 2023 | 2023 |
| 2024 virtual Handle<Code> GenerateCode(); | 2024 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 2025 | 2025 |
| 2026 virtual void InitializeInterfaceDescriptor( | 2026 virtual void InitializeInterfaceDescriptor( |
| 2027 Isolate* isolate, | 2027 Isolate* isolate, |
| 2028 CodeStubInterfaceDescriptor* descriptor); | 2028 CodeStubInterfaceDescriptor* descriptor); |
| 2029 | 2029 |
| 2030 private: | 2030 private: |
| 2031 Major MajorKey() { return InternalArrayNoArgumentConstructor; } | 2031 Major MajorKey() { return InternalArrayNoArgumentConstructor; } |
| 2032 | 2032 |
| 2033 DISALLOW_COPY_AND_ASSIGN(InternalArrayNoArgumentConstructorStub); | 2033 DISALLOW_COPY_AND_ASSIGN(InternalArrayNoArgumentConstructorStub); |
| 2034 }; | 2034 }; |
| 2035 | 2035 |
| 2036 | 2036 |
| 2037 class InternalArraySingleArgumentConstructorStub : public | 2037 class InternalArraySingleArgumentConstructorStub : public |
| 2038 InternalArrayConstructorStubBase { | 2038 InternalArrayConstructorStubBase { |
| 2039 public: | 2039 public: |
| 2040 explicit InternalArraySingleArgumentConstructorStub(ElementsKind kind) | 2040 explicit InternalArraySingleArgumentConstructorStub(ElementsKind kind) |
| 2041 : InternalArrayConstructorStubBase(kind) { } | 2041 : InternalArrayConstructorStubBase(kind) { } |
| 2042 | 2042 |
| 2043 virtual Handle<Code> GenerateCode(); | 2043 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 2044 | 2044 |
| 2045 virtual void InitializeInterfaceDescriptor( | 2045 virtual void InitializeInterfaceDescriptor( |
| 2046 Isolate* isolate, | 2046 Isolate* isolate, |
| 2047 CodeStubInterfaceDescriptor* descriptor); | 2047 CodeStubInterfaceDescriptor* descriptor); |
| 2048 | 2048 |
| 2049 private: | 2049 private: |
| 2050 Major MajorKey() { return InternalArraySingleArgumentConstructor; } | 2050 Major MajorKey() { return InternalArraySingleArgumentConstructor; } |
| 2051 | 2051 |
| 2052 DISALLOW_COPY_AND_ASSIGN(InternalArraySingleArgumentConstructorStub); | 2052 DISALLOW_COPY_AND_ASSIGN(InternalArraySingleArgumentConstructorStub); |
| 2053 }; | 2053 }; |
| 2054 | 2054 |
| 2055 | 2055 |
| 2056 class InternalArrayNArgumentsConstructorStub : public | 2056 class InternalArrayNArgumentsConstructorStub : public |
| 2057 InternalArrayConstructorStubBase { | 2057 InternalArrayConstructorStubBase { |
| 2058 public: | 2058 public: |
| 2059 explicit InternalArrayNArgumentsConstructorStub(ElementsKind kind) | 2059 explicit InternalArrayNArgumentsConstructorStub(ElementsKind kind) |
| 2060 : InternalArrayConstructorStubBase(kind) { } | 2060 : InternalArrayConstructorStubBase(kind) { } |
| 2061 | 2061 |
| 2062 virtual Handle<Code> GenerateCode(); | 2062 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 2063 | 2063 |
| 2064 virtual void InitializeInterfaceDescriptor( | 2064 virtual void InitializeInterfaceDescriptor( |
| 2065 Isolate* isolate, | 2065 Isolate* isolate, |
| 2066 CodeStubInterfaceDescriptor* descriptor); | 2066 CodeStubInterfaceDescriptor* descriptor); |
| 2067 | 2067 |
| 2068 private: | 2068 private: |
| 2069 Major MajorKey() { return InternalArrayNArgumentsConstructor; } | 2069 Major MajorKey() { return InternalArrayNArgumentsConstructor; } |
| 2070 | 2070 |
| 2071 DISALLOW_COPY_AND_ASSIGN(InternalArrayNArgumentsConstructorStub); | 2071 DISALLOW_COPY_AND_ASSIGN(InternalArrayNArgumentsConstructorStub); |
| 2072 }; | 2072 }; |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2141 }; | 2141 }; |
| 2142 | 2142 |
| 2143 explicit ToBooleanStub(Types types = Types()) | 2143 explicit ToBooleanStub(Types types = Types()) |
| 2144 : types_(types) { } | 2144 : types_(types) { } |
| 2145 explicit ToBooleanStub(Code::ExtraICState state) | 2145 explicit ToBooleanStub(Code::ExtraICState state) |
| 2146 : types_(static_cast<byte>(state)) { } | 2146 : types_(static_cast<byte>(state)) { } |
| 2147 | 2147 |
| 2148 bool UpdateStatus(Handle<Object> object); | 2148 bool UpdateStatus(Handle<Object> object); |
| 2149 Types GetTypes() { return types_; } | 2149 Types GetTypes() { return types_; } |
| 2150 | 2150 |
| 2151 virtual Handle<Code> GenerateCode(); | 2151 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 2152 virtual void InitializeInterfaceDescriptor( | 2152 virtual void InitializeInterfaceDescriptor( |
| 2153 Isolate* isolate, | 2153 Isolate* isolate, |
| 2154 CodeStubInterfaceDescriptor* descriptor); | 2154 CodeStubInterfaceDescriptor* descriptor); |
| 2155 | 2155 |
| 2156 virtual Code::Kind GetCodeKind() const { return Code::TO_BOOLEAN_IC; } | 2156 virtual Code::Kind GetCodeKind() const { return Code::TO_BOOLEAN_IC; } |
| 2157 virtual void PrintState(StringStream* stream); | 2157 virtual void PrintState(StringStream* stream); |
| 2158 | 2158 |
| 2159 virtual bool SometimesSetsUpAFrame() { return false; } | 2159 virtual bool SometimesSetsUpAFrame() { return false; } |
| 2160 | 2160 |
| 2161 static void InitializeForIsolate(Isolate* isolate) { | 2161 static void InitializeForIsolate(Isolate* isolate) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2201 : from_kind_(from_kind), | 2201 : from_kind_(from_kind), |
| 2202 to_kind_(to_kind), | 2202 to_kind_(to_kind), |
| 2203 is_jsarray_(is_jsarray), | 2203 is_jsarray_(is_jsarray), |
| 2204 store_mode_(store_mode) {} | 2204 store_mode_(store_mode) {} |
| 2205 | 2205 |
| 2206 ElementsKind from_kind() const { return from_kind_; } | 2206 ElementsKind from_kind() const { return from_kind_; } |
| 2207 ElementsKind to_kind() const { return to_kind_; } | 2207 ElementsKind to_kind() const { return to_kind_; } |
| 2208 bool is_jsarray() const { return is_jsarray_; } | 2208 bool is_jsarray() const { return is_jsarray_; } |
| 2209 KeyedAccessStoreMode store_mode() const { return store_mode_; } | 2209 KeyedAccessStoreMode store_mode() const { return store_mode_; } |
| 2210 | 2210 |
| 2211 Handle<Code> GenerateCode(); | 2211 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 2212 | 2212 |
| 2213 void InitializeInterfaceDescriptor( | 2213 void InitializeInterfaceDescriptor( |
| 2214 Isolate* isolate, | 2214 Isolate* isolate, |
| 2215 CodeStubInterfaceDescriptor* descriptor); | 2215 CodeStubInterfaceDescriptor* descriptor); |
| 2216 | 2216 |
| 2217 private: | 2217 private: |
| 2218 class FromBits: public BitField<ElementsKind, 0, 8> {}; | 2218 class FromBits: public BitField<ElementsKind, 0, 8> {}; |
| 2219 class ToBits: public BitField<ElementsKind, 8, 8> {}; | 2219 class ToBits: public BitField<ElementsKind, 8, 8> {}; |
| 2220 class IsJSArrayBits: public BitField<bool, 16, 1> {}; | 2220 class IsJSArrayBits: public BitField<bool, 16, 1> {}; |
| 2221 class StoreModeBits: public BitField<KeyedAccessStoreMode, 17, 4> {}; | 2221 class StoreModeBits: public BitField<KeyedAccessStoreMode, 17, 4> {}; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2302 int MinorKey() { return 0; } | 2302 int MinorKey() { return 0; } |
| 2303 | 2303 |
| 2304 void Generate(MacroAssembler* masm); | 2304 void Generate(MacroAssembler* masm); |
| 2305 | 2305 |
| 2306 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub); | 2306 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub); |
| 2307 }; | 2307 }; |
| 2308 | 2308 |
| 2309 } } // namespace v8::internal | 2309 } } // namespace v8::internal |
| 2310 | 2310 |
| 2311 #endif // V8_CODE_STUBS_H_ | 2311 #endif // V8_CODE_STUBS_H_ |
| OLD | NEW |