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_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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 V(FastCloneShallowArray) \ | 119 V(FastCloneShallowArray) \ |
120 V(FastCloneShallowObject) \ | 120 V(FastCloneShallowObject) \ |
121 V(FastNewClosure) \ | 121 V(FastNewClosure) \ |
122 V(FastNewFunctionContext) \ | 122 V(FastNewFunctionContext) \ |
123 V(KeyedLoadSloppyArguments) \ | 123 V(KeyedLoadSloppyArguments) \ |
124 V(KeyedStoreSloppyArguments) \ | 124 V(KeyedStoreSloppyArguments) \ |
125 V(LoadScriptContextField) \ | 125 V(LoadScriptContextField) \ |
126 V(StoreScriptContextField) \ | 126 V(StoreScriptContextField) \ |
127 V(NumberToString) \ | 127 V(NumberToString) \ |
128 V(GetProperty) \ | 128 V(GetProperty) \ |
129 V(LoadICTF) \ | 129 V(LoadIC) \ |
130 V(KeyedLoadICTF) \ | 130 V(KeyedLoadICTF) \ |
131 V(StoreFastElement) \ | 131 V(StoreFastElement) \ |
132 V(StoreField) \ | 132 V(StoreField) \ |
133 V(StoreGlobal) \ | 133 V(StoreGlobal) \ |
134 V(StoreICTF) \ | 134 V(StoreICTF) \ |
135 V(StoreInterceptor) \ | 135 V(StoreInterceptor) \ |
136 V(StoreMap) \ | 136 V(StoreMap) \ |
137 V(StoreTransition) \ | 137 V(StoreTransition) \ |
138 V(LoadApiGetter) \ | 138 V(LoadApiGetter) \ |
139 V(LoadIndexedInterceptor) \ | 139 V(LoadIndexedInterceptor) \ |
140 V(GrowArrayElements) \ | 140 V(GrowArrayElements) \ |
141 /* These are only called from FGC and */ \ | 141 /* These are only called from FGC and */ \ |
142 /* can be removed when we use ignition */ \ | 142 /* can be removed when we use ignition */ \ |
143 /* only */ \ | 143 /* only */ \ |
144 V(LoadICTrampolineTF) \ | 144 V(LoadICTrampoline) \ |
145 V(LoadGlobalICTrampoline) \ | 145 V(LoadGlobalICTrampoline) \ |
146 V(KeyedLoadICTrampolineTF) \ | 146 V(KeyedLoadICTrampolineTF) \ |
147 V(StoreICTrampolineTF) | 147 V(StoreICTrampolineTF) |
148 | 148 |
149 // List of code stubs only used on ARM 32 bits platforms. | 149 // List of code stubs only used on ARM 32 bits platforms. |
150 #if V8_TARGET_ARCH_ARM | 150 #if V8_TARGET_ARCH_ARM |
151 #define CODE_STUB_LIST_ARM(V) V(DirectCEntry) | 151 #define CODE_STUB_LIST_ARM(V) V(DirectCEntry) |
152 | 152 |
153 #else | 153 #else |
154 #define CODE_STUB_LIST_ARM(V) | 154 #define CODE_STUB_LIST_ARM(V) |
(...skipping 1886 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2041 class KeyedLoadGenericStub : public HydrogenCodeStub { | 2041 class KeyedLoadGenericStub : public HydrogenCodeStub { |
2042 public: | 2042 public: |
2043 explicit KeyedLoadGenericStub(Isolate* isolate) : HydrogenCodeStub(isolate) {} | 2043 explicit KeyedLoadGenericStub(Isolate* isolate) : HydrogenCodeStub(isolate) {} |
2044 | 2044 |
2045 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } | 2045 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } |
2046 | 2046 |
2047 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); | 2047 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); |
2048 DEFINE_HYDROGEN_CODE_STUB(KeyedLoadGeneric, HydrogenCodeStub); | 2048 DEFINE_HYDROGEN_CODE_STUB(KeyedLoadGeneric, HydrogenCodeStub); |
2049 }; | 2049 }; |
2050 | 2050 |
2051 | 2051 class LoadICTrampolineStub : public TurboFanCodeStub { |
2052 class LoadICTrampolineTFStub : public TurboFanCodeStub { | |
2053 public: | 2052 public: |
2054 explicit LoadICTrampolineTFStub(Isolate* isolate) | 2053 explicit LoadICTrampolineStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} |
2055 : TurboFanCodeStub(isolate) {} | |
2056 | 2054 |
2057 void GenerateAssembly(CodeStubAssembler* assembler) const override; | 2055 void GenerateAssembly(CodeStubAssembler* assembler) const override; |
2058 | 2056 |
2059 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; } | 2057 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; } |
2060 | 2058 |
2061 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); | 2059 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); |
2062 DEFINE_CODE_STUB(LoadICTrampolineTF, TurboFanCodeStub); | 2060 DEFINE_CODE_STUB(LoadICTrampoline, TurboFanCodeStub); |
2063 }; | 2061 }; |
2064 | 2062 |
2065 class LoadGlobalICTrampolineStub : public TurboFanCodeStub { | 2063 class LoadGlobalICTrampolineStub : public TurboFanCodeStub { |
2066 public: | 2064 public: |
2067 explicit LoadGlobalICTrampolineStub(Isolate* isolate, | 2065 explicit LoadGlobalICTrampolineStub(Isolate* isolate, |
2068 const LoadGlobalICState& state) | 2066 const LoadGlobalICState& state) |
2069 : TurboFanCodeStub(isolate) { | 2067 : TurboFanCodeStub(isolate) { |
2070 minor_key_ = state.GetExtraICState(); | 2068 minor_key_ = state.GetExtraICState(); |
2071 } | 2069 } |
2072 | 2070 |
(...skipping 13 matching lines...) Expand all Loading... |
2086 public: | 2084 public: |
2087 explicit KeyedLoadICTrampolineStub(Isolate* isolate) | 2085 explicit KeyedLoadICTrampolineStub(Isolate* isolate) |
2088 : PlatformCodeStub(isolate) {} | 2086 : PlatformCodeStub(isolate) {} |
2089 | 2087 |
2090 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } | 2088 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } |
2091 | 2089 |
2092 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); | 2090 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load); |
2093 DEFINE_PLATFORM_CODE_STUB(KeyedLoadICTrampoline, PlatformCodeStub); | 2091 DEFINE_PLATFORM_CODE_STUB(KeyedLoadICTrampoline, PlatformCodeStub); |
2094 }; | 2092 }; |
2095 | 2093 |
2096 class KeyedLoadICTrampolineTFStub : public LoadICTrampolineTFStub { | 2094 class KeyedLoadICTrampolineTFStub : public LoadICTrampolineStub { |
2097 public: | 2095 public: |
2098 explicit KeyedLoadICTrampolineTFStub(Isolate* isolate) | 2096 explicit KeyedLoadICTrampolineTFStub(Isolate* isolate) |
2099 : LoadICTrampolineTFStub(isolate) {} | 2097 : LoadICTrampolineStub(isolate) {} |
2100 | 2098 |
2101 void GenerateAssembly(CodeStubAssembler* assembler) const override; | 2099 void GenerateAssembly(CodeStubAssembler* assembler) const override; |
2102 | 2100 |
2103 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } | 2101 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } |
2104 | 2102 |
2105 DEFINE_CODE_STUB(KeyedLoadICTrampolineTF, LoadICTrampolineTFStub); | 2103 DEFINE_CODE_STUB(KeyedLoadICTrampolineTF, LoadICTrampolineStub); |
2106 }; | 2104 }; |
2107 | 2105 |
2108 class StoreICTrampolineStub : public PlatformCodeStub { | 2106 class StoreICTrampolineStub : public PlatformCodeStub { |
2109 public: | 2107 public: |
2110 StoreICTrampolineStub(Isolate* isolate, const StoreICState& state) | 2108 StoreICTrampolineStub(Isolate* isolate, const StoreICState& state) |
2111 : PlatformCodeStub(isolate) { | 2109 : PlatformCodeStub(isolate) { |
2112 minor_key_ = state.GetExtraICState(); | 2110 minor_key_ = state.GetExtraICState(); |
2113 } | 2111 } |
2114 | 2112 |
2115 Code::Kind GetCodeKind() const override { return Code::STORE_IC; } | 2113 Code::Kind GetCodeKind() const override { return Code::STORE_IC; } |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2173 | 2171 |
2174 protected: | 2172 protected: |
2175 CallICState state() const { | 2173 CallICState state() const { |
2176 return CallICState(static_cast<ExtraICState>(minor_key_)); | 2174 return CallICState(static_cast<ExtraICState>(minor_key_)); |
2177 } | 2175 } |
2178 | 2176 |
2179 DEFINE_CALL_INTERFACE_DESCRIPTOR(CallFunctionWithFeedback); | 2177 DEFINE_CALL_INTERFACE_DESCRIPTOR(CallFunctionWithFeedback); |
2180 DEFINE_PLATFORM_CODE_STUB(CallICTrampoline, PlatformCodeStub); | 2178 DEFINE_PLATFORM_CODE_STUB(CallICTrampoline, PlatformCodeStub); |
2181 }; | 2179 }; |
2182 | 2180 |
2183 class LoadICTFStub : public TurboFanCodeStub { | 2181 class LoadICStub : public TurboFanCodeStub { |
2184 public: | 2182 public: |
2185 explicit LoadICTFStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} | 2183 explicit LoadICStub(Isolate* isolate) : TurboFanCodeStub(isolate) {} |
2186 | 2184 |
2187 void GenerateAssembly(CodeStubAssembler* assembler) const override; | 2185 void GenerateAssembly(CodeStubAssembler* assembler) const override; |
2188 | 2186 |
2189 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; } | 2187 Code::Kind GetCodeKind() const override { return Code::LOAD_IC; } |
2190 | 2188 |
2191 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); | 2189 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); |
2192 DEFINE_CODE_STUB(LoadICTF, TurboFanCodeStub); | 2190 DEFINE_CODE_STUB(LoadIC, TurboFanCodeStub); |
2193 }; | 2191 }; |
2194 | 2192 |
2195 class LoadGlobalICStub : public TurboFanCodeStub { | 2193 class LoadGlobalICStub : public TurboFanCodeStub { |
2196 public: | 2194 public: |
2197 explicit LoadGlobalICStub(Isolate* isolate, const LoadGlobalICState& state) | 2195 explicit LoadGlobalICStub(Isolate* isolate, const LoadGlobalICState& state) |
2198 : TurboFanCodeStub(isolate) { | 2196 : TurboFanCodeStub(isolate) { |
2199 minor_key_ = state.GetExtraICState(); | 2197 minor_key_ = state.GetExtraICState(); |
2200 } | 2198 } |
2201 | 2199 |
2202 void GenerateAssembly(CodeStubAssembler* assembler) const override; | 2200 void GenerateAssembly(CodeStubAssembler* assembler) const override; |
(...skipping 16 matching lines...) Expand all Loading... |
2219 | 2217 |
2220 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } | 2218 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } |
2221 | 2219 |
2222 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); | 2220 DEFINE_CALL_INTERFACE_DESCRIPTOR(LoadWithVector); |
2223 DEFINE_PLATFORM_CODE_STUB(KeyedLoadIC, PlatformCodeStub); | 2221 DEFINE_PLATFORM_CODE_STUB(KeyedLoadIC, PlatformCodeStub); |
2224 | 2222 |
2225 protected: | 2223 protected: |
2226 void GenerateImpl(MacroAssembler* masm, bool in_frame); | 2224 void GenerateImpl(MacroAssembler* masm, bool in_frame); |
2227 }; | 2225 }; |
2228 | 2226 |
2229 class KeyedLoadICTFStub : public LoadICTFStub { | 2227 class KeyedLoadICTFStub : public LoadICStub { |
2230 public: | 2228 public: |
2231 explicit KeyedLoadICTFStub(Isolate* isolate) : LoadICTFStub(isolate) {} | 2229 explicit KeyedLoadICTFStub(Isolate* isolate) : LoadICStub(isolate) {} |
2232 | 2230 |
2233 void GenerateAssembly(CodeStubAssembler* assembler) const override; | 2231 void GenerateAssembly(CodeStubAssembler* assembler) const override; |
2234 | 2232 |
2235 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } | 2233 Code::Kind GetCodeKind() const override { return Code::KEYED_LOAD_IC; } |
2236 | 2234 |
2237 DEFINE_CODE_STUB(KeyedLoadICTF, LoadICTFStub); | 2235 DEFINE_CODE_STUB(KeyedLoadICTF, LoadICStub); |
2238 }; | 2236 }; |
2239 | 2237 |
2240 class StoreICStub : public PlatformCodeStub { | 2238 class StoreICStub : public PlatformCodeStub { |
2241 public: | 2239 public: |
2242 StoreICStub(Isolate* isolate, const StoreICState& state) | 2240 StoreICStub(Isolate* isolate, const StoreICState& state) |
2243 : PlatformCodeStub(isolate) { | 2241 : PlatformCodeStub(isolate) { |
2244 minor_key_ = state.GetExtraICState(); | 2242 minor_key_ = state.GetExtraICState(); |
2245 } | 2243 } |
2246 | 2244 |
2247 void GenerateForTrampoline(MacroAssembler* masm); | 2245 void GenerateForTrampoline(MacroAssembler* masm); |
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2865 #undef DEFINE_HYDROGEN_CODE_STUB | 2863 #undef DEFINE_HYDROGEN_CODE_STUB |
2866 #undef DEFINE_CODE_STUB | 2864 #undef DEFINE_CODE_STUB |
2867 #undef DEFINE_CODE_STUB_BASE | 2865 #undef DEFINE_CODE_STUB_BASE |
2868 | 2866 |
2869 extern Representation RepresentationFromMachineType(MachineType type); | 2867 extern Representation RepresentationFromMachineType(MachineType type); |
2870 | 2868 |
2871 } // namespace internal | 2869 } // namespace internal |
2872 } // namespace v8 | 2870 } // namespace v8 |
2873 | 2871 |
2874 #endif // V8_CODE_STUBS_H_ | 2872 #endif // V8_CODE_STUBS_H_ |
OLD | NEW |