Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: src/code-stubs.h

Issue 1695633003: [runtime] Turn ArgumentAccessStub into FastNewSloppyArgumentsStub. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix MIPS dead code Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/code-factory.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_CODE_STUBS_H_ 5 #ifndef V8_CODE_STUBS_H_
6 #define V8_CODE_STUBS_H_ 6 #define V8_CODE_STUBS_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/assembler.h" 9 #include "src/assembler.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
11 #include "src/compiler/code-stub-assembler.h" 11 #include "src/compiler/code-stub-assembler.h"
12 #include "src/globals.h" 12 #include "src/globals.h"
13 #include "src/ic/ic-state.h" 13 #include "src/ic/ic-state.h"
14 #include "src/interface-descriptors.h" 14 #include "src/interface-descriptors.h"
15 #include "src/macro-assembler.h" 15 #include "src/macro-assembler.h"
16 #include "src/ostreams.h" 16 #include "src/ostreams.h"
17 17
18 namespace v8 { 18 namespace v8 {
19 namespace internal { 19 namespace internal {
20 20
21 // List of code stubs used on all platforms. 21 // List of code stubs used on all platforms.
22 #define CODE_STUB_LIST_ALL_PLATFORMS(V) \ 22 #define CODE_STUB_LIST_ALL_PLATFORMS(V) \
23 /* PlatformCodeStubs */ \ 23 /* PlatformCodeStubs */ \
24 V(ArgumentsAccess) \
25 V(ArrayConstructor) \ 24 V(ArrayConstructor) \
26 V(BinaryOpICWithAllocationSite) \ 25 V(BinaryOpICWithAllocationSite) \
27 V(CallApiFunction) \ 26 V(CallApiFunction) \
28 V(CallApiAccessor) \ 27 V(CallApiAccessor) \
29 V(CallApiGetter) \ 28 V(CallApiGetter) \
30 V(CallConstruct) \ 29 V(CallConstruct) \
31 V(CallIC) \ 30 V(CallIC) \
32 V(CEntry) \ 31 V(CEntry) \
33 V(CompareIC) \ 32 V(CompareIC) \
34 V(DoubleToI) \ 33 V(DoubleToI) \
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 V(CompareNilIC) \ 70 V(CompareNilIC) \
72 V(CreateAllocationSite) \ 71 V(CreateAllocationSite) \
73 V(CreateWeakCell) \ 72 V(CreateWeakCell) \
74 V(ElementsTransitionAndStore) \ 73 V(ElementsTransitionAndStore) \
75 V(FastCloneRegExp) \ 74 V(FastCloneRegExp) \
76 V(FastCloneShallowArray) \ 75 V(FastCloneShallowArray) \
77 V(FastCloneShallowObject) \ 76 V(FastCloneShallowObject) \
78 V(FastNewClosure) \ 77 V(FastNewClosure) \
79 V(FastNewContext) \ 78 V(FastNewContext) \
80 V(FastNewRestParameter) \ 79 V(FastNewRestParameter) \
81 V(FastNewStrictArguments) \ 80 V(FastNewSloppyArguments) \
81 V(FastNewStrictArguments) \
82 V(GrowArrayElements) \ 82 V(GrowArrayElements) \
83 V(InternalArrayNArgumentsConstructor) \ 83 V(InternalArrayNArgumentsConstructor) \
84 V(InternalArrayNoArgumentConstructor) \ 84 V(InternalArrayNoArgumentConstructor) \
85 V(InternalArraySingleArgumentConstructor) \ 85 V(InternalArraySingleArgumentConstructor) \
86 V(KeyedLoadGeneric) \ 86 V(KeyedLoadGeneric) \
87 V(LoadGlobalViaContext) \ 87 V(LoadGlobalViaContext) \
88 V(LoadScriptContextField) \ 88 V(LoadScriptContextField) \
89 V(LoadDictionaryElement) \ 89 V(LoadDictionaryElement) \
90 V(NameDictionaryLookup) \ 90 V(NameDictionaryLookup) \
91 V(NumberToString) \ 91 V(NumberToString) \
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 explicit FastNewRestParameterStub(Isolate* isolate) 735 explicit FastNewRestParameterStub(Isolate* isolate)
736 : PlatformCodeStub(isolate) {} 736 : PlatformCodeStub(isolate) {}
737 737
738 DEFINE_CALL_INTERFACE_DESCRIPTOR(FastNewRestParameter); 738 DEFINE_CALL_INTERFACE_DESCRIPTOR(FastNewRestParameter);
739 DEFINE_PLATFORM_CODE_STUB(FastNewRestParameter, PlatformCodeStub); 739 DEFINE_PLATFORM_CODE_STUB(FastNewRestParameter, PlatformCodeStub);
740 }; 740 };
741 741
742 742
743 // TODO(turbofan): This stub should be possible to write in TurboFan 743 // TODO(turbofan): This stub should be possible to write in TurboFan
744 // using the CodeStubAssembler very soon in a way that is as efficient 744 // using the CodeStubAssembler very soon in a way that is as efficient
745 // and easy as the current handwritten version, which is partly a copy 745 // and easy as the current handwritten version.
746 // of the strict arguments object materialization code. 746 class FastNewSloppyArgumentsStub final : public PlatformCodeStub {
747 public:
748 explicit FastNewSloppyArgumentsStub(Isolate* isolate)
749 : PlatformCodeStub(isolate) {}
750
751 DEFINE_CALL_INTERFACE_DESCRIPTOR(FastNewSloppyArguments);
752 DEFINE_PLATFORM_CODE_STUB(FastNewSloppyArguments, PlatformCodeStub);
753 };
754
755
756 // TODO(turbofan): This stub should be possible to write in TurboFan
757 // using the CodeStubAssembler very soon in a way that is as efficient
758 // and easy as the current handwritten version.
747 class FastNewStrictArgumentsStub final : public PlatformCodeStub { 759 class FastNewStrictArgumentsStub final : public PlatformCodeStub {
748 public: 760 public:
749 explicit FastNewStrictArgumentsStub(Isolate* isolate) 761 explicit FastNewStrictArgumentsStub(Isolate* isolate)
750 : PlatformCodeStub(isolate) {} 762 : PlatformCodeStub(isolate) {}
751 763
752 DEFINE_CALL_INTERFACE_DESCRIPTOR(FastNewStrictArguments); 764 DEFINE_CALL_INTERFACE_DESCRIPTOR(FastNewStrictArguments);
753 DEFINE_PLATFORM_CODE_STUB(FastNewStrictArguments, PlatformCodeStub); 765 DEFINE_PLATFORM_CODE_STUB(FastNewStrictArguments, PlatformCodeStub);
754 }; 766 };
755 767
756 768
(...skipping 1076 matching lines...) Expand 10 before | Expand all | Expand 10 after
1833 1845
1834 class StackFrameTypeBits : public BitField<StackFrame::Type, 0, 5> {}; 1846 class StackFrameTypeBits : public BitField<StackFrame::Type, 0, 5> {};
1835 1847
1836 int handler_offset_; 1848 int handler_offset_;
1837 1849
1838 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR(); 1850 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR();
1839 DEFINE_PLATFORM_CODE_STUB(JSEntry, PlatformCodeStub); 1851 DEFINE_PLATFORM_CODE_STUB(JSEntry, PlatformCodeStub);
1840 }; 1852 };
1841 1853
1842 1854
1843 class ArgumentsAccessStub: public PlatformCodeStub {
1844 public:
1845 enum Type {
1846 NEW_SLOPPY_FAST,
1847 NEW_SLOPPY_SLOW,
1848 };
1849
1850 ArgumentsAccessStub(Isolate* isolate, Type type) : PlatformCodeStub(isolate) {
1851 minor_key_ = TypeBits::encode(type);
1852 }
1853
1854 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override {
1855 return ArgumentsAccessNewDescriptor(isolate());
1856 }
1857
1858 static Type ComputeType(bool has_duplicate_parameters) {
1859 if (has_duplicate_parameters) {
1860 return Type::NEW_SLOPPY_SLOW;
1861 } else {
1862 return Type::NEW_SLOPPY_FAST;
1863 }
1864 }
1865
1866 private:
1867 Type type() const { return TypeBits::decode(minor_key_); }
1868
1869 void GenerateNewSloppyFast(MacroAssembler* masm);
1870 void GenerateNewSloppySlow(MacroAssembler* masm);
1871
1872 void PrintName(std::ostream& os) const override; // NOLINT
1873
1874 class TypeBits : public BitField<Type, 0, 1> {};
1875
1876 DEFINE_PLATFORM_CODE_STUB(ArgumentsAccess, PlatformCodeStub);
1877 };
1878
1879
1880 class RegExpExecStub: public PlatformCodeStub { 1855 class RegExpExecStub: public PlatformCodeStub {
1881 public: 1856 public:
1882 explicit RegExpExecStub(Isolate* isolate) : PlatformCodeStub(isolate) { } 1857 explicit RegExpExecStub(Isolate* isolate) : PlatformCodeStub(isolate) { }
1883 1858
1884 DEFINE_CALL_INTERFACE_DESCRIPTOR(ContextOnly); 1859 DEFINE_CALL_INTERFACE_DESCRIPTOR(ContextOnly);
1885 DEFINE_PLATFORM_CODE_STUB(RegExpExec, PlatformCodeStub); 1860 DEFINE_PLATFORM_CODE_STUB(RegExpExec, PlatformCodeStub);
1886 }; 1861 };
1887 1862
1888 1863
1889 class RegExpConstructResultStub final : public HydrogenCodeStub { 1864 class RegExpConstructResultStub final : public HydrogenCodeStub {
(...skipping 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after
2997 #undef DEFINE_HYDROGEN_CODE_STUB 2972 #undef DEFINE_HYDROGEN_CODE_STUB
2998 #undef DEFINE_CODE_STUB 2973 #undef DEFINE_CODE_STUB
2999 #undef DEFINE_CODE_STUB_BASE 2974 #undef DEFINE_CODE_STUB_BASE
3000 2975
3001 extern Representation RepresentationFromType(Type* type); 2976 extern Representation RepresentationFromType(Type* type);
3002 2977
3003 } // namespace internal 2978 } // namespace internal
3004 } // namespace v8 2979 } // namespace v8
3005 2980
3006 #endif // V8_CODE_STUBS_H_ 2981 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/code-factory.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698