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

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

Issue 2777203007: [builtins] Introduce new TFC macro and auto-generate TFS descriptors (Closed)
Patch Set: Format Created 3 years, 8 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
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 <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
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
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
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
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
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
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_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698