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 <memory> | 8 #include <memory> |
9 | 9 |
10 #include "src/assembler.h" | 10 #include "src/assembler.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 V(CreateWeakCell) \ | 43 V(CreateWeakCell) \ |
44 V(CallFunction) \ | 44 V(CallFunction) \ |
45 V(CallIC) \ | 45 V(CallIC) \ |
46 V(CallICTrampoline) \ | 46 V(CallICTrampoline) \ |
47 V(CallForwardVarargs) \ | 47 V(CallForwardVarargs) \ |
48 V(CallConstruct) \ | 48 V(CallConstruct) \ |
49 V(CallTrampoline) \ | 49 V(CallTrampoline) \ |
50 V(ConstructStub) \ | 50 V(ConstructStub) \ |
51 V(ConstructTrampoline) \ | 51 V(ConstructTrampoline) \ |
52 V(RegExpExec) \ | 52 V(RegExpExec) \ |
53 V(RegExpPrototypeExecSlow) \ | |
54 V(RegExpReplace) \ | |
55 V(RegExpSplit) \ | |
56 V(CopyFastSmiOrObjectElements) \ | |
57 V(TransitionElementsKind) \ | 53 V(TransitionElementsKind) \ |
58 V(AllocateHeapNumber) \ | 54 V(AllocateHeapNumber) \ |
59 V(Builtin) \ | 55 V(Builtin) \ |
60 V(ArrayConstructor) \ | 56 V(ArrayConstructor) \ |
61 V(IteratingArrayBuiltin) \ | 57 V(IteratingArrayBuiltin) \ |
62 V(IteratingArrayBuiltinLoopContinuation) \ | 58 V(IteratingArrayBuiltinLoopContinuation) \ |
63 V(ArrayNoArgumentConstructor) \ | 59 V(ArrayNoArgumentConstructor) \ |
64 V(ArraySingleArgumentConstructor) \ | 60 V(ArraySingleArgumentConstructor) \ |
65 V(ArrayNArgumentsConstructor) \ | 61 V(ArrayNArgumentsConstructor) \ |
66 V(Compare) \ | 62 V(Compare) \ |
67 V(BinaryOp) \ | 63 V(BinaryOp) \ |
68 V(BinaryOpWithAllocationSite) \ | 64 V(BinaryOpWithAllocationSite) \ |
69 V(BinaryOpWithVector) \ | 65 V(BinaryOpWithVector) \ |
70 V(CountOp) \ | 66 V(CountOp) \ |
71 V(StringAdd) \ | 67 V(StringAdd) \ |
72 V(StringCharAt) \ | 68 V(StringCharAt) \ |
73 V(StringCharCodeAt) \ | 69 V(StringCharCodeAt) \ |
74 V(StringCompare) \ | 70 V(StringCompare) \ |
75 V(StringIndexOf) \ | |
76 V(SubString) \ | 71 V(SubString) \ |
77 V(Keyed) \ | |
78 V(Named) \ | |
79 V(CreateIterResultObject) \ | |
80 V(HasProperty) \ | |
81 V(ForInFilter) \ | |
82 V(ForInNext) \ | |
83 V(ForInPrepare) \ | 72 V(ForInPrepare) \ |
84 V(GetProperty) \ | 73 V(GetProperty) \ |
85 V(CallHandler) \ | |
86 V(ArgumentAdaptor) \ | 74 V(ArgumentAdaptor) \ |
87 V(ApiCallback) \ | 75 V(ApiCallback) \ |
88 V(ApiGetter) \ | 76 V(ApiGetter) \ |
89 V(MathPowTagged) \ | 77 V(MathPowTagged) \ |
90 V(MathPowInteger) \ | 78 V(MathPowInteger) \ |
91 V(GrowArrayElements) \ | 79 V(GrowArrayElements) \ |
92 V(NewArgumentsElements) \ | 80 V(NewArgumentsElements) \ |
93 V(InterpreterDispatch) \ | 81 V(InterpreterDispatch) \ |
94 V(InterpreterPushArgsAndCall) \ | 82 V(InterpreterPushArgsAndCall) \ |
95 V(InterpreterPushArgsAndConstruct) \ | 83 V(InterpreterPushArgsAndConstruct) \ |
96 V(InterpreterPushArgsAndConstructArray) \ | 84 V(InterpreterPushArgsAndConstructArray) \ |
97 V(InterpreterCEntry) \ | 85 V(InterpreterCEntry) \ |
98 V(ResumeGenerator) \ | 86 V(ResumeGenerator) \ |
99 V(FrameDropperTrampoline) \ | 87 V(FrameDropperTrampoline) \ |
100 V(PromiseHandleReject) \ | 88 V(WasmRuntimeCall) \ |
101 V(WasmRuntimeCall) | 89 BUILTIN_LIST_TFS(V) |
102 | 90 |
103 class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { | 91 class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { |
104 public: | 92 public: |
105 CallInterfaceDescriptorData() : register_param_count_(-1), param_count_(-1) {} | 93 CallInterfaceDescriptorData() : register_param_count_(-1), param_count_(-1) {} |
106 | 94 |
107 // A copy of the passed in registers and param_representations is made | 95 // A copy of the passed in registers and param_representations is made |
108 // and owned by the CallInterfaceDescriptorData. | 96 // and owned by the CallInterfaceDescriptorData. |
109 | 97 |
110 void InitializePlatformSpecific( | 98 void InitializePlatformSpecific( |
111 int register_parameter_count, const Register* registers, | 99 int register_parameter_count, const Register* registers, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 | 137 |
150 PlatformInterfaceDescriptor* platform_specific_descriptor_; | 138 PlatformInterfaceDescriptor* platform_specific_descriptor_; |
151 | 139 |
152 DISALLOW_COPY_AND_ASSIGN(CallInterfaceDescriptorData); | 140 DISALLOW_COPY_AND_ASSIGN(CallInterfaceDescriptorData); |
153 }; | 141 }; |
154 | 142 |
155 | 143 |
156 class CallDescriptors { | 144 class CallDescriptors { |
157 public: | 145 public: |
158 enum Key { | 146 enum Key { |
159 #define DEF_ENUM(name) name, | 147 #define DEF_ENUM(name, ...) name, |
160 INTERFACE_DESCRIPTOR_LIST(DEF_ENUM) | 148 INTERFACE_DESCRIPTOR_LIST(DEF_ENUM) |
161 #undef DEF_ENUM | 149 #undef DEF_ENUM |
162 NUMBER_OF_DESCRIPTORS | 150 NUMBER_OF_DESCRIPTORS |
163 }; | 151 }; |
164 }; | 152 }; |
165 | 153 |
166 class V8_EXPORT_PRIVATE CallInterfaceDescriptor { | 154 class V8_EXPORT_PRIVATE CallInterfaceDescriptor { |
167 public: | 155 public: |
168 CallInterfaceDescriptor() : data_(NULL) {} | 156 CallInterfaceDescriptor() : data_(NULL) {} |
169 virtual ~CallInterfaceDescriptor() {} | 157 virtual ~CallInterfaceDescriptor() {} |
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 }; | 491 }; |
504 | 492 |
505 class TypeConversionDescriptor final : public CallInterfaceDescriptor { | 493 class TypeConversionDescriptor final : public CallInterfaceDescriptor { |
506 public: | 494 public: |
507 DEFINE_PARAMETERS(kArgument) | 495 DEFINE_PARAMETERS(kArgument) |
508 DECLARE_DESCRIPTOR(TypeConversionDescriptor, CallInterfaceDescriptor) | 496 DECLARE_DESCRIPTOR(TypeConversionDescriptor, CallInterfaceDescriptor) |
509 | 497 |
510 static const Register ArgumentRegister(); | 498 static const Register ArgumentRegister(); |
511 }; | 499 }; |
512 | 500 |
513 class CreateIterResultObjectDescriptor final : public CallInterfaceDescriptor { | |
514 public: | |
515 DEFINE_PARAMETERS(kValue, kDone) | |
516 DECLARE_DEFAULT_DESCRIPTOR(CreateIterResultObjectDescriptor, | |
517 CallInterfaceDescriptor, kParameterCount) | |
518 }; | |
519 | |
520 class HasPropertyDescriptor final : public CallInterfaceDescriptor { | |
521 public: | |
522 DEFINE_PARAMETERS(kKey, kObject) | |
523 DECLARE_DEFAULT_DESCRIPTOR(HasPropertyDescriptor, CallInterfaceDescriptor, | |
524 kParameterCount) | |
525 }; | |
526 | |
527 class ForInFilterDescriptor final : public CallInterfaceDescriptor { | |
528 public: | |
529 DEFINE_PARAMETERS(kKey, kObject) | |
530 DECLARE_DEFAULT_DESCRIPTOR(ForInFilterDescriptor, CallInterfaceDescriptor, | |
531 kParameterCount) | |
532 }; | |
533 | |
534 class ForInNextDescriptor final : public CallInterfaceDescriptor { | |
535 public: | |
536 DEFINE_PARAMETERS(kObject, kCacheArray, kCacheType, kIndex) | |
537 DECLARE_DEFAULT_DESCRIPTOR(ForInNextDescriptor, CallInterfaceDescriptor, | |
538 kParameterCount) | |
539 }; | |
540 | |
541 class ForInPrepareDescriptor final : public CallInterfaceDescriptor { | 501 class ForInPrepareDescriptor final : public CallInterfaceDescriptor { |
542 public: | 502 public: |
543 DEFINE_PARAMETERS(kObject) | 503 DEFINE_PARAMETERS(kObject) |
544 DECLARE_DEFAULT_DESCRIPTOR(ForInPrepareDescriptor, CallInterfaceDescriptor, | 504 DECLARE_DEFAULT_DESCRIPTOR(ForInPrepareDescriptor, CallInterfaceDescriptor, |
545 kParameterCount) | 505 kParameterCount) |
546 }; | 506 }; |
547 | 507 |
548 class GetPropertyDescriptor final : public CallInterfaceDescriptor { | 508 class GetPropertyDescriptor final : public CallInterfaceDescriptor { |
549 public: | 509 public: |
550 DEFINE_PARAMETERS(kObject, kKey) | 510 DEFINE_PARAMETERS(kObject, kKey) |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
659 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(RegExpExecDescriptor, | 619 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(RegExpExecDescriptor, |
660 CallInterfaceDescriptor) | 620 CallInterfaceDescriptor) |
661 | 621 |
662 static const Register StringRegister(); | 622 static const Register StringRegister(); |
663 static const Register LastIndexRegister(); | 623 static const Register LastIndexRegister(); |
664 static const Register StringStartRegister(); | 624 static const Register StringStartRegister(); |
665 static const Register StringEndRegister(); | 625 static const Register StringEndRegister(); |
666 static const Register CodeRegister(); | 626 static const Register CodeRegister(); |
667 }; | 627 }; |
668 | 628 |
669 class RegExpPrototypeExecSlowDescriptor : public CallInterfaceDescriptor { | |
670 public: | |
671 DEFINE_PARAMETERS(kReceiver, kString) | |
672 DECLARE_DEFAULT_DESCRIPTOR(RegExpPrototypeExecSlowDescriptor, | |
673 CallInterfaceDescriptor, kParameterCount) | |
674 }; | |
675 | |
676 class RegExpReplaceDescriptor : public CallInterfaceDescriptor { | |
677 public: | |
678 DEFINE_PARAMETERS(kReceiver, kString, kReplaceValue) | |
679 DECLARE_DEFAULT_DESCRIPTOR(RegExpReplaceDescriptor, CallInterfaceDescriptor, | |
680 kParameterCount) | |
681 }; | |
682 | |
683 class RegExpSplitDescriptor : public CallInterfaceDescriptor { | |
684 public: | |
685 DEFINE_PARAMETERS(kReceiver, kString, kLimit) | |
686 DECLARE_DEFAULT_DESCRIPTOR(RegExpSplitDescriptor, CallInterfaceDescriptor, | |
687 kParameterCount) | |
688 }; | |
689 | |
690 class CopyFastSmiOrObjectElementsDescriptor : public CallInterfaceDescriptor { | |
691 public: | |
692 DEFINE_PARAMETERS(kObject) | |
693 DECLARE_DEFAULT_DESCRIPTOR(CopyFastSmiOrObjectElementsDescriptor, | |
694 CallInterfaceDescriptor, kParameterCount) | |
695 }; | |
696 | |
697 class TransitionElementsKindDescriptor : public CallInterfaceDescriptor { | 629 class TransitionElementsKindDescriptor : public CallInterfaceDescriptor { |
698 public: | 630 public: |
699 DEFINE_PARAMETERS(kObject, kMap) | 631 DEFINE_PARAMETERS(kObject, kMap) |
700 DECLARE_DESCRIPTOR(TransitionElementsKindDescriptor, CallInterfaceDescriptor) | 632 DECLARE_DESCRIPTOR(TransitionElementsKindDescriptor, CallInterfaceDescriptor) |
701 }; | 633 }; |
702 | 634 |
703 | 635 |
704 class AllocateHeapNumberDescriptor : public CallInterfaceDescriptor { | 636 class AllocateHeapNumberDescriptor : public CallInterfaceDescriptor { |
705 public: | 637 public: |
706 DEFINE_EMPTY_PARAMETERS() | 638 DEFINE_EMPTY_PARAMETERS() |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
826 static const Register RightRegister(); | 758 static const Register RightRegister(); |
827 }; | 759 }; |
828 | 760 |
829 class SubStringDescriptor : public CallInterfaceDescriptor { | 761 class SubStringDescriptor : public CallInterfaceDescriptor { |
830 public: | 762 public: |
831 DEFINE_PARAMETERS(kString, kFrom, kTo) | 763 DEFINE_PARAMETERS(kString, kFrom, kTo) |
832 DECLARE_DESCRIPTOR_WITH_STACK_ARGS(SubStringDescriptor, | 764 DECLARE_DESCRIPTOR_WITH_STACK_ARGS(SubStringDescriptor, |
833 CallInterfaceDescriptor) | 765 CallInterfaceDescriptor) |
834 }; | 766 }; |
835 | 767 |
836 class StringIndexOfDescriptor final : public CallInterfaceDescriptor { | |
837 public: | |
838 DEFINE_PARAMETERS(kReceiver, kSearchString, kPosition) | |
839 DECLARE_DEFAULT_DESCRIPTOR(StringIndexOfDescriptor, CallInterfaceDescriptor, | |
840 kParameterCount) | |
841 }; | |
842 | |
843 // TODO(ishell): not used, remove. | |
844 class KeyedDescriptor : public CallInterfaceDescriptor { | |
845 public: | |
846 DECLARE_DESCRIPTOR(KeyedDescriptor, CallInterfaceDescriptor) | |
847 }; | |
848 | |
849 // TODO(ishell): not used, remove | |
850 class NamedDescriptor : public CallInterfaceDescriptor { | |
851 public: | |
852 DECLARE_DESCRIPTOR(NamedDescriptor, CallInterfaceDescriptor) | |
853 }; | |
854 | |
855 // TODO(ishell): not used, remove. | |
856 class CallHandlerDescriptor : public CallInterfaceDescriptor { | |
857 public: | |
858 DECLARE_DESCRIPTOR(CallHandlerDescriptor, CallInterfaceDescriptor) | |
859 }; | |
860 | |
861 | |
862 class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor { | 768 class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor { |
863 public: | 769 public: |
864 DEFINE_PARAMETERS(kFunction, kNewTarget, kActualArgumentsCount, | 770 DEFINE_PARAMETERS(kFunction, kNewTarget, kActualArgumentsCount, |
865 kExpectedArgumentsCount) | 771 kExpectedArgumentsCount) |
866 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ArgumentAdaptorDescriptor, | 772 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ArgumentAdaptorDescriptor, |
867 CallInterfaceDescriptor) | 773 CallInterfaceDescriptor) |
868 }; | 774 }; |
869 | 775 |
870 class ApiCallbackDescriptor : public CallInterfaceDescriptor { | 776 class ApiCallbackDescriptor : public CallInterfaceDescriptor { |
871 public: | 777 public: |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
969 class ResumeGeneratorDescriptor final : public CallInterfaceDescriptor { | 875 class ResumeGeneratorDescriptor final : public CallInterfaceDescriptor { |
970 public: | 876 public: |
971 DECLARE_DESCRIPTOR(ResumeGeneratorDescriptor, CallInterfaceDescriptor) | 877 DECLARE_DESCRIPTOR(ResumeGeneratorDescriptor, CallInterfaceDescriptor) |
972 }; | 878 }; |
973 | 879 |
974 class FrameDropperTrampolineDescriptor final : public CallInterfaceDescriptor { | 880 class FrameDropperTrampolineDescriptor final : public CallInterfaceDescriptor { |
975 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(FrameDropperTrampolineDescriptor, | 881 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(FrameDropperTrampolineDescriptor, |
976 CallInterfaceDescriptor) | 882 CallInterfaceDescriptor) |
977 }; | 883 }; |
978 | 884 |
979 class PromiseHandleRejectDescriptor final : public CallInterfaceDescriptor { | |
980 public: | |
981 DEFINE_PARAMETERS(kPromise, kOnReject, kException) | |
982 DECLARE_DEFAULT_DESCRIPTOR(PromiseHandleRejectDescriptor, | |
983 CallInterfaceDescriptor, kParameterCount) | |
984 }; | |
985 | |
986 class WasmRuntimeCallDescriptor final : public CallInterfaceDescriptor { | 885 class WasmRuntimeCallDescriptor final : public CallInterfaceDescriptor { |
987 public: | 886 public: |
988 DEFINE_EMPTY_PARAMETERS() | 887 DEFINE_EMPTY_PARAMETERS() |
989 DECLARE_DEFAULT_DESCRIPTOR(WasmRuntimeCallDescriptor, CallInterfaceDescriptor, | 888 DECLARE_DEFAULT_DESCRIPTOR(WasmRuntimeCallDescriptor, CallInterfaceDescriptor, |
990 0) | 889 0) |
991 }; | 890 }; |
992 | 891 |
| 892 #define DEFINE_TFS_BUILTIN_DESCRIPTOR(Name, ...) \ |
| 893 class Name##Descriptor : public CallInterfaceDescriptor { \ |
| 894 public: \ |
| 895 DEFINE_PARAMETERS(__VA_ARGS__) \ |
| 896 DECLARE_DEFAULT_DESCRIPTOR(Name##Descriptor, CallInterfaceDescriptor, \ |
| 897 kParameterCount) \ |
| 898 }; |
| 899 BUILTIN_LIST_TFS(DEFINE_TFS_BUILTIN_DESCRIPTOR) |
| 900 #undef DEFINE_TFS_BUILTIN_DESCRIPTOR |
| 901 |
993 #undef DECLARE_DESCRIPTOR_WITH_BASE | 902 #undef DECLARE_DESCRIPTOR_WITH_BASE |
994 #undef DECLARE_DESCRIPTOR | 903 #undef DECLARE_DESCRIPTOR |
995 #undef DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE | 904 #undef DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE |
996 #undef DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG | 905 #undef DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG |
997 #undef DEFINE_PARAMETERS | 906 #undef DEFINE_PARAMETERS |
998 | 907 |
999 // We define the association between CallDescriptors::Key and the specialized | 908 // We define the association between CallDescriptors::Key and the specialized |
1000 // descriptor here to reduce boilerplate and mistakes. | 909 // descriptor here to reduce boilerplate and mistakes. |
1001 #define DEF_KEY(name) \ | 910 #define DEF_KEY(name, ...) \ |
1002 CallDescriptors::Key name##Descriptor::key() { return CallDescriptors::name; } | 911 CallDescriptors::Key name##Descriptor::key() { return CallDescriptors::name; } |
1003 INTERFACE_DESCRIPTOR_LIST(DEF_KEY) | 912 INTERFACE_DESCRIPTOR_LIST(DEF_KEY) |
1004 #undef DEF_KEY | 913 #undef DEF_KEY |
1005 } // namespace internal | 914 } // namespace internal |
1006 } // namespace v8 | 915 } // namespace v8 |
1007 | 916 |
1008 | 917 |
1009 #if V8_TARGET_ARCH_ARM64 | 918 #if V8_TARGET_ARCH_ARM64 |
1010 #include "src/arm64/interface-descriptors-arm64.h" | 919 #include "src/arm64/interface-descriptors-arm64.h" |
1011 #elif V8_TARGET_ARCH_ARM | 920 #elif V8_TARGET_ARCH_ARM |
1012 #include "src/arm/interface-descriptors-arm.h" | 921 #include "src/arm/interface-descriptors-arm.h" |
1013 #endif | 922 #endif |
1014 | 923 |
1015 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ | 924 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ |
OLD | NEW |