5#ifndef V8_CODEGEN_INTERFACE_DESCRIPTORS_H_
6#define V8_CODEGEN_INTERFACE_DESCRIPTORS_H_
20#define TORQUE_BUILTIN_LIST_TFC(V) \
21 BUILTIN_LIST_FROM_TORQUE(IGNORE_BUILTIN, IGNORE_BUILTIN, V, IGNORE_BUILTIN, \
22 IGNORE_BUILTIN, IGNORE_BUILTIN)
24#define INTERFACE_DESCRIPTOR_LIST(V) \
27 V(CallApiCallbackGeneric) \
28 V(CallApiCallbackOptimized) \
31 V(ArrayNArgumentsConstructor) \
32 V(ArrayNoArgumentConstructor) \
33 V(ArraySingleArgumentConstructor) \
34 V(AsyncFunctionStackParameter) \
35 V(BaselineLeaveFrame) \
36 V(BaselineOutOfLinePrologue) \
40 V(BinaryOp_Baseline) \
41 V(BinaryOp_WithFeedback) \
42 V(BinarySmiOp_Baseline) \
43 V(CallForwardVarargs) \
44 V(CallFunctionTemplate) \
45 V(CallFunctionTemplateGeneric) \
47 V(CallTrampoline_Baseline) \
48 V(CallTrampoline_Baseline_Compact) \
49 V(CallTrampoline_WithFeedback) \
51 V(CallWithArrayLike) \
52 V(CallWithArrayLike_WithFeedback) \
54 V(CallWithSpread_Baseline) \
55 V(CallWithSpread_WithFeedback) \
58 V(CEntry1ArgvOnStack) \
59 V(CloneObjectBaseline) \
60 V(CloneObjectWithVector) \
65 V(Compare_WithFeedback) \
66 V(Construct_Baseline) \
67 V(ConstructForwardVarargs) \
68 V(ConstructForwardAllArgs) \
69 V(ConstructForwardAllArgs_Baseline) \
70 V(ConstructForwardAllArgs_WithFeedback) \
73 V(ConstructWithArrayLike) \
74 V(Construct_WithFeedback) \
75 V(ConstructWithSpread) \
76 V(ConstructWithSpread_Baseline) \
77 V(ConstructWithSpread_WithFeedback) \
79 V(CopyDataPropertiesWithExcludedProperties) \
80 V(CopyDataPropertiesWithExcludedPropertiesOnStack) \
81 V(CppBuiltinAdaptor) \
82 V(CreateFromSlowBoilerplateHelper) \
84 V(DefineKeyedOwnBaseline) \
85 V(DefineKeyedOwnWithVector) \
87 V(FindNonDefaultConstructorOrConstruct) \
89 V(GetIteratorStackParameter) \
91 V(GrowArrayElements) \
94 V(InterpreterCEntry1) \
95 V(InterpreterCEntry2) \
96 V(InterpreterDispatch) \
97 V(InterpreterPushArgsThenCall) \
98 V(InterpreterPushArgsThenConstruct) \
100 V(KeyedHasICBaseline) \
101 V(KeyedHasICWithVector) \
103 V(KeyedLoadBaseline) \
104 V(EnumeratedKeyedLoadBaseline) \
105 V(KeyedLoadWithVector) \
106 V(EnumeratedKeyedLoad) \
110 V(LoadGlobalBaseline) \
111 V(LoadGlobalNoFeedback) \
112 V(LoadGlobalWithVector) \
114 V(LoadWithReceiverAndVector) \
115 V(LoadWithReceiverBaseline) \
117 V(LookupWithVector) \
118 V(LookupTrampoline) \
120 V(MaglevOptimizeCodeOrTailCallOptimizedCodeSlot) \
123 V(OnStackReplacement) \
124 V(RegExpTrampoline) \
125 V(RestartFrameTrampoline) \
127 V(ResumeGeneratorBaseline) \
129 V(RunMicrotasksEntry) \
130 V(SingleParameterOnStack) \
135 V(StoreGlobalBaseline) \
136 V(StoreGlobalWithVector) \
139 V(StringAtAsString) \
141 V(SuspendGeneratorBaseline) \
143 V(TypeConversion_Baseline) \
144 V(TypeConversionNoContext) \
146 V(UnaryOp_Baseline) \
147 V(UnaryOp_WithFeedback) \
150 V(WasmFloat32ToNumber) \
151 V(WasmFloat64ToTagged) \
152 V(WasmJSToWasmWrapper) \
155 V(WasmHandleStackOverflow) \
157 V(IndirectPointerWriteBarrier) \
158 IF_TSAN(V, TSANLoad) \
159 IF_TSAN(V, TSANStore) \
160 BUILTIN_LIST_TFS(V) \
161 TORQUE_BUILTIN_LIST_TFC(V)
176 kNoContext = 1u << 0,
180 kNoStackScan = 1u << 1,
184 kAllowVarArgs = 1u << 2,
186 kCalleeSaveRegisters = 1u << 3,
190 static constexpr int kUninitializedCount = -1;
203 int register_parameter_count,
217 void InitializeTypes(
const MachineType* machine_types,
218 int machine_types_length);
223 return IsInitializedRegisters() && IsInitializedTypes();
233 return double_register_params_[
index];
237 return double_register_returns_[
index];
241 return machine_types_[
index];
245 return machine_types_[return_count_ +
index];
250 DCHECK(allocatable_registers_.is_empty());
251 for (
size_t i = 0;
i < num; ++
i) {
254 DCHECK(!allocatable_registers_.is_empty());
261 const bool initialized =
262 return_count_ != kUninitializedCount &&
263 param_count_ != kUninitializedCount &&
264 (register_param_count_ == 0 || register_params_ !=
nullptr);
269 const bool initialized = machine_types_ !=
nullptr;
275 bool AllStackParametersAreTagged()
const;
278 int register_param_count_ = kUninitializedCount;
279 int return_count_ = kUninitializedCount;
280 int param_count_ = kUninitializedCount;
305#define DEF_ENUM(name, ...) name,
308 NUMBER_OF_DESCRIPTORS
311 static void InitializeOncePerProcess();
312 static void TearDown();
316 return &call_descriptor_data_[
key];
320 ptrdiff_t index = data - call_descriptor_data_;
322 DCHECK_LT(index, CallDescriptors::NUMBER_OF_DESCRIPTORS);
328 call_descriptor_data_[NUMBER_OF_DESCRIPTORS];
331#if defined(V8_TARGET_ARCH_IA32)
369 return (
flags() & CallInterfaceDescriptorData::kNoContext) == 0;
373 return flags() & CallInterfaceDescriptorData::kAllowVarArgs;
377 return flags() & CallInterfaceDescriptorData::kCalleeSaveRegisters;
384 return data()->return_type(index);
390 return data()->register_param_count();
394 return data()->param_count() -
data()->register_param_count();
399 return data()->register_param(index);
404 return data()->double_register_param(index);
409 return data()->register_return(index);
414 return data()->double_register_return(index);
419 return data()->param_type(index);
423 return data()->allocatable_registers();
427 return data()->stack_order();
434 const char* DebugName()
const;
437 return data() == other.data();
447 static constexpr inline auto DefaultRegisterArray();
448 static constexpr inline auto DefaultDoubleRegisterArray();
449 static constexpr inline auto DefaultReturnRegisterArray();
450 static constexpr inline auto DefaultReturnDoubleRegisterArray();
451 static constexpr inline std::array<Register, kJSBuiltinRegisterParams>
452 DefaultJSRegisterArray();
456 for (
int i = 0;
i < data->register_param_count();
i++) {
458 if (!IsValidFloatParameterRegister(data->register_param(
i))) {
475template <
typename DerivedDescriptor>
496 static constexpr inline auto registers();
522 return Flags((DerivedDescriptor::kNoContext
525 (DerivedDescriptor::kAllowVarArgs
528 (DerivedDescriptor::kNoStackScan
531 (DerivedDescriptor::kCalleeSaveRegisters
536 return DerivedDescriptor::kAllowVarArgs;
539 return !DerivedDescriptor::kNoContext;
563 static inline void VerifyArgumentRegisterCount(
578 data->InitializeTypes(
nullptr, 0);
582template <
typename Descriptor>
587 static constexpr inline auto registers();
593template <Builtin kBuiltin>
600 size_t size()
const {
return 0; }
606template <
typename... Registers>
610 return {first_reg, regs...};
618 size_t size()
const {
return 0; }
624template <
typename... Registers>
628 return {first_reg, regs...};
633#define DECLARE_DESCRIPTOR_WITH_BASE(name, base) \
636 friend class StaticCallInterfaceDescriptor<name>; \
637 explicit name() : base(key()) {} \
638 static inline CallDescriptors::Key key();
640#define DECLARE_DEFAULT_DESCRIPTOR(name) \
641 DECLARE_DESCRIPTOR_WITH_BASE(name, StaticCallInterfaceDescriptor) \
642 static constexpr int kMaxRegisterParams = kMaxTFSBuiltinRegisterParams; \
645 explicit name(CallDescriptors::Key key) \
646 : StaticCallInterfaceDescriptor(key) {} \
650#define DECLARE_JS_COMPATIBLE_DESCRIPTOR(name) \
651 DECLARE_DESCRIPTOR_WITH_BASE(name, StaticJSCallInterfaceDescriptor) \
653 explicit name(CallDescriptors::Key key) \
654 : StaticJSCallInterfaceDescriptor(key) {} \
658#define DEFINE_RESULT_AND_PARAMETERS(return_count, ...) \
659 static constexpr int kReturnCount = return_count; \
660 enum ParameterIndices { \
665 kContext = kParameterCount \
670#define DEFINE_PARAMETERS_ENTRY(...) \
671 static constexpr bool kNoContext = true; \
672 static constexpr bool kNoStackScan = true; \
673 static constexpr StackArgumentOrder kStackArgumentOrder = \
674 StackArgumentOrder::kDefault; \
675 static constexpr int kReturnCount = 1; \
676 enum ParameterIndices { \
683#define DEFINE_PARAMETERS(...) DEFINE_RESULT_AND_PARAMETERS(1, ##__VA_ARGS__)
685#define DEFINE_PARAMETERS_NO_CONTEXT(...) \
686 DEFINE_PARAMETERS(__VA_ARGS__) \
687 static constexpr bool kNoContext = true;
689#define DEFINE_PARAMETERS_VARARGS(...) \
690 DEFINE_PARAMETERS(__VA_ARGS__) \
691 static constexpr bool kAllowVarArgs = true; \
692 static constexpr StackArgumentOrder kStackArgumentOrder = \
693 StackArgumentOrder::kJS;
695#define DEFINE_PARAMETERS_NO_CONTEXT_VARARGS(...) \
696 DEFINE_PARAMETERS_NO_CONTEXT(__VA_ARGS__) \
697 static constexpr bool kAllowVarArgs = true; \
698 static constexpr StackArgumentOrder kStackArgumentOrder = \
699 StackArgumentOrder::kJS;
701#define DEFINE_RESULT_AND_PARAMETERS_NO_CONTEXT(return_count, ...) \
702 DEFINE_RESULT_AND_PARAMETERS(return_count, ##__VA_ARGS__) \
703 static constexpr bool kNoContext = true;
705#define DEFINE_RESULT_AND_PARAMETER_TYPES(...) \
706 static constexpr bool kCustomMachineTypes = true; \
707 static constexpr MachineType kMachineTypes[] = {__VA_ARGS__}; \
708 static void InitializeTypes(CallInterfaceDescriptorData* data) { \
710 kReturnCount + kParameterCount == arraysize(kMachineTypes), \
711 "Parameter names definition is not consistent with parameter types"); \
712 data->InitializeTypes(kMachineTypes, arraysize(kMachineTypes)); \
715#define DEFINE_PARAMETER_TYPES(...) \
716 DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::AnyTagged() , \
721#define DEFINE_JS_PARAMETERS(...) \
722 static constexpr bool kAllowVarArgs = true; \
723 static constexpr int kReturnCount = 1; \
724 static constexpr StackArgumentOrder kStackArgumentOrder = \
725 StackArgumentOrder::kJS; \
726 enum ParameterIndices { \
729 kActualArgumentsCount, \
732 kContext = kParameterCount \
735#define DEFINE_JS_PARAMETERS_NO_CONTEXT(...) \
736 static constexpr bool kAllowVarArgs = true; \
737 static constexpr bool kNoContext = true; \
738 static constexpr int kReturnCount = 1; \
739 static constexpr StackArgumentOrder kStackArgumentOrder = \
740 StackArgumentOrder::kJS; \
741 enum ParameterIndices { \
744 kActualArgumentsCount, \
749#define DEFINE_JS_PARAMETER_TYPES(...) \
750 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), \
751 MachineType::AnyTagged(), \
752 MachineType::Int32(), \
763#define SANDBOX_EXPOSED_DESCRIPTOR(tag) \
764 static constexpr CodeEntrypointTag kEntrypointTag = tag;
769#define INTERNAL_DESCRIPTOR() \
770 static constexpr CodeEntrypointTag kEntrypointTag = kInvalidEntrypointTag;
772#define DECLARE_DESCRIPTOR(name) \
773 DECLARE_DESCRIPTOR_WITH_BASE(name, StaticCallInterfaceDescriptor) \
775 explicit name(CallDescriptors::Key key) \
776 : StaticCallInterfaceDescriptor(key) {} \
849 static constexpr inline
Register FrameBaseRegister();
879#ifdef V8_JS_LINKAGE_INCLUDES_DISPATCH_HANDLE
948 static constexpr inline
Register ReceiverRegister();
949 static constexpr inline
Register NameRegister();
950 static constexpr inline
Register SlotRegister();
979 static constexpr inline
Register ICKindRegister();
994 static constexpr inline
Register ICKindRegister();
1029 MachineType::AnyTagged(),
1030 MachineType::AnyTagged(),
1031 MachineType::AnyTagged())
1041 MachineType::AnyTagged(),
1042 MachineType::AnyTagged())
1052 MachineType::AnyTagged(),
1053 MachineType::AnyTagged())
1059 MaglevOptimizeCodeOrTailCallOptimizedCodeSlotDescriptor> {
1068 static constexpr inline
Register FlagsRegister();
1069 static constexpr inline
Register FeedbackVectorRegister();
1073 static constexpr inline auto
registers();
1086 static constexpr inline
Register ReceiverRegister();
1087 static constexpr inline
Register NameRegister();
1088 static constexpr inline
Register ValueRegister();
1089 static constexpr inline
Register SlotRegister();
1134 static constexpr inline
Register MapRegister();
1151 static constexpr inline
Register VectorRegister();
1208 static constexpr inline
Register FlagsRegister();
1237 MachineType::AnyTagged(),
1238 MachineType::AnyTagged(),
1239 MachineType::TaggedSigned(),
1240 MachineType::TaggedSigned(),
1241 MachineType::AnyTagged())
1260 static constexpr inline
Register VectorRegister();
1275 static constexpr inline
Register ReceiverRegister();
1276 static constexpr inline
Register NameRegister();
1277 static constexpr inline
Register SlotRegister();
1306 static constexpr inline
Register VectorRegister();
1324 static constexpr inline
Register EnumIndexRegister();
1325 static constexpr inline
Register CacheTypeRegister();
1326 static constexpr inline
Register SlotRegister();
1357 static constexpr inline
Register ReceiverRegister();
1358 static constexpr inline
Register NameRegister();
1359 static constexpr inline
Register SlotRegister();
1375 static constexpr inline
Register VectorRegister();
1398 static constexpr inline
Register LookupStartObjectRegister();
1429 static constexpr inline
Register VectorRegister();
1443 static constexpr inline
Register TargetRegister();
1444 static constexpr inline
Register NewTargetRegister();
1459 static constexpr
bool kRestrictAllocatableRegisters = true;
1460 static constexpr
bool kCalleeSaveRegisters = true;
1461 static constexpr inline
Register ObjectRegister();
1462 static constexpr inline
Register SlotAddressRegister();
1464 static constexpr inline
Register ValueRegister();
1465 static constexpr inline
RegList ComputeSavedRegisters(
1477 IndirectPointerWriteBarrierDescriptor> {
1487 static constexpr
bool kRestrictAllocatableRegisters = true;
1488 static constexpr
bool kCalleeSaveRegisters = true;
1489 static constexpr inline
Register ObjectRegister();
1490 static constexpr inline
Register SlotAddressRegister();
1491 static constexpr inline
Register IndirectPointerTagRegister();
1492 static constexpr inline
RegList ComputeSavedRegisters(
1500class TSANStoreDescriptor final
1511 static constexpr
bool kRestrictAllocatableRegisters = true;
1514class TSANLoadDescriptor final
1524 static constexpr
bool kRestrictAllocatableRegisters = true;
1537 static constexpr inline Register ArgumentRegister();
1575 AsyncFunctionStackParameterDescriptor> {
1614 static constexpr inline auto registers();
1626 static constexpr inline auto
registers();
1639 static constexpr inline auto
registers();
1653 static constexpr inline auto
registers();
1663 MachineType::Int32(),
1664 MachineType::Int32(),
1665 MachineType::AnyTagged())
1668 static constexpr inline auto registers();
1681 static constexpr inline auto
registers();
1693 static constexpr inline auto
registers();
1702 kTopmostScriptHavingContext)
1704 MachineType::AnyTagged(),
1705 MachineType::Int32(),
1706 MachineType::AnyTagged())
1709 static constexpr inline auto registers();
1722 static constexpr inline auto
registers();
1731 MachineType::Int32(),
1732 MachineType::AnyTagged(),
1733 MachineType::UintPtr())
1739 CallWithSpread_WithFeedbackDescriptor> {
1745 MachineType::Int32(),
1746 MachineType::AnyTagged(),
1747 MachineType::UintPtr(),
1748 MachineType::AnyTagged(),
1749 MachineType::AnyTagged())
1762 static constexpr inline auto
registers();
1772 MachineType::AnyTagged(),
1773 MachineType::UintPtr(),
1774 MachineType::AnyTagged(),
1775 MachineType::AnyTagged())
1790 static constexpr inline auto registers();
1803 static constexpr inline auto
registers();
1814 static constexpr inline auto registers();
1825 static constexpr inline auto registers();
1830 ConstructWithSpread_BaselineDescriptor> {
1835 MachineType::AnyTagged())
1841 ConstructWithSpread_WithFeedbackDescriptor> {
1846 MachineType::AnyTagged(),
1847 MachineType::AnyTagged())
1861 static constexpr inline auto
registers();
1873 static constexpr inline auto
registers();
1883 MachineType::AnyTagged(),
1884 MachineType::AnyTagged())
1890 ConstructForwardAllArgs_WithFeedbackDescriptor> {
1895 MachineType::AnyTagged(),
1896 MachineType::AnyTagged(),
1897 MachineType::AnyTagged())
1908 static constexpr inline auto registers();
1923 ArrayNArgumentsConstructorDescriptor> {
1950 MachineType::AnyTagged(),
1951 MachineType::Int32(),
1952 MachineType::AnyTagged())
1960 ArraySingleArgumentConstructorDescriptor> {
1967 kArraySizeSmiParameter, kReceiverParameter)
1969 MachineType::AnyTagged(),
1970 MachineType::Int32(),
1972 MachineType::AnyTagged(),
1973 MachineType::AnyTagged())
1986 static constexpr inline auto registers();
1996 static constexpr inline auto registers();
2005 MachineType::AnyTagged(),
2006 MachineType::IntPtr())
2017 static constexpr inline auto registers();
2030 static constexpr inline auto
registers();
2043 static constexpr inline auto
registers();
2053 MachineType::TaggedPointer(),
2054 MachineType::AnyTagged(),
2055 MachineType::IntPtr())
2065 MachineType::IntPtr(),
2066 MachineType::IntPtr())
2083 CreateFromSlowBoilerplateHelperDescriptor> {
2088 MachineType::AnyTagged(),
2089 MachineType::AnyTagged(),
2090 MachineType::AnyTagged(),
2091 MachineType::AnyTagged())
2106 MachineType::Pointer(),
2107 MachineType::AnyTagged(),
2108 MachineType::AnyTagged(),
2109 MachineType::AnyTagged(),
2110 MachineType::AnyTagged())
2121 kFunctionTemplateInfo)
2125 MachineType::Int32(),
2126 MachineType::AnyTagged())
2129 static constexpr inline Register ApiFunctionAddressRegister();
2130 static constexpr inline Register ActualArgumentsCountRegister();
2131 static constexpr inline Register FunctionTemplateInfoRegister();
2133 static constexpr inline auto registers();
2141 kFunctionTemplateInfo)
2145 MachineType::Int32(),
2146 MachineType::AnyTagged(),
2147 MachineType::AnyTagged())
2150 static constexpr inline Register ActualArgumentsCountRegister();
2151 static constexpr inline Register TopmostScriptHavingContextRegister();
2152 static constexpr inline Register FunctionTemplateInfoRegister();
2154 static constexpr inline auto registers();
2167 static constexpr inline
Register ReceiverRegister();
2168 static constexpr inline
Register HolderRegister();
2169 static constexpr inline
Register CallbackRegister();
2184 static constexpr inline
Register ObjectRegister();
2185 static constexpr inline
Register KeyRegister();
2196 kJavaScriptCallArgCount, kStackFrameSize,
2197 kJavaScriptCallNewTarget,
2198 kInterpreterBytecodeArray)
2200 MachineType::AnyTagged(),
2201 MachineType::Int32(),
2202 MachineType::Int32(),
2203 MachineType::AnyTagged(),
2204 MachineType::AnyTagged())
2207 static constexpr inline auto registers();
2210 static constexpr int kMaxRegisterParams =
2211 StaticCallInterfaceDescriptor::kMaxRegisterParams + 1;
2223 static constexpr inline
Register ParamsSizeRegister();
2224 static constexpr inline
Register WeightRegister();
2226 static constexpr inline auto
registers();
2239 static constexpr inline
Register MaybeTargetCodeRegister();
2240 static constexpr inline
Register ExpectedParameterCountRegister();
2242 static constexpr inline auto
registers();
2252 MachineType::IntPtr(),
2253 MachineType::AnyTagged(),
2254 MachineType::IntPtr())
2257 static constexpr inline auto registers();
2262 InterpreterPushArgsThenCallDescriptor> {
2271 static constexpr inline auto
registers();
2280 kNewTarget, kFeedbackElement)
2282 MachineType::Pointer(),
2283 MachineType::AnyTagged(),
2284 MachineType::AnyTagged(),
2285 MachineType::AnyTagged())
2288 static constexpr inline auto registers();
2298 MachineType::Int32(),
2299 MachineType::Pointer(),
2300 MachineType::Pointer())
2313 MachineType::AnyTagged(),
2314 MachineType::Int32(),
2315 MachineType::Pointer(),
2316 MachineType::Pointer())
2324 FindNonDefaultConstructorOrConstructDescriptor> {
2329 MachineType::AnyTagged(),
2330 MachineType::AnyTagged(),
2331 MachineType::AnyTagged(),
2332 MachineType::AnyTagged())
2342 MachineType::AnyTagged(),
2343 MachineType::AnyTagged(),
2344 MachineType::AnyTagged(),
2345 MachineType::TaggedSigned(),
2346 MachineType::AnyTagged())
2359 static constexpr inline auto
registers();
2368 MachineType::TaggedSigned(),
2369 MachineType::AnyTagged(),
2370 MachineType::IntPtr(),
2382 MachineType::IntPtr(),
2383 MachineType::IntPtr(),
2384 MachineType::IntPtr(),
2406 static constexpr inline auto
registers();
2417 static constexpr inline Register MicrotaskQueueRegister();
2426 MachineType::Float32())
2436 MachineType::Float64())
2451 static constexpr
int kMaxRegisterParams = 1;
2458 static constexpr inline auto
registers();
2459 static constexpr inline
Register WrapperBufferRegister();
2474 static constexpr
int kMaxRegisterParams = 1;
2475 static constexpr inline auto
registers();
2476 static constexpr inline auto return_registers();
2477 static constexpr inline auto return_double_registers();
2486 MachineType::AnyTagged())
2506 MachineType::Uint32())
2516 MachineType::AnyTagged())
2526 MachineType::Uint32(),
2527 MachineType::AnyTagged())
2537 MachineType::AnyTagged(),
2538 MachineType::TaggedSigned(),
2539 MachineType::TaggedSigned(),
2540 MachineType::AnyTagged())
2550 MachineType::TaggedSigned(),
2551 MachineType::TaggedSigned())
2561 MachineType::AnyTagged(),
2562 MachineType::UintPtr(),
2563 MachineType::AnyTagged())
2569 CallTrampoline_Baseline_CompactDescriptor> {
2575 static
bool EncodeBitField(uint32_t argc, uintptr_t slot, uint32_t* out) {
2576 if (ArgumentCountField::is_valid(argc) && SlotField::is_valid(slot)) {
2577 *out = ArgumentCountField::encode(argc) | SlotField::encode(slot);
2585 MachineType::AnyTagged(),
2586 MachineType::Uint32())
2596 MachineType::Int32(),
2597 MachineType::UintPtr())
2603 CallTrampoline_WithFeedbackDescriptor> {
2609 MachineType::Int32(),
2610 MachineType::UintPtr(),
2611 MachineType::AnyTagged(),
2612 MachineType::AnyTagged())
2622 MachineType::AnyTagged(),
2623 MachineType::UintPtr(),
2624 MachineType::AnyTagged())
2638 static constexpr inline auto
registers();
2657 MachineType::AnyTagged())
2667 MachineType::UintPtr(),
2668 MachineType::AnyTagged())
2678 MachineType::UintPtr())
2684 CheckTurboshaftFloat32TypeDescriptor> {
2690 MachineType::TaggedPointer(),
2691 MachineType::TaggedSigned())
2697 CheckTurboshaftFloat64TypeDescriptor> {
2703 MachineType::TaggedPointer(),
2704 MachineType::TaggedSigned())
2714 MachineType::UintPtr())
2724 MachineType::Float64())
2728#define DEFINE_TFS_BUILTIN_DESCRIPTOR(Name, DoesNeedContext, ...) \
2729 class Name##Descriptor \
2730 : public StaticCallInterfaceDescriptor<Name##Descriptor> { \
2732 INTERNAL_DESCRIPTOR() \
2733 DEFINE_PARAMETERS(__VA_ARGS__) \
2734 static constexpr bool kNoContext = DoesNeedContext == NeedsContext::kNo; \
2735 DECLARE_DEFAULT_DESCRIPTOR(Name##Descriptor) \
2738#undef DEFINE_TFS_BUILTIN_DESCRIPTOR
2743#include "torque-generated/interface-descriptors.inc"
2745#undef DECLARE_DEFAULT_DESCRIPTOR
2746#undef DECLARE_DESCRIPTOR_WITH_BASE
2747#undef DECLARE_DESCRIPTOR
2748#undef DECLARE_JS_COMPATIBLE_DESCRIPTOR
2749#undef DEFINE_RESULT_AND_PARAMETERS
2750#undef DEFINE_PARAMETERS_ENTRY
2751#undef DEFINE_PARAMETERS
2752#undef DEFINE_PARAMETERS_VARARGS
2753#undef DEFINE_PARAMETERS_NO_CONTEXT
2754#undef DEFINE_RESULT_AND_PARAMETERS_NO_CONTEXT
2755#undef DEFINE_RESULT_AND_PARAMETER_TYPES
2756#undef DEFINE_PARAMETER_TYPES
2757#undef DEFINE_JS_PARAMETERS
2758#undef DEFINE_JS_PARAMETER_TYPES
2762#define DEF_KEY(name, ...) \
2763 CallDescriptors::Key name##Descriptor::key() { return CallDescriptors::name; }
#define BUILTIN_LIST_TFS(V)
uint8_t data_[MAX_STACK_LENGTH]
union v8::internal::@341::BuiltinMetadata::KindSpecificData data
#define DEF_ENUM(Name,...)
static CallInterfaceDescriptorData * call_descriptor_data(CallDescriptors::Key key)
static Key GetKey(const CallInterfaceDescriptorData *data)
Register register_param(int index) const
void RestrictAllocatableRegisters(const Register *registers, size_t num)
CallInterfaceDescriptorData & operator=(const CallInterfaceDescriptorData &)=delete
static constexpr int kUninitializedCount
RegList allocatable_registers() const
CallInterfaceDescriptorData(const CallInterfaceDescriptorData &)=delete
int register_param_count() const
RegList allocatable_registers_
bool IsInitializedRegisters() const
DoubleRegister double_register_return(int index) const
StackArgumentOrder stack_order() const
MachineType return_type(int index) const
Register register_return(int index) const
bool IsInitializedTypes() const
bool IsInitialized() const
CodeEntrypointTag tag() const
MachineType param_type(int index) const
DoubleRegister double_register_param(int index) const
CallInterfaceDescriptorData()=default
Register GetRegisterReturn(int index) const
DoubleRegister GetDoubleRegisterParameter(int index) const
int GetStackParameterCount() const
bool CheckFloatingPointParameters(CallInterfaceDescriptorData *data)
RegList allocatable_registers() const
MachineType GetReturnType(int index) const
CallInterfaceDescriptorData::Flags Flags
const CallInterfaceDescriptorData * data_
bool operator==(const CallInterfaceDescriptor &other) const
Register GetRegisterParameter(int index) const
int GetParameterCount() const
DoubleRegister GetDoubleRegisterReturn(int index) const
~CallInterfaceDescriptor()=default
StackArgumentOrder GetStackArgumentOrder() const
CodeEntrypointTag tag() const
CallInterfaceDescriptor(CallDescriptors::Key key)
int GetRegisterParameterCount() const
int GetReturnCount() const
bool HasContextParameter() const
CallInterfaceDescriptor()
const CallInterfaceDescriptorData * data() const
bool CalleeSaveRegisters() const
bool AllowVarArgs() const
MachineType GetParameterType(int index) const
static constexpr Register ContextRegister()
static constexpr MachineType Float64()
static constexpr MachineType TaggedPointer()
static constexpr auto return_registers()
static constexpr bool kCalleeSaveRegisters
static constexpr auto return_double_registers()
static constexpr MachineType GetParameterType(int i)
static constexpr auto double_registers()
static constexpr bool kNoStackScan
static void InitializeTypes(CallInterfaceDescriptorData *data)
static constexpr bool kAllowVarArgs
static constexpr DoubleRegister GetDoubleRegisterParameter(int i)
static constexpr int kReturnCount
static constexpr auto registers()
static constexpr int kMaxRegisterParams
static constexpr Register GetRegisterParameter(int i)
static constexpr bool kNoContext
static constexpr Flags flags()
static constexpr bool kCustomMachineTypes
static constexpr auto kStackArgumentOrder
void Initialize(CallInterfaceDescriptorData *data)
static constexpr int GetRegisterParameterCount()
static constexpr Register * GetRegisterData()
static constexpr bool HasContextParameter()
static constexpr int GetStackParameterCount()
StaticCallInterfaceDescriptor(CallDescriptors::Key key)
static constexpr int kParameterCount
static constexpr bool AllowVarArgs()
static constexpr int GetReturnCount()
static constexpr bool kRestrictAllocatableRegisters
static constexpr int GetParameterCount()
static constexpr int GetStackParameterIndex(int i)
static constexpr auto kStackArgumentOrder
static constexpr auto registers()
static constexpr Register GapRegister()
other heap size flags(e.g. initial_heap_size) take precedence") DEFINE_SIZE_T( max_shared_heap_size
#define DEFINE_PARAMETERS_ENTRY(...)
#define INTERNAL_DESCRIPTOR()
#define DEFINE_PARAMETERS_VARARGS(...)
#define DECLARE_DEFAULT_DESCRIPTOR(name)
#define INTERFACE_DESCRIPTOR_LIST(V)
#define DEFINE_JS_PARAMETERS(...)
#define DEFINE_JS_PARAMETERS_NO_CONTEXT(...)
#define DEFINE_JS_PARAMETER_TYPES(...)
#define DEFINE_TFS_BUILTIN_DESCRIPTOR(Name, DoesNeedContext,...)
#define DEFINE_PARAMETER_TYPES(...)
#define DEFINE_PARAMETERS_NO_CONTEXT_VARARGS(...)
#define DEFINE_PARAMETERS(...)
#define DEFINE_PARAMETERS_NO_CONTEXT(...)
#define DEFINE_RESULT_AND_PARAMETER_TYPES(...)
#define DEFINE_RESULT_AND_PARAMETERS(return_count,...)
#define DEFINE_RESULT_AND_PARAMETERS_NO_CONTEXT(return_count,...)
#define DECLARE_DESCRIPTOR(name)
#define DECLARE_JS_COMPATIBLE_DESCRIPTOR(name)
#define DEF_KEY(name,...)
#define SANDBOX_EXPOSED_DESCRIPTOR(tag)
RegListBase< RegisterT > registers
constexpr EmptyDoubleRegisterArray DoubleRegisterArray()
DwVfpRegister DoubleRegister
@ kStoreTransitionICHandlerEntrypointTag
@ kLoadWithVectorICHandlerEntrypointTag
@ kStoreWithVectorICHandlerEntrypointTag
@ kDefaultCodeEntrypointTag
constexpr EmptyRegisterArray RegisterArray()
constexpr int kJSBuiltinRegisterParams
constexpr bool IsFloatingPoint(MachineRepresentation rep)
constexpr int kMaxTFSBuiltinRegisterParams
constexpr Register kContextRegister
V8_EXPORT_PRIVATE bool AreAliased(const CPURegister ®1, const CPURegister ®2, const CPURegister ®3=NoReg, const CPURegister ®4=NoReg, const CPURegister ®5=NoReg, const CPURegister ®6=NoReg, const CPURegister ®7=NoReg, const CPURegister ®8=NoReg)
constexpr int kMaxBuiltinRegisterParams
#define DCHECK_LE(v1, v2)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define V8_EXPORT_PRIVATE
DoubleRegister operator[](size_t i) const
const DoubleRegister * data() const
const Register * data() const
Register operator[](size_t i) const
std::unique_ptr< ValueMirror > key