| 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 V(BinaryOpIC) \ | 44 V(BinaryOpIC) \ |
| 45 V(BinaryOpICWithAllocationSite) \ | 45 V(BinaryOpICWithAllocationSite) \ |
| 46 V(BinaryOpWithAllocationSite) \ | 46 V(BinaryOpWithAllocationSite) \ |
| 47 V(StringAdd) \ | 47 V(StringAdd) \ |
| 48 V(SubString) \ | 48 V(SubString) \ |
| 49 V(StringCompare) \ | 49 V(StringCompare) \ |
| 50 V(Compare) \ | 50 V(Compare) \ |
| 51 V(CompareIC) \ | 51 V(CompareIC) \ |
| 52 V(CompareNilIC) \ | 52 V(CompareNilIC) \ |
| 53 V(MathPow) \ | 53 V(MathPow) \ |
| 54 V(StringLength) \ | |
| 55 V(FunctionPrototype) \ | 54 V(FunctionPrototype) \ |
| 56 V(StoreArrayLength) \ | 55 V(StoreArrayLength) \ |
| 57 V(RecordWrite) \ | 56 V(RecordWrite) \ |
| 58 V(StoreBufferOverflow) \ | 57 V(StoreBufferOverflow) \ |
| 59 V(RegExpExec) \ | 58 V(RegExpExec) \ |
| 60 V(Instanceof) \ | 59 V(Instanceof) \ |
| 61 V(ConvertToDouble) \ | 60 V(ConvertToDouble) \ |
| 62 V(WriteInt32ToHeapNumber) \ | 61 V(WriteInt32ToHeapNumber) \ |
| 63 V(StackCheck) \ | 62 V(StackCheck) \ |
| 64 V(Interrupt) \ | 63 V(Interrupt) \ |
| (...skipping 26 matching lines...) Expand all Loading... |
| 91 V(StoreArrayLiteralElement) \ | 90 V(StoreArrayLiteralElement) \ |
| 92 V(StubFailureTrampoline) \ | 91 V(StubFailureTrampoline) \ |
| 93 V(ArrayConstructor) \ | 92 V(ArrayConstructor) \ |
| 94 V(InternalArrayConstructor) \ | 93 V(InternalArrayConstructor) \ |
| 95 V(ProfileEntryHook) \ | 94 V(ProfileEntryHook) \ |
| 96 V(StoreGlobal) \ | 95 V(StoreGlobal) \ |
| 97 V(CallApiFunction) \ | 96 V(CallApiFunction) \ |
| 98 V(CallApiGetter) \ | 97 V(CallApiGetter) \ |
| 99 /* IC Handler stubs */ \ | 98 /* IC Handler stubs */ \ |
| 100 V(LoadField) \ | 99 V(LoadField) \ |
| 101 V(KeyedLoadField) | 100 V(KeyedLoadField) \ |
| 101 V(StringLength) \ |
| 102 V(KeyedStringLength) |
| 102 | 103 |
| 103 // List of code stubs only used on ARM platforms. | 104 // List of code stubs only used on ARM platforms. |
| 104 #if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_A64) | 105 #if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_A64) |
| 105 #define CODE_STUB_LIST_ARM(V) \ | 106 #define CODE_STUB_LIST_ARM(V) \ |
| 106 V(GetProperty) \ | 107 V(GetProperty) \ |
| 107 V(SetProperty) \ | 108 V(SetProperty) \ |
| 108 V(InvokeBuiltin) \ | 109 V(InvokeBuiltin) \ |
| 109 V(DirectCEntry) | 110 V(DirectCEntry) |
| 110 #else | 111 #else |
| 111 #define CODE_STUB_LIST_ARM(V) | 112 #define CODE_STUB_LIST_ARM(V) |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 static const int kNumber = 0; | 516 static const int kNumber = 0; |
| 516 | 517 |
| 517 private: | 518 private: |
| 518 virtual Major MajorKey() V8_OVERRIDE { return NumberToString; } | 519 virtual Major MajorKey() V8_OVERRIDE { return NumberToString; } |
| 519 virtual int NotMissMinorKey() V8_OVERRIDE { return 0; } | 520 virtual int NotMissMinorKey() V8_OVERRIDE { return 0; } |
| 520 }; | 521 }; |
| 521 | 522 |
| 522 | 523 |
| 523 class FastNewClosureStub : public HydrogenCodeStub { | 524 class FastNewClosureStub : public HydrogenCodeStub { |
| 524 public: | 525 public: |
| 525 explicit FastNewClosureStub(LanguageMode language_mode, bool is_generator) | 526 explicit FastNewClosureStub(StrictMode strict_mode, bool is_generator) |
| 526 : language_mode_(language_mode), | 527 : strict_mode_(strict_mode), |
| 527 is_generator_(is_generator) { } | 528 is_generator_(is_generator) { } |
| 528 | 529 |
| 529 virtual Handle<Code> GenerateCode(Isolate* isolate); | 530 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 530 | 531 |
| 531 virtual void InitializeInterfaceDescriptor( | 532 virtual void InitializeInterfaceDescriptor( |
| 532 Isolate* isolate, | 533 Isolate* isolate, |
| 533 CodeStubInterfaceDescriptor* descriptor); | 534 CodeStubInterfaceDescriptor* descriptor); |
| 534 | 535 |
| 535 static void InstallDescriptors(Isolate* isolate); | 536 static void InstallDescriptors(Isolate* isolate); |
| 536 | 537 |
| 537 LanguageMode language_mode() const { return language_mode_; } | 538 StrictMode strict_mode() const { return strict_mode_; } |
| 538 bool is_generator() const { return is_generator_; } | 539 bool is_generator() const { return is_generator_; } |
| 539 | 540 |
| 540 private: | 541 private: |
| 541 class StrictModeBits: public BitField<bool, 0, 1> {}; | 542 class StrictModeBits: public BitField<bool, 0, 1> {}; |
| 542 class IsGeneratorBits: public BitField<bool, 1, 1> {}; | 543 class IsGeneratorBits: public BitField<bool, 1, 1> {}; |
| 543 | 544 |
| 544 Major MajorKey() { return FastNewClosure; } | 545 Major MajorKey() { return FastNewClosure; } |
| 545 int NotMissMinorKey() { | 546 int NotMissMinorKey() { |
| 546 return StrictModeBits::encode(language_mode_ != CLASSIC_MODE) | | 547 return StrictModeBits::encode(strict_mode_ == STRICT) | |
| 547 IsGeneratorBits::encode(is_generator_); | 548 IsGeneratorBits::encode(is_generator_); |
| 548 } | 549 } |
| 549 | 550 |
| 550 LanguageMode language_mode_; | 551 StrictMode strict_mode_; |
| 551 bool is_generator_; | 552 bool is_generator_; |
| 552 }; | 553 }; |
| 553 | 554 |
| 554 | 555 |
| 555 class FastNewContextStub V8_FINAL : public HydrogenCodeStub { | 556 class FastNewContextStub V8_FINAL : public HydrogenCodeStub { |
| 556 public: | 557 public: |
| 557 static const int kMaximumSlots = 64; | 558 static const int kMaximumSlots = 64; |
| 558 | 559 |
| 559 explicit FastNewContextStub(int slots) : slots_(slots) { | 560 explicit FastNewContextStub(int slots) : slots_(slots) { |
| 560 ASSERT(slots_ > 0 && slots_ <= kMaximumSlots); | 561 ASSERT(slots_ > 0 && slots_ <= kMaximumSlots); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 | LengthBits::encode(length_); | 653 | LengthBits::encode(length_); |
| 653 } | 654 } |
| 654 }; | 655 }; |
| 655 | 656 |
| 656 | 657 |
| 657 class FastCloneShallowObjectStub : public HydrogenCodeStub { | 658 class FastCloneShallowObjectStub : public HydrogenCodeStub { |
| 658 public: | 659 public: |
| 659 // Maximum number of properties in copied object. | 660 // Maximum number of properties in copied object. |
| 660 static const int kMaximumClonedProperties = 6; | 661 static const int kMaximumClonedProperties = 6; |
| 661 | 662 |
| 662 explicit FastCloneShallowObjectStub(int length) | 663 explicit FastCloneShallowObjectStub(int length) : length_(length) { |
| 663 : length_(length) { | |
| 664 ASSERT_GE(length_, 0); | 664 ASSERT_GE(length_, 0); |
| 665 ASSERT_LE(length_, kMaximumClonedProperties); | 665 ASSERT_LE(length_, kMaximumClonedProperties); |
| 666 } | 666 } |
| 667 | 667 |
| 668 int length() const { return length_; } | 668 int length() const { return length_; } |
| 669 | 669 |
| 670 virtual Handle<Code> GenerateCode(Isolate* isolate); | 670 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 671 | 671 |
| 672 virtual void InitializeInterfaceDescriptor( | 672 virtual void InitializeInterfaceDescriptor( |
| 673 Isolate* isolate, | 673 Isolate* isolate, |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 827 class FunctionPrototypeStub: public ICStub { | 827 class FunctionPrototypeStub: public ICStub { |
| 828 public: | 828 public: |
| 829 explicit FunctionPrototypeStub(Code::Kind kind) : ICStub(kind) { } | 829 explicit FunctionPrototypeStub(Code::Kind kind) : ICStub(kind) { } |
| 830 virtual void Generate(MacroAssembler* masm); | 830 virtual void Generate(MacroAssembler* masm); |
| 831 | 831 |
| 832 private: | 832 private: |
| 833 virtual CodeStub::Major MajorKey() { return FunctionPrototype; } | 833 virtual CodeStub::Major MajorKey() { return FunctionPrototype; } |
| 834 }; | 834 }; |
| 835 | 835 |
| 836 | 836 |
| 837 class StringLengthStub: public ICStub { | |
| 838 public: | |
| 839 explicit StringLengthStub(Code::Kind kind) : ICStub(kind) { } | |
| 840 virtual void Generate(MacroAssembler* masm); | |
| 841 | |
| 842 private: | |
| 843 STATIC_ASSERT(KindBits::kSize == 4); | |
| 844 virtual CodeStub::Major MajorKey() { return StringLength; } | |
| 845 }; | |
| 846 | |
| 847 | |
| 848 class StoreICStub: public ICStub { | 837 class StoreICStub: public ICStub { |
| 849 public: | 838 public: |
| 850 StoreICStub(Code::Kind kind, StrictModeFlag strict_mode) | 839 StoreICStub(Code::Kind kind, StrictMode strict_mode) |
| 851 : ICStub(kind), strict_mode_(strict_mode) { } | 840 : ICStub(kind), strict_mode_(strict_mode) { } |
| 852 | 841 |
| 853 protected: | 842 protected: |
| 854 virtual ExtraICState GetExtraICState() { | 843 virtual ExtraICState GetExtraICState() { |
| 855 return StoreIC::ComputeExtraICState(strict_mode_); | 844 return StoreIC::ComputeExtraICState(strict_mode_); |
| 856 } | 845 } |
| 857 | 846 |
| 858 private: | 847 private: |
| 859 STATIC_ASSERT(KindBits::kSize == 4); | 848 STATIC_ASSERT(KindBits::kSize == 4); |
| 860 class StrictModeBits: public BitField<bool, 4, 1> {}; | 849 class StrictModeBits: public BitField<bool, 4, 1> {}; |
| 861 virtual int MinorKey() { | 850 virtual int MinorKey() { |
| 862 return KindBits::encode(kind()) | StrictModeBits::encode(strict_mode_); | 851 return KindBits::encode(kind()) | StrictModeBits::encode(strict_mode_); |
| 863 } | 852 } |
| 864 | 853 |
| 865 StrictModeFlag strict_mode_; | 854 StrictMode strict_mode_; |
| 866 }; | 855 }; |
| 867 | 856 |
| 868 | 857 |
| 869 class StoreArrayLengthStub: public StoreICStub { | 858 class StoreArrayLengthStub: public StoreICStub { |
| 870 public: | 859 public: |
| 871 explicit StoreArrayLengthStub(Code::Kind kind, StrictModeFlag strict_mode) | 860 explicit StoreArrayLengthStub(Code::Kind kind, StrictMode strict_mode) |
| 872 : StoreICStub(kind, strict_mode) { } | 861 : StoreICStub(kind, strict_mode) { } |
| 873 virtual void Generate(MacroAssembler* masm); | 862 virtual void Generate(MacroAssembler* masm); |
| 874 | 863 |
| 875 private: | 864 private: |
| 876 virtual CodeStub::Major MajorKey() { return StoreArrayLength; } | 865 virtual CodeStub::Major MajorKey() { return StoreArrayLength; } |
| 877 }; | 866 }; |
| 878 | 867 |
| 879 | 868 |
| 880 class HICStub: public HydrogenCodeStub { | 869 class HICStub: public HydrogenCodeStub { |
| 881 public: | 870 public: |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 938 | 927 |
| 939 virtual Code::StubType GetStubType() { return Code::FAST; } | 928 virtual Code::StubType GetStubType() { return Code::FAST; } |
| 940 | 929 |
| 941 protected: | 930 protected: |
| 942 LoadFieldStub() : HandlerStub() { } | 931 LoadFieldStub() : HandlerStub() { } |
| 943 | 932 |
| 944 void Initialize(Code::Kind kind, | 933 void Initialize(Code::Kind kind, |
| 945 bool inobject, | 934 bool inobject, |
| 946 int index, | 935 int index, |
| 947 Representation representation) { | 936 Representation representation) { |
| 948 bool unboxed_double = FLAG_track_double_fields && representation.IsDouble(); | |
| 949 bit_field_ = KindBits::encode(kind) | 937 bit_field_ = KindBits::encode(kind) |
| 950 | InobjectBits::encode(inobject) | 938 | InobjectBits::encode(inobject) |
| 951 | IndexBits::encode(index) | 939 | IndexBits::encode(index) |
| 952 | UnboxedDoubleBits::encode(unboxed_double); | 940 | UnboxedDoubleBits::encode(representation.IsDouble()); |
| 953 } | 941 } |
| 954 | 942 |
| 955 private: | 943 private: |
| 956 STATIC_ASSERT(KindBits::kSize == 4); | 944 STATIC_ASSERT(KindBits::kSize == 4); |
| 957 class InobjectBits: public BitField<bool, 4, 1> {}; | 945 class InobjectBits: public BitField<bool, 4, 1> {}; |
| 958 class IndexBits: public BitField<int, 5, 11> {}; | 946 class IndexBits: public BitField<int, 5, 11> {}; |
| 959 class UnboxedDoubleBits: public BitField<bool, 16, 1> {}; | 947 class UnboxedDoubleBits: public BitField<bool, 16, 1> {}; |
| 960 virtual CodeStub::Major MajorKey() { return LoadField; } | 948 virtual CodeStub::Major MajorKey() { return LoadField; } |
| 961 }; | 949 }; |
| 962 | 950 |
| 963 | 951 |
| 952 class StringLengthStub: public HandlerStub { |
| 953 public: |
| 954 explicit StringLengthStub() : HandlerStub() { |
| 955 Initialize(Code::LOAD_IC); |
| 956 } |
| 957 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 958 virtual void InitializeInterfaceDescriptor( |
| 959 Isolate* isolate, |
| 960 CodeStubInterfaceDescriptor* descriptor); |
| 961 |
| 962 protected: |
| 963 virtual Code::Kind kind() const { |
| 964 return KindBits::decode(bit_field_); |
| 965 } |
| 966 |
| 967 void Initialize(Code::Kind kind) { |
| 968 bit_field_ = KindBits::encode(kind); |
| 969 } |
| 970 |
| 971 private: |
| 972 virtual CodeStub::Major MajorKey() { return StringLength; } |
| 973 }; |
| 974 |
| 975 |
| 976 class KeyedStringLengthStub: public StringLengthStub { |
| 977 public: |
| 978 explicit KeyedStringLengthStub() : StringLengthStub() { |
| 979 Initialize(Code::KEYED_LOAD_IC); |
| 980 } |
| 981 virtual void InitializeInterfaceDescriptor( |
| 982 Isolate* isolate, |
| 983 CodeStubInterfaceDescriptor* descriptor); |
| 984 |
| 985 private: |
| 986 virtual CodeStub::Major MajorKey() { return KeyedStringLength; } |
| 987 }; |
| 988 |
| 989 |
| 964 class StoreGlobalStub : public HandlerStub { | 990 class StoreGlobalStub : public HandlerStub { |
| 965 public: | 991 public: |
| 966 explicit StoreGlobalStub(bool is_constant) { | 992 explicit StoreGlobalStub(bool is_constant, bool check_global) { |
| 967 bit_field_ = IsConstantBits::encode(is_constant); | 993 bit_field_ = IsConstantBits::encode(is_constant) | |
| 994 CheckGlobalBits::encode(check_global); |
| 995 } |
| 996 |
| 997 static Handle<HeapObject> global_placeholder(Isolate* isolate) { |
| 998 return isolate->factory()->uninitialized_value(); |
| 968 } | 999 } |
| 969 | 1000 |
| 970 Handle<Code> GetCodeCopyFromTemplate(Isolate* isolate, | 1001 Handle<Code> GetCodeCopyFromTemplate(Isolate* isolate, |
| 971 Map* receiver_map, | 1002 GlobalObject* global, |
| 972 PropertyCell* cell) { | 1003 PropertyCell* cell) { |
| 973 Handle<Code> code = CodeStub::GetCodeCopyFromTemplate(isolate); | 1004 Handle<Code> code = CodeStub::GetCodeCopyFromTemplate(isolate); |
| 974 // Replace the placeholder cell and global object map with the actual global | 1005 if (check_global()) { |
| 975 // cell and receiver map. | 1006 // Replace the placeholder cell and global object map with the actual |
| 1007 // global cell and receiver map. |
| 1008 code->ReplaceNthObject(1, global_placeholder(isolate)->map(), global); |
| 1009 code->ReplaceNthObject(1, isolate->heap()->meta_map(), global->map()); |
| 1010 } |
| 976 Map* cell_map = isolate->heap()->global_property_cell_map(); | 1011 Map* cell_map = isolate->heap()->global_property_cell_map(); |
| 977 code->ReplaceNthObject(1, cell_map, cell); | 1012 code->ReplaceNthObject(1, cell_map, cell); |
| 978 code->ReplaceNthObject(1, isolate->heap()->meta_map(), receiver_map); | |
| 979 return code; | 1013 return code; |
| 980 } | 1014 } |
| 981 | 1015 |
| 982 virtual Code::Kind kind() const { return Code::STORE_IC; } | 1016 virtual Code::Kind kind() const { return Code::STORE_IC; } |
| 983 | 1017 |
| 984 virtual Handle<Code> GenerateCode(Isolate* isolate); | 1018 virtual Handle<Code> GenerateCode(Isolate* isolate); |
| 985 | 1019 |
| 986 virtual void InitializeInterfaceDescriptor( | 1020 virtual void InitializeInterfaceDescriptor( |
| 987 Isolate* isolate, | 1021 Isolate* isolate, |
| 988 CodeStubInterfaceDescriptor* descriptor); | 1022 CodeStubInterfaceDescriptor* descriptor); |
| 989 | 1023 |
| 990 bool is_constant() { | 1024 bool is_constant() const { |
| 991 return IsConstantBits::decode(bit_field_); | 1025 return IsConstantBits::decode(bit_field_); |
| 992 } | 1026 } |
| 1027 bool check_global() const { |
| 1028 return CheckGlobalBits::decode(bit_field_); |
| 1029 } |
| 993 void set_is_constant(bool value) { | 1030 void set_is_constant(bool value) { |
| 994 bit_field_ = IsConstantBits::update(bit_field_, value); | 1031 bit_field_ = IsConstantBits::update(bit_field_, value); |
| 995 } | 1032 } |
| 996 | 1033 |
| 997 Representation representation() { | 1034 Representation representation() { |
| 998 return Representation::FromKind(RepresentationBits::decode(bit_field_)); | 1035 return Representation::FromKind(RepresentationBits::decode(bit_field_)); |
| 999 } | 1036 } |
| 1000 void set_representation(Representation r) { | 1037 void set_representation(Representation r) { |
| 1001 bit_field_ = RepresentationBits::update(bit_field_, r.kind()); | 1038 bit_field_ = RepresentationBits::update(bit_field_, r.kind()); |
| 1002 } | 1039 } |
| 1003 | 1040 |
| 1004 private: | 1041 private: |
| 1005 Major MajorKey() { return StoreGlobal; } | 1042 Major MajorKey() { return StoreGlobal; } |
| 1006 | 1043 |
| 1007 class IsConstantBits: public BitField<bool, 0, 1> {}; | 1044 class IsConstantBits: public BitField<bool, 0, 1> {}; |
| 1008 class RepresentationBits: public BitField<Representation::Kind, 1, 8> {}; | 1045 class RepresentationBits: public BitField<Representation::Kind, 1, 8> {}; |
| 1046 class CheckGlobalBits: public BitField<bool, 9, 1> {}; |
| 1009 | 1047 |
| 1010 DISALLOW_COPY_AND_ASSIGN(StoreGlobalStub); | 1048 DISALLOW_COPY_AND_ASSIGN(StoreGlobalStub); |
| 1011 }; | 1049 }; |
| 1012 | 1050 |
| 1013 | 1051 |
| 1014 class CallApiFunctionStub : public PlatformCodeStub { | 1052 class CallApiFunctionStub : public PlatformCodeStub { |
| 1015 public: | 1053 public: |
| 1016 CallApiFunctionStub(bool is_store, | 1054 CallApiFunctionStub(bool is_store, |
| 1017 bool call_data_undefined, | 1055 bool call_data_undefined, |
| 1018 int argc) { | 1056 int argc) { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1055 public: | 1093 public: |
| 1056 KeyedLoadFieldStub(bool inobject, int index, Representation representation) | 1094 KeyedLoadFieldStub(bool inobject, int index, Representation representation) |
| 1057 : LoadFieldStub() { | 1095 : LoadFieldStub() { |
| 1058 Initialize(Code::KEYED_LOAD_IC, inobject, index, representation); | 1096 Initialize(Code::KEYED_LOAD_IC, inobject, index, representation); |
| 1059 } | 1097 } |
| 1060 | 1098 |
| 1061 virtual void InitializeInterfaceDescriptor( | 1099 virtual void InitializeInterfaceDescriptor( |
| 1062 Isolate* isolate, | 1100 Isolate* isolate, |
| 1063 CodeStubInterfaceDescriptor* descriptor); | 1101 CodeStubInterfaceDescriptor* descriptor); |
| 1064 | 1102 |
| 1065 virtual Handle<Code> GenerateCode(Isolate* isolate); | |
| 1066 | |
| 1067 private: | 1103 private: |
| 1068 virtual CodeStub::Major MajorKey() { return KeyedLoadField; } | 1104 virtual CodeStub::Major MajorKey() { return KeyedLoadField; } |
| 1069 }; | 1105 }; |
| 1070 | 1106 |
| 1071 | 1107 |
| 1072 class BinaryOpICStub : public HydrogenCodeStub { | 1108 class BinaryOpICStub : public HydrogenCodeStub { |
| 1073 public: | 1109 public: |
| 1074 BinaryOpICStub(Token::Value op, OverwriteMode mode) | 1110 BinaryOpICStub(Token::Value op, OverwriteMode mode) |
| 1075 : HydrogenCodeStub(UNINITIALIZED), state_(op, mode) {} | 1111 : HydrogenCodeStub(UNINITIALIZED), state_(op, mode) {} |
| 1076 | 1112 |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1517 virtual void PrintName(StringStream* stream) { | 1553 virtual void PrintName(StringStream* stream) { |
| 1518 stream->Add("JSConstructEntryStub"); | 1554 stream->Add("JSConstructEntryStub"); |
| 1519 } | 1555 } |
| 1520 }; | 1556 }; |
| 1521 | 1557 |
| 1522 | 1558 |
| 1523 class ArgumentsAccessStub: public PlatformCodeStub { | 1559 class ArgumentsAccessStub: public PlatformCodeStub { |
| 1524 public: | 1560 public: |
| 1525 enum Type { | 1561 enum Type { |
| 1526 READ_ELEMENT, | 1562 READ_ELEMENT, |
| 1527 NEW_NON_STRICT_FAST, | 1563 NEW_SLOPPY_FAST, |
| 1528 NEW_NON_STRICT_SLOW, | 1564 NEW_SLOPPY_SLOW, |
| 1529 NEW_STRICT | 1565 NEW_STRICT |
| 1530 }; | 1566 }; |
| 1531 | 1567 |
| 1532 explicit ArgumentsAccessStub(Type type) : type_(type) { } | 1568 explicit ArgumentsAccessStub(Type type) : type_(type) { } |
| 1533 | 1569 |
| 1534 private: | 1570 private: |
| 1535 Type type_; | 1571 Type type_; |
| 1536 | 1572 |
| 1537 Major MajorKey() { return ArgumentsAccess; } | 1573 Major MajorKey() { return ArgumentsAccess; } |
| 1538 int MinorKey() { return type_; } | 1574 int MinorKey() { return type_; } |
| 1539 | 1575 |
| 1540 void Generate(MacroAssembler* masm); | 1576 void Generate(MacroAssembler* masm); |
| 1541 void GenerateReadElement(MacroAssembler* masm); | 1577 void GenerateReadElement(MacroAssembler* masm); |
| 1542 void GenerateNewStrict(MacroAssembler* masm); | 1578 void GenerateNewStrict(MacroAssembler* masm); |
| 1543 void GenerateNewNonStrictFast(MacroAssembler* masm); | 1579 void GenerateNewSloppyFast(MacroAssembler* masm); |
| 1544 void GenerateNewNonStrictSlow(MacroAssembler* masm); | 1580 void GenerateNewSloppySlow(MacroAssembler* masm); |
| 1545 | 1581 |
| 1546 virtual void PrintName(StringStream* stream); | 1582 virtual void PrintName(StringStream* stream); |
| 1547 }; | 1583 }; |
| 1548 | 1584 |
| 1549 | 1585 |
| 1550 class RegExpExecStub: public PlatformCodeStub { | 1586 class RegExpExecStub: public PlatformCodeStub { |
| 1551 public: | 1587 public: |
| 1552 RegExpExecStub() { } | 1588 RegExpExecStub() { } |
| 1553 | 1589 |
| 1554 private: | 1590 private: |
| (...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2478 | 2514 |
| 2479 | 2515 |
| 2480 class CallDescriptors { | 2516 class CallDescriptors { |
| 2481 public: | 2517 public: |
| 2482 static void InitializeForIsolate(Isolate* isolate); | 2518 static void InitializeForIsolate(Isolate* isolate); |
| 2483 }; | 2519 }; |
| 2484 | 2520 |
| 2485 } } // namespace v8::internal | 2521 } } // namespace v8::internal |
| 2486 | 2522 |
| 2487 #endif // V8_CODE_STUBS_H_ | 2523 #endif // V8_CODE_STUBS_H_ |
| OLD | NEW |