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

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

Issue 2330063002: [stubs] Port StoreFastElementsStub to TurboFan. (Closed)
Patch Set: Retain removed, a comment added Created 4 years, 3 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-stub-assembler.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/code-stub-assembler.h" 10 #include "src/code-stub-assembler.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 V(FastArrayPush) \ 79 V(FastArrayPush) \
80 V(FastFunctionBind) \ 80 V(FastFunctionBind) \
81 /* These will be ported/eliminated */ \ 81 /* These will be ported/eliminated */ \
82 /* as part of the new IC system, ask */ \ 82 /* as part of the new IC system, ask */ \
83 /* ishell before doing anything */ \ 83 /* ishell before doing anything */ \
84 V(KeyedLoadGeneric) \ 84 V(KeyedLoadGeneric) \
85 V(LoadConstant) \ 85 V(LoadConstant) \
86 V(LoadDictionaryElement) \ 86 V(LoadDictionaryElement) \
87 V(LoadFastElement) \ 87 V(LoadFastElement) \
88 V(LoadField) \ 88 V(LoadField) \
89 V(StoreFastElement) \
90 V(StoreTransition) \ 89 V(StoreTransition) \
91 /* These should never be ported to TF */ \ 90 /* These should never be ported to TF */ \
92 /* because they are either used only by */ \ 91 /* because they are either used only by */ \
93 /* FCG/Crankshaft or are deprecated */ \ 92 /* FCG/Crankshaft or are deprecated */ \
94 V(BinaryOpIC) \ 93 V(BinaryOpIC) \
95 V(BinaryOpWithAllocationSite) \ 94 V(BinaryOpWithAllocationSite) \
96 V(ToBooleanIC) \ 95 V(ToBooleanIC) \
97 V(RegExpConstructResult) \ 96 V(RegExpConstructResult) \
98 V(TransitionElementsKind) \ 97 V(TransitionElementsKind) \
99 V(StoreGlobalViaContext) \ 98 V(StoreGlobalViaContext) \
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 V(StringLessThanOrEqual) \ 157 V(StringLessThanOrEqual) \
159 V(StringGreaterThan) \ 158 V(StringGreaterThan) \
160 V(StringGreaterThanOrEqual) \ 159 V(StringGreaterThanOrEqual) \
161 V(ToInteger) \ 160 V(ToInteger) \
162 V(ToLength) \ 161 V(ToLength) \
163 V(HasProperty) \ 162 V(HasProperty) \
164 V(ForInFilter) \ 163 V(ForInFilter) \
165 V(GetProperty) \ 164 V(GetProperty) \
166 V(LoadICTF) \ 165 V(LoadICTF) \
167 V(KeyedLoadICTF) \ 166 V(KeyedLoadICTF) \
167 V(StoreFastElement) \
168 V(StoreField) \ 168 V(StoreField) \
169 V(StoreGlobal) \ 169 V(StoreGlobal) \
170 V(StoreInterceptor) \ 170 V(StoreInterceptor) \
171 V(LoadApiGetter) \ 171 V(LoadApiGetter) \
172 V(LoadIndexedInterceptor) \ 172 V(LoadIndexedInterceptor) \
173 V(GrowArrayElements) \ 173 V(GrowArrayElements) \
174 /* These are only called from FGC and */ \ 174 /* These are only called from FGC and */ \
175 /* can be removed when we use ignition */ \ 175 /* can be removed when we use ignition */ \
176 /* only */ \ 176 /* only */ \
177 V(LoadICTrampolineTF) \ 177 V(LoadICTrampolineTF) \
(...skipping 2589 matching lines...) Expand 10 before | Expand all | Expand 10 after
2767 2767
2768 private: 2768 private:
2769 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; 2769 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {};
2770 class IsJSArrayBits: public BitField<bool, 8, 1> {}; 2770 class IsJSArrayBits: public BitField<bool, 8, 1> {};
2771 class CanConvertHoleToUndefined : public BitField<bool, 9, 1> {}; 2771 class CanConvertHoleToUndefined : public BitField<bool, 9, 1> {};
2772 2772
2773 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); 2773 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector);
2774 DEFINE_HANDLER_CODE_STUB(LoadFastElement, HandlerStub); 2774 DEFINE_HANDLER_CODE_STUB(LoadFastElement, HandlerStub);
2775 }; 2775 };
2776 2776
2777 2777 class StoreFastElementStub : public TurboFanCodeStub {
2778 class StoreFastElementStub : public HydrogenCodeStub {
2779 public: 2778 public:
2780 StoreFastElementStub(Isolate* isolate, bool is_js_array, 2779 StoreFastElementStub(Isolate* isolate, bool is_js_array,
2781 ElementsKind elements_kind, KeyedAccessStoreMode mode) 2780 ElementsKind elements_kind, KeyedAccessStoreMode mode)
2782 : HydrogenCodeStub(isolate) { 2781 : TurboFanCodeStub(isolate) {
2783 set_sub_minor_key(CommonStoreModeBits::encode(mode) | 2782 minor_key_ = CommonStoreModeBits::encode(mode) |
2784 ElementsKindBits::encode(elements_kind) | 2783 ElementsKindBits::encode(elements_kind) |
2785 IsJSArrayBits::encode(is_js_array)); 2784 IsJSArrayBits::encode(is_js_array);
2786 } 2785 }
2787 2786
2788 static void GenerateAheadOfTime(Isolate* isolate); 2787 static void GenerateAheadOfTime(Isolate* isolate);
2789 2788
2790 bool is_js_array() const { return IsJSArrayBits::decode(sub_minor_key()); } 2789 bool is_js_array() const { return IsJSArrayBits::decode(minor_key_); }
2791 2790
2792 ElementsKind elements_kind() const { 2791 ElementsKind elements_kind() const {
2793 return ElementsKindBits::decode(sub_minor_key()); 2792 return ElementsKindBits::decode(minor_key_);
2794 } 2793 }
2795 2794
2796 KeyedAccessStoreMode store_mode() const { 2795 KeyedAccessStoreMode store_mode() const {
2797 return CommonStoreModeBits::decode(sub_minor_key()); 2796 return CommonStoreModeBits::decode(minor_key_);
2798 } 2797 }
2799 2798
2800 Code::Kind GetCodeKind() const override { return Code::HANDLER; } 2799 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
2801 ExtraICState GetExtraICState() const override { return Code::KEYED_STORE_IC; } 2800 ExtraICState GetExtraICState() const override { return Code::KEYED_STORE_IC; }
2802 2801
2803 private: 2802 private:
2804 class ElementsKindBits : public BitField<ElementsKind, 3, 8> {}; 2803 class ElementsKindBits
2805 class IsJSArrayBits : public BitField<bool, 11, 1> {}; 2804 : public BitField<ElementsKind, CommonStoreModeBits::kNext, 8> {};
2805 class IsJSArrayBits : public BitField<bool, ElementsKindBits::kNext, 1> {};
2806 2806
2807 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreWithVector); 2807 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreWithVector);
2808 DEFINE_HYDROGEN_CODE_STUB(StoreFastElement, HydrogenCodeStub); 2808 DEFINE_TURBOFAN_CODE_STUB(StoreFastElement, TurboFanCodeStub);
2809 }; 2809 };
2810 2810
2811 2811
2812 class TransitionElementsKindStub : public HydrogenCodeStub { 2812 class TransitionElementsKindStub : public HydrogenCodeStub {
2813 public: 2813 public:
2814 TransitionElementsKindStub(Isolate* isolate, ElementsKind from_kind, 2814 TransitionElementsKindStub(Isolate* isolate, ElementsKind from_kind,
2815 ElementsKind to_kind) 2815 ElementsKind to_kind)
2816 : HydrogenCodeStub(isolate) { 2816 : HydrogenCodeStub(isolate) {
2817 set_sub_minor_key(FromKindBits::encode(from_kind) | 2817 set_sub_minor_key(FromKindBits::encode(from_kind) |
2818 ToKindBits::encode(to_kind)); 2818 ToKindBits::encode(to_kind));
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
2997 } 2997 }
2998 2998
2999 Code::Kind GetCodeKind() const override { return Code::HANDLER; } 2999 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
3000 ExtraICState GetExtraICState() const override { return Code::KEYED_STORE_IC; } 3000 ExtraICState GetExtraICState() const override { return Code::KEYED_STORE_IC; }
3001 3001
3002 private: 3002 private:
3003 ElementsKind elements_kind() const { 3003 ElementsKind elements_kind() const {
3004 return ElementsKindBits::decode(minor_key_); 3004 return ElementsKindBits::decode(minor_key_);
3005 } 3005 }
3006 3006
3007 class ElementsKindBits : public BitField<ElementsKind, 3, 8> {}; 3007 class ElementsKindBits
3008 : public BitField<ElementsKind, CommonStoreModeBits::kNext, 8> {};
3008 3009
3009 DEFINE_PLATFORM_CODE_STUB(StoreElement, PlatformCodeStub); 3010 DEFINE_PLATFORM_CODE_STUB(StoreElement, PlatformCodeStub);
3010 }; 3011 };
3011 3012
3012 class ToBooleanICStub : public HydrogenCodeStub { 3013 class ToBooleanICStub : public HydrogenCodeStub {
3013 public: 3014 public:
3014 enum Type { 3015 enum Type {
3015 UNDEFINED, 3016 UNDEFINED,
3016 BOOLEAN, 3017 BOOLEAN,
3017 NULL_TYPE, 3018 NULL_TYPE,
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
3097 ElementsKind to_kind() const { return ToBits::decode(sub_minor_key()); } 3098 ElementsKind to_kind() const { return ToBits::decode(sub_minor_key()); }
3098 bool is_jsarray() const { return IsJSArrayBits::decode(sub_minor_key()); } 3099 bool is_jsarray() const { return IsJSArrayBits::decode(sub_minor_key()); }
3099 KeyedAccessStoreMode store_mode() const { 3100 KeyedAccessStoreMode store_mode() const {
3100 return CommonStoreModeBits::decode(sub_minor_key()); 3101 return CommonStoreModeBits::decode(sub_minor_key());
3101 } 3102 }
3102 3103
3103 Code::Kind GetCodeKind() const override { return Code::HANDLER; } 3104 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
3104 ExtraICState GetExtraICState() const override { return Code::KEYED_STORE_IC; } 3105 ExtraICState GetExtraICState() const override { return Code::KEYED_STORE_IC; }
3105 3106
3106 private: 3107 private:
3107 class FromBits : public BitField<ElementsKind, 3, 8> {}; 3108 class FromBits
3109 : public BitField<ElementsKind, CommonStoreModeBits::kNext, 8> {};
3108 class ToBits : public BitField<ElementsKind, 11, 8> {}; 3110 class ToBits : public BitField<ElementsKind, 11, 8> {};
3109 class IsJSArrayBits : public BitField<bool, 19, 1> {}; 3111 class IsJSArrayBits : public BitField<bool, 19, 1> {};
3110 3112
3111 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorStoreTransition); 3113 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorStoreTransition);
3112 DEFINE_HYDROGEN_CODE_STUB(ElementsTransitionAndStore, HydrogenCodeStub); 3114 DEFINE_HYDROGEN_CODE_STUB(ElementsTransitionAndStore, HydrogenCodeStub);
3113 }; 3115 };
3114 3116
3115 3117
3116 class StubFailureTrampolineStub : public PlatformCodeStub { 3118 class StubFailureTrampolineStub : public PlatformCodeStub {
3117 public: 3119 public:
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
3206 #undef DEFINE_HYDROGEN_CODE_STUB 3208 #undef DEFINE_HYDROGEN_CODE_STUB
3207 #undef DEFINE_CODE_STUB 3209 #undef DEFINE_CODE_STUB
3208 #undef DEFINE_CODE_STUB_BASE 3210 #undef DEFINE_CODE_STUB_BASE
3209 3211
3210 extern Representation RepresentationFromMachineType(MachineType type); 3212 extern Representation RepresentationFromMachineType(MachineType type);
3211 3213
3212 } // namespace internal 3214 } // namespace internal
3213 } // namespace v8 3215 } // namespace v8
3214 3216
3215 #endif // V8_CODE_STUBS_H_ 3217 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/code-stub-assembler.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698