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

Side by Side Diff: src/interface-descriptors.h

Issue 2051573002: [Interpreter] Add intrinsics called as stubs. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix leak Created 4 years, 6 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/compiler/code-assembler.cc ('k') | src/interface-descriptors.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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_CALL_INTERFACE_DESCRIPTOR_H_ 5 #ifndef V8_CALL_INTERFACE_DESCRIPTOR_H_
6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_ 6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/macro-assembler.h" 9 #include "src/macro-assembler.h"
10 10
11 namespace v8 { 11 namespace v8 {
12 namespace internal { 12 namespace internal {
13 13
14 class PlatformInterfaceDescriptor; 14 class PlatformInterfaceDescriptor;
15 15
16 #define INTERFACE_DESCRIPTOR_LIST(V) \ 16 #define INTERFACE_DESCRIPTOR_LIST(V) \
17 V(Void) \ 17 V(Void) \
18 V(ContextOnly) \
19 V(OnStackWith1Args) \
20 V(OnStackWith2Args) \
21 V(OnStackWith3Args) \
22 V(OnStackWith4Args) \
23 V(OnStackWith5Args) \
24 V(OnStackWith6Args) \
25 V(OnStackWith7Args) \
18 V(Load) \ 26 V(Load) \
19 V(LoadGlobal) \ 27 V(LoadGlobal) \
20 V(LoadGlobalWithVector) \ 28 V(LoadGlobalWithVector) \
21 V(Store) \ 29 V(Store) \
22 V(StoreTransition) \ 30 V(StoreTransition) \
23 V(VectorStoreTransition) \ 31 V(VectorStoreTransition) \
24 V(VectorStoreICTrampoline) \ 32 V(VectorStoreICTrampoline) \
25 V(VectorStoreIC) \ 33 V(VectorStoreIC) \
26 V(LoadWithVector) \ 34 V(LoadWithVector) \
27 V(VarArgFunction) \ 35 V(VarArgFunction) \
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 V(ApiCallbackWith2Args) \ 85 V(ApiCallbackWith2Args) \
78 V(ApiCallbackWith3Args) \ 86 V(ApiCallbackWith3Args) \
79 V(ApiCallbackWith4Args) \ 87 V(ApiCallbackWith4Args) \
80 V(ApiCallbackWith5Args) \ 88 V(ApiCallbackWith5Args) \
81 V(ApiCallbackWith6Args) \ 89 V(ApiCallbackWith6Args) \
82 V(ApiCallbackWith7Args) \ 90 V(ApiCallbackWith7Args) \
83 V(ApiGetter) \ 91 V(ApiGetter) \
84 V(StoreGlobalViaContext) \ 92 V(StoreGlobalViaContext) \
85 V(MathPowTagged) \ 93 V(MathPowTagged) \
86 V(MathPowInteger) \ 94 V(MathPowInteger) \
87 V(ContextOnly) \
88 V(GrowArrayElements) \ 95 V(GrowArrayElements) \
89 V(InterpreterDispatch) \ 96 V(InterpreterDispatch) \
90 V(InterpreterPushArgsAndCall) \ 97 V(InterpreterPushArgsAndCall) \
91 V(InterpreterPushArgsAndConstruct) \ 98 V(InterpreterPushArgsAndConstruct) \
92 V(InterpreterCEntry) \ 99 V(InterpreterCEntry) \
93 V(ResumeGenerator) 100 V(ResumeGenerator)
94 101
95 class CallInterfaceDescriptorData { 102 class CallInterfaceDescriptorData {
96 public: 103 public:
97 CallInterfaceDescriptorData() 104 CallInterfaceDescriptorData()
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 isolate, register_param_count, arg); \ 278 isolate, register_param_count, arg); \
272 } \ 279 } \
273 \ 280 \
274 public: 281 public:
275 282
276 class VoidDescriptor : public CallInterfaceDescriptor { 283 class VoidDescriptor : public CallInterfaceDescriptor {
277 public: 284 public:
278 DECLARE_DESCRIPTOR(VoidDescriptor, CallInterfaceDescriptor) 285 DECLARE_DESCRIPTOR(VoidDescriptor, CallInterfaceDescriptor)
279 }; 286 };
280 287
288 class ContextOnlyDescriptor : public CallInterfaceDescriptor {
289 public:
290 DECLARE_DESCRIPTOR(ContextOnlyDescriptor, CallInterfaceDescriptor)
291 };
292
293 // The OnStackWith*ArgsDescriptors have a lot of boilerplate. The superclass
294 // OnStackArgsDescriptorBase is not meant to be instantiated directly and has no
295 // public constructors to ensure this is so.contains all the logic, and the
296 //
297 // Use OnStackArgsDescriptorBase::ForArgs(isolate, parameter_count) to
298 // instantiate a descriptor with the number of args.
299 class OnStackArgsDescriptorBase : public CallInterfaceDescriptor {
300 public:
301 static CallInterfaceDescriptor ForArgs(Isolate* isolate, int parameter_count);
302
303 protected:
304 OnStackArgsDescriptorBase(Isolate* isolate, CallDescriptors::Key key)
305 : CallInterfaceDescriptor(isolate, key) {}
306 void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override;
307 FunctionType* BuildCallInterfaceDescriptorFunctionTypeWithArg(
308 Isolate* isolate, int register_parameter_count, int parameter_count);
309 };
310
311 class OnStackWith1ArgsDescriptor : public OnStackArgsDescriptorBase {
312 public:
313 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith1ArgsDescriptor,
314 OnStackArgsDescriptorBase,
315 1)
316 };
317
318 class OnStackWith2ArgsDescriptor : public OnStackArgsDescriptorBase {
319 public:
320 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith2ArgsDescriptor,
321 OnStackArgsDescriptorBase,
322 2)
323 };
324
325 class OnStackWith3ArgsDescriptor : public OnStackArgsDescriptorBase {
326 public:
327 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith3ArgsDescriptor,
328 OnStackArgsDescriptorBase,
329 3)
330 };
331
332 class OnStackWith4ArgsDescriptor : public OnStackArgsDescriptorBase {
333 public:
334 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith4ArgsDescriptor,
335 OnStackArgsDescriptorBase,
336 4)
337 };
338
339 class OnStackWith5ArgsDescriptor : public OnStackArgsDescriptorBase {
340 public:
341 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith5ArgsDescriptor,
342 OnStackArgsDescriptorBase,
343 5)
344 };
345
346 class OnStackWith6ArgsDescriptor : public OnStackArgsDescriptorBase {
347 public:
348 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith6ArgsDescriptor,
349 OnStackArgsDescriptorBase,
350 6)
351 };
352
353 class OnStackWith7ArgsDescriptor : public OnStackArgsDescriptorBase {
354 public:
355 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith7ArgsDescriptor,
356 OnStackArgsDescriptorBase,
357 7)
358 };
281 359
282 // LoadDescriptor is used by all stubs that implement Load/KeyedLoad ICs. 360 // LoadDescriptor is used by all stubs that implement Load/KeyedLoad ICs.
283 class LoadDescriptor : public CallInterfaceDescriptor { 361 class LoadDescriptor : public CallInterfaceDescriptor {
284 public: 362 public:
285 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(LoadDescriptor, 363 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(LoadDescriptor,
286 CallInterfaceDescriptor) 364 CallInterfaceDescriptor)
287 365
288 enum ParameterIndices { kReceiverIndex, kNameIndex, kSlotIndex }; 366 enum ParameterIndices { kReceiverIndex, kNameIndex, kSlotIndex };
289 static const Register ReceiverRegister(); 367 static const Register ReceiverRegister();
290 static const Register NameRegister(); 368 static const Register NameRegister();
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 845
768 class ApiGetterDescriptor : public CallInterfaceDescriptor { 846 class ApiGetterDescriptor : public CallInterfaceDescriptor {
769 public: 847 public:
770 DECLARE_DESCRIPTOR(ApiGetterDescriptor, CallInterfaceDescriptor) 848 DECLARE_DESCRIPTOR(ApiGetterDescriptor, CallInterfaceDescriptor)
771 849
772 static const Register ReceiverRegister(); 850 static const Register ReceiverRegister();
773 static const Register HolderRegister(); 851 static const Register HolderRegister();
774 static const Register CallbackRegister(); 852 static const Register CallbackRegister();
775 }; 853 };
776 854
777
778 class MathPowTaggedDescriptor : public CallInterfaceDescriptor { 855 class MathPowTaggedDescriptor : public CallInterfaceDescriptor {
779 public: 856 public:
780 DECLARE_DESCRIPTOR(MathPowTaggedDescriptor, CallInterfaceDescriptor) 857 DECLARE_DESCRIPTOR(MathPowTaggedDescriptor, CallInterfaceDescriptor)
781 858
782 static const Register exponent(); 859 static const Register exponent();
783 }; 860 };
784 861
785
786 class MathPowIntegerDescriptor : public CallInterfaceDescriptor { 862 class MathPowIntegerDescriptor : public CallInterfaceDescriptor {
787 public: 863 public:
788 DECLARE_DESCRIPTOR(MathPowIntegerDescriptor, CallInterfaceDescriptor) 864 DECLARE_DESCRIPTOR(MathPowIntegerDescriptor, CallInterfaceDescriptor)
789 865
790 static const Register exponent(); 866 static const Register exponent();
791 }; 867 };
792 868
793
794 class ContextOnlyDescriptor : public CallInterfaceDescriptor {
795 public:
796 DECLARE_DESCRIPTOR(ContextOnlyDescriptor, CallInterfaceDescriptor)
797 };
798
799 class VarArgFunctionDescriptor : public CallInterfaceDescriptor { 869 class VarArgFunctionDescriptor : public CallInterfaceDescriptor {
800 public: 870 public:
801 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(VarArgFunctionDescriptor, 871 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(VarArgFunctionDescriptor,
802 CallInterfaceDescriptor) 872 CallInterfaceDescriptor)
803 }; 873 };
804 874
805 class GrowArrayElementsDescriptor : public CallInterfaceDescriptor { 875 class GrowArrayElementsDescriptor : public CallInterfaceDescriptor {
806 public: 876 public:
807 DECLARE_DESCRIPTOR(GrowArrayElementsDescriptor, CallInterfaceDescriptor) 877 DECLARE_DESCRIPTOR(GrowArrayElementsDescriptor, CallInterfaceDescriptor)
808 878
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 } // namespace v8 932 } // namespace v8
863 933
864 934
865 #if V8_TARGET_ARCH_ARM64 935 #if V8_TARGET_ARCH_ARM64
866 #include "src/arm64/interface-descriptors-arm64.h" 936 #include "src/arm64/interface-descriptors-arm64.h"
867 #elif V8_TARGET_ARCH_ARM 937 #elif V8_TARGET_ARCH_ARM
868 #include "src/arm/interface-descriptors-arm.h" 938 #include "src/arm/interface-descriptors-arm.h"
869 #endif 939 #endif
870 940
871 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ 941 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_
OLDNEW
« no previous file with comments | « src/compiler/code-assembler.cc ('k') | src/interface-descriptors.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698