OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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_ |
OLD | NEW |