5 #ifndef V8_INTERFACE_DESCRIPTORS_H_ 6 #define V8_INTERFACE_DESCRIPTORS_H_ 10 #include "src/assembler-arch.h" 11 #include "src/globals.h" 12 #include "src/isolate.h" 13 #include "src/machine-type.h" 18 #define INTERFACE_DESCRIPTOR_LIST(V) \ 19 V(CppBuiltinAdaptor) \ 20 V(CEntry1ArgvOnStack) \ 28 V(LoadGlobalWithVector) \ 33 V(StoreGlobalWithVector) \ 34 V(FastNewFunctionContext) \ 38 V(TypeConversionStackParameter) \ 40 V(AsyncFunctionStackParameter) \ 43 V(CallForwardVarargs) \ 45 V(CallWithArrayLike) \ 49 V(ConstructForwardVarargs) \ 50 V(ConstructWithSpread) \ 51 V(ConstructWithArrayLike) \ 54 V(AllocateHeapNumber) \ 56 V(ArrayNoArgumentConstructor) \ 57 V(ArraySingleArgumentConstructor) \ 58 V(ArrayNArgumentsConstructor) \ 67 V(GrowArrayElements) \ 68 V(NewArgumentsElements) \ 69 V(InterpreterDispatch) \ 70 V(InterpreterPushArgsThenCall) \ 71 V(InterpreterPushArgsThenConstruct) \ 72 V(InterpreterCEntry1) \ 73 V(InterpreterCEntry2) \ 75 V(FrameDropperTrampoline) \ 80 V(WasmI32AtomicWait) \ 81 V(CloneObjectWithVector) \ 97 void InitializePlatformSpecific(
int register_parameter_count,
108 void InitializePlatformIndependent(
Flags flags,
int return_count,
111 int machine_types_length);
115 bool IsInitialized()
const {
116 return IsInitializedPlatformSpecific() &&
117 IsInitializedPlatformIndependent();
120 Flags flags()
const {
return flags_; }
121 int return_count()
const {
return return_count_; }
122 int param_count()
const {
return param_count_; }
123 int register_param_count()
const {
return register_param_count_; }
124 Register register_param(
int index)
const {
return register_params_[index]; }
125 Register* register_params()
const {
return register_params_; }
127 DCHECK_LT(index, return_count_);
128 return machine_types_[index];
131 DCHECK_LT(index, param_count_);
132 return machine_types_[return_count_ + index];
135 void RestrictAllocatableRegisters(
const Register* registers,
int num) {
136 DCHECK_EQ(allocatable_registers_, 0);
137 for (
int i = 0;
i < num; ++
i) {
138 allocatable_registers_ |= registers[
i].bit();
140 DCHECK_GT(NumRegs(allocatable_registers_), 0);
143 RegList allocatable_registers()
const {
return allocatable_registers_; }
146 bool IsInitializedPlatformSpecific()
const {
147 const bool initialized =
148 register_param_count_ >= 0 && register_params_ !=
nullptr;
152 bool IsInitializedPlatformIndependent()
const {
153 const bool initialized =
154 return_count_ >= 0 && param_count_ >= 0 && machine_types_ !=
nullptr;
160 bool AllStackParametersAreTagged()
const;
163 int register_param_count_ = -1;
164 int return_count_ = -1;
165 int param_count_ = -1;
166 Flags flags_ = kNoFlags;
170 RegList allocatable_registers_ = 0;
178 Register* register_params_ =
nullptr;
187 #define DEF_ENUM(name, ...) name, 188 INTERFACE_DESCRIPTOR_LIST(DEF_ENUM)
190 NUMBER_OF_DESCRIPTORS
193 static void InitializeOncePerProcess();
194 static void TearDown();
197 CallDescriptors::Key key) {
198 return &call_descriptor_data_[key];
202 ptrdiff_t index = data - call_descriptor_data_;
204 DCHECK_LT(index, CallDescriptors::NUMBER_OF_DESCRIPTORS);
205 return static_cast<CallDescriptors::Key
>(index);
210 call_descriptor_data_[NUMBER_OF_DESCRIPTORS];
221 : data_(CallDescriptors::call_descriptor_data(key)) {}
223 Flags flags()
const {
return data()->flags(); }
225 bool HasContextParameter()
const {
226 return (flags() & CallInterfaceDescriptorData::kNoContext) == 0;
229 int GetReturnCount()
const {
return data()->return_count(); }
232 DCHECK_LT(index, data()->return_count());
233 return data()->return_type(index);
236 int GetParameterCount()
const {
return data()->param_count(); }
238 int GetRegisterParameterCount()
const {
239 return data()->register_param_count();
242 int GetStackParameterCount()
const {
243 return data()->param_count() - data()->register_param_count();
246 Register GetRegisterParameter(
int index)
const {
247 return data()->register_param(index);
251 DCHECK_LT(index, data()->param_count());
252 return data()->param_type(index);
255 RegList allocatable_registers()
const {
256 return data()->allocatable_registers();
259 static const Register ContextRegister();
261 const char* DebugName()
const;
270 virtual void InitializePlatformIndependent(
274 data->InitializePlatformIndependent(CallInterfaceDescriptorData::kNoFlags,
275 1, data->register_param_count(),
282 static void DefaultInitializePlatformSpecific(
289 static void JSDefaultInitializePlatformSpecific(
300 DCHECK_EQ(data, data_);
301 DCHECK(!data->IsInitialized());
302 InitializePlatformSpecific(data);
303 InitializePlatformIndependent(data);
304 DCHECK(data->IsInitialized());
308 #define DECLARE_DESCRIPTOR_WITH_BASE(name, base) \ 310 explicit name() : base(key()) {} \ 311 static inline CallDescriptors::Key key(); 313 #if defined(V8_TARGET_ARCH_IA32) 324 constexpr
int kMaxBuiltinRegisterParams = 4;
325 constexpr
int kMaxTFSBuiltinRegisterParams = 3;
327 constexpr
int kMaxBuiltinRegisterParams = 5;
328 constexpr
int kMaxTFSBuiltinRegisterParams = kMaxBuiltinRegisterParams;
330 STATIC_ASSERT(kMaxTFSBuiltinRegisterParams <= kMaxBuiltinRegisterParams);
332 #define DECLARE_DEFAULT_DESCRIPTOR(name, base) \ 333 DECLARE_DESCRIPTOR_WITH_BASE(name, base) \ 335 static const int kRegisterParams = \ 336 kParameterCount > kMaxTFSBuiltinRegisterParams \ 337 ? kMaxTFSBuiltinRegisterParams \ 339 static const int kStackParams = kParameterCount - kRegisterParams; \ 340 void InitializePlatformSpecific(CallInterfaceDescriptorData* data) \ 342 DefaultInitializePlatformSpecific(data, kRegisterParams); \ 344 void InitializePlatformIndependent(CallInterfaceDescriptorData* data) \ 346 data->InitializePlatformIndependent(Flags(kDescriptorFlags), kReturnCount, \ 347 kParameterCount, nullptr, 0); \ 349 name(CallDescriptors::Key key) : base(key) {} \ 353 #define DECLARE_JS_COMPATIBLE_DESCRIPTOR(name, base, \ 354 non_js_reg_parameters_count) \ 355 DECLARE_DESCRIPTOR_WITH_BASE(name, base) \ 357 void InitializePlatformSpecific(CallInterfaceDescriptorData* data) \ 359 JSDefaultInitializePlatformSpecific(data, non_js_reg_parameters_count); \ 361 name(CallDescriptors::Key key) : base(key) {} \ 365 #define DEFINE_RESULT_AND_PARAMETERS(return_count, ...) \ 366 static constexpr int kDescriptorFlags = \ 367 CallInterfaceDescriptorData::kNoFlags; \ 368 static constexpr int kReturnCount = return_count; \ 369 enum ParameterIndices { \ 374 kContext = kParameterCount \ 377 #define DEFINE_RESULT_AND_PARAMETERS_NO_CONTEXT(return_count, ...) \ 378 static constexpr int kDescriptorFlags = \ 379 CallInterfaceDescriptorData::kNoContext; \ 380 static constexpr int kReturnCount = return_count; \ 381 enum ParameterIndices { \ 388 #define DEFINE_PARAMETERS(...) DEFINE_RESULT_AND_PARAMETERS(1, ##__VA_ARGS__) 390 #define DEFINE_PARAMETERS_NO_CONTEXT(...) \ 391 DEFINE_RESULT_AND_PARAMETERS_NO_CONTEXT(1, ##__VA_ARGS__) 393 #define DEFINE_RESULT_AND_PARAMETER_TYPES(...) \ 394 void InitializePlatformIndependent(CallInterfaceDescriptorData* data) \ 396 MachineType machine_types[] = {__VA_ARGS__}; \ 398 kReturnCount + kParameterCount == arraysize(machine_types), \ 399 "Parameter names definition is not consistent with parameter types"); \ 400 data->InitializePlatformIndependent(Flags(kDescriptorFlags), kReturnCount, \ 401 kParameterCount, machine_types, \ 402 arraysize(machine_types)); \ 405 #define DEFINE_PARAMETER_TYPES(...) \ 406 DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::AnyTagged() , \ 409 #define DEFINE_JS_PARAMETERS(...) \ 410 static constexpr int kDescriptorFlags = \ 411 CallInterfaceDescriptorData::kNoFlags; \ 412 static constexpr int kReturnCount = 1; \ 413 enum ParameterIndices { \ 416 kActualArgumentsCount, \ 420 kContext = kParameterCount \ 423 #define DEFINE_JS_PARAMETER_TYPES(...) \ 424 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(), \ 425 MachineType::AnyTagged(), \ 426 MachineType::Int32(), \ 429 #define DECLARE_DESCRIPTOR(name, base) \ 430 DECLARE_DESCRIPTOR_WITH_BASE(name, base) \ 432 void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override; \ 433 name(CallDescriptors::Key key) : base(key) {} \ 440 DEFINE_PARAMETER_TYPES()
446 DEFINE_PARAMETERS_NO_CONTEXT(kRequestedSize)
447 DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::TaggedPointer(),
448 MachineType::IntPtr())
458 DEFINE_JS_PARAMETERS()
459 DEFINE_JS_PARAMETER_TYPES()
468 DEFINE_PARAMETER_TYPES()
474 DEFINE_PARAMETERS_NO_CONTEXT()
475 DEFINE_PARAMETER_TYPES()
482 DEFINE_PARAMETERS(kReceiver, kName, kSlot)
483 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
484 MachineType::AnyTagged(),
485 MachineType::TaggedSigned())
488 static const Register ReceiverRegister();
489 static const Register NameRegister();
490 static const Register SlotRegister();
495 DEFINE_PARAMETERS(kName, kSlot)
496 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
497 MachineType::TaggedSigned())
500 static const Register NameRegister() {
501 return LoadDescriptor::NameRegister();
504 static const Register SlotRegister() {
505 return LoadDescriptor::SlotRegister();
511 DEFINE_PARAMETERS(kReceiver, kName, kValue, kSlot)
512 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
513 MachineType::AnyTagged(),
514 MachineType::AnyTagged(),
515 MachineType::TaggedSigned())
518 static const Register ReceiverRegister();
519 static const Register NameRegister();
520 static const Register ValueRegister();
521 static const Register SlotRegister();
523 #if V8_TARGET_ARCH_IA32 524 static const bool kPassLastArgsOnStack =
true;
526 static const bool kPassLastArgsOnStack =
false;
530 static const int kStackArgumentsCount = kPassLastArgsOnStack ? 2 : 0;
535 DEFINE_PARAMETERS(kReceiver, kName, kMap, kValue, kSlot, kVector)
536 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
537 MachineType::AnyTagged(),
538 MachineType::AnyTagged(),
539 MachineType::AnyTagged(),
540 MachineType::TaggedSigned(),
541 MachineType::AnyTagged())
544 static const Register MapRegister();
545 static const Register SlotRegister();
546 static const Register VectorRegister();
549 static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0;
554 DEFINE_PARAMETERS(kReceiver, kName, kValue, kSlot, kVector)
555 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
556 MachineType::AnyTagged(),
557 MachineType::AnyTagged(),
558 MachineType::TaggedSigned(),
559 MachineType::AnyTagged())
562 static const Register VectorRegister();
565 static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0;
570 DEFINE_PARAMETERS(kName, kValue, kSlot)
571 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
572 MachineType::AnyTagged(),
573 MachineType::TaggedSigned())
576 static const bool kPassLastArgsOnStack =
577 StoreDescriptor::kPassLastArgsOnStack;
579 static const int kStackArgumentsCount = kPassLastArgsOnStack ? 2 : 0;
581 static const Register NameRegister() {
582 return StoreDescriptor::NameRegister();
585 static const Register ValueRegister() {
586 return StoreDescriptor::ValueRegister();
589 static const Register SlotRegister() {
590 return StoreDescriptor::SlotRegister();
596 DEFINE_PARAMETERS(kName, kValue, kSlot, kVector)
597 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
598 MachineType::AnyTagged(),
599 MachineType::TaggedSigned(),
600 MachineType::AnyTagged())
603 static const Register VectorRegister() {
604 return StoreWithVectorDescriptor::VectorRegister();
608 static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0;
613 DEFINE_PARAMETERS(kReceiver, kName, kSlot, kVector)
614 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
615 MachineType::AnyTagged(),
616 MachineType::TaggedSigned(),
617 MachineType::AnyTagged())
620 static const Register VectorRegister();
622 #if V8_TARGET_ARCH_IA32 623 static const bool kPassLastArgsOnStack =
true;
625 static const bool kPassLastArgsOnStack =
false;
629 static const int kStackArgumentsCount = kPassLastArgsOnStack ? 1 : 0;
634 DEFINE_PARAMETERS(kName, kSlot, kVector)
635 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
636 MachineType::TaggedSigned(),
637 MachineType::AnyTagged())
640 #if V8_TARGET_ARCH_IA32 643 static const Register VectorRegister() {
return edx; }
645 static const Register VectorRegister() {
646 return LoadWithVectorDescriptor::VectorRegister();
653 DEFINE_PARAMETERS(kScopeInfo, kSlots)
654 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
655 MachineType::Int32())
658 static const Register ScopeInfoRegister();
659 static const Register SlotsRegister();
664 DEFINE_PARAMETERS(kTarget, kNewTarget)
665 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
666 MachineType::AnyTagged())
668 static const Register TargetRegister();
669 static const Register NewTargetRegister();
674 DEFINE_PARAMETERS_NO_CONTEXT(kObject, kSlot, kRememberedSet, kFPMode)
675 DEFINE_PARAMETER_TYPES(MachineType::TaggedPointer(),
676 MachineType::Pointer(),
677 MachineType::TaggedSigned(),
678 MachineType::TaggedSigned())
685 DEFINE_PARAMETERS(kArgument)
686 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged())
689 static const Register ArgumentRegister();
695 DEFINE_PARAMETERS(kArgument)
696 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged())
704 DEFINE_PARAMETERS(kPromise, kResult)
705 DEFINE_PARAMETER_TYPES(MachineType::TaggedPointer(), MachineType::AnyTagged())
712 DEFINE_PARAMETERS(kObject, kKey)
718 DEFINE_PARAMETERS(kObject)
719 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged())
725 DEFINE_PARAMETERS(kFunction, kActualArgumentsCount)
726 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
727 MachineType::Int32())
733 DEFINE_PARAMETERS(kTarget, kActualArgumentsCount, kArgumentsLength,
735 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
736 MachineType::Int32(),
737 MachineType::Int32(),
738 MachineType::AnyTagged())
744 DEFINE_PARAMETERS(kTarget, kActualArgumentsCount, kStartIndex)
745 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
746 MachineType::Int32(),
747 MachineType::Int32())
753 DEFINE_PARAMETERS(kTarget, kArgumentsCount, kSpread)
754 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
755 MachineType::Int32(),
756 MachineType::AnyTagged())
762 DEFINE_PARAMETERS(kTarget, kArgumentsList)
763 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
764 MachineType::AnyTagged())
770 DEFINE_JS_PARAMETERS(kArgumentsLength, kArgumentsList)
771 DEFINE_JS_PARAMETER_TYPES(MachineType::Int32(),
772 MachineType::AnyTagged())
779 DEFINE_JS_PARAMETERS(kStartIndex)
780 DEFINE_JS_PARAMETER_TYPES(MachineType::Int32())
786 DEFINE_JS_PARAMETERS(kSpread)
787 DEFINE_JS_PARAMETER_TYPES(MachineType::AnyTagged())
793 DEFINE_PARAMETERS(kTarget, kNewTarget, kArgumentsList)
794 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
795 MachineType::AnyTagged(),
796 MachineType::AnyTagged())
804 DEFINE_JS_PARAMETERS(kAllocationSite)
805 DEFINE_JS_PARAMETER_TYPES(MachineType::AnyTagged());
813 DEFINE_PARAMETERS(kTarget)
814 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged())
820 DEFINE_PARAMETERS_NO_CONTEXT(kMessageOrMessageId)
821 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged())
827 DEFINE_PARAMETERS_NO_CONTEXT()
828 DEFINE_PARAMETER_TYPES()
834 DEFINE_JS_PARAMETERS(kAllocationSite)
835 DEFINE_JS_PARAMETER_TYPES(MachineType::AnyTagged());
847 DEFINE_PARAMETERS(kFunction, kAllocationSite, kActualArgumentsCount)
848 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
849 MachineType::AnyTagged(),
850 MachineType::Int32())
861 DEFINE_PARAMETERS(kFunction, kAllocationSite, kActualArgumentsCount,
863 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
864 MachineType::AnyTagged(),
865 MachineType::Int32(),
866 MachineType::AnyTagged())
877 DEFINE_PARAMETERS(kFunction, kAllocationSite, kActualArgumentsCount,
878 kFunctionParameter, kArraySizeSmiParameter)
879 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
880 MachineType::AnyTagged(),
881 MachineType::Int32(),
882 MachineType::AnyTagged(),
883 MachineType::AnyTagged())
890 DEFINE_PARAMETERS(kLeft, kRight)
897 DEFINE_PARAMETERS(kLeft, kRight)
905 DEFINE_PARAMETERS(kReceiver, kPosition)
907 DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::TaggedSigned(),
908 MachineType::AnyTagged(),
909 MachineType::IntPtr())
915 DEFINE_PARAMETERS(kString, kFrom, kTo)
916 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
917 MachineType::IntPtr(),
918 MachineType::IntPtr())
926 DEFINE_JS_PARAMETERS(kExpectedArgumentsCount)
927 DEFINE_JS_PARAMETER_TYPES(MachineType::Int32())
933 DEFINE_JS_PARAMETERS(kCFunction)
934 DEFINE_JS_PARAMETER_TYPES(MachineType::Pointer())
941 DEFINE_PARAMETERS(kArity,
947 DEFINE_PARAMETER_TYPES(MachineType::Int32(),
948 MachineType::Pointer(),
949 MachineType::AnyTagged(),
950 MachineType::AnyTagged(),
951 MachineType::AnyTagged(),
952 MachineType::AnyTagged())
961 DEFINE_PARAMETERS_NO_CONTEXT(kTargetContext, kCallData, kHolder,
963 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
964 MachineType::AnyTagged(),
965 MachineType::AnyTagged(),
966 MachineType::Pointer())
972 DEFINE_PARAMETERS(kReceiver, kHolder, kCallback)
973 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
974 MachineType::AnyTagged(),
975 MachineType::AnyTagged())
978 static const Register ReceiverRegister();
979 static const Register HolderRegister();
980 static const Register CallbackRegister();
986 DEFINE_PARAMETERS(kObject, kKey)
987 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
988 MachineType::AnyTagged())
991 static const Register ObjectRegister();
992 static const Register KeyRegister();
997 DEFINE_PARAMETERS(kFrame, kLength, kMappedCount)
998 DEFINE_PARAMETER_TYPES(MachineType::Pointer(),
999 MachineType::TaggedSigned(),
1000 MachineType::TaggedSigned())
1007 DEFINE_PARAMETERS(kAccumulator, kBytecodeOffset, kBytecodeArray,
1009 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
1010 MachineType::IntPtr(),
1011 MachineType::AnyTagged(),
1012 MachineType::IntPtr())
1018 DEFINE_PARAMETERS(kNumberOfArguments, kFirstArgument, kFunction)
1019 DEFINE_PARAMETER_TYPES(MachineType::Int32(),
1020 MachineType::Pointer(),
1021 MachineType::AnyTagged())
1029 DEFINE_PARAMETERS(kNumberOfArguments, kFirstArgument, kConstructor,
1030 kNewTarget, kFeedbackElement)
1031 DEFINE_PARAMETER_TYPES(MachineType::Int32(),
1032 MachineType::Pointer(),
1033 MachineType::AnyTagged(),
1034 MachineType::AnyTagged(),
1035 MachineType::AnyTagged())
1039 #if V8_TARGET_ARCH_IA32 1040 static const bool kPassLastArgsOnStack =
true;
1042 static const bool kPassLastArgsOnStack =
false;
1046 static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0;
1051 DEFINE_RESULT_AND_PARAMETERS(1, kNumberOfArguments, kFirstArgument,
1053 DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::AnyTagged(),
1054 MachineType::Int32(),
1055 MachineType::Pointer(),
1056 MachineType::Pointer())
1062 DEFINE_RESULT_AND_PARAMETERS(2, kNumberOfArguments, kFirstArgument,
1064 DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::AnyTagged(),
1065 MachineType::AnyTagged(),
1066 MachineType::Int32(),
1067 MachineType::Pointer(),
1068 MachineType::Pointer())
1074 DEFINE_PARAMETERS(kValue, kGenerator)
1075 DEFINE_PARAMETER_TYPES(MachineType::AnyTagged(),
1076 MachineType::AnyTagged())
1082 DEFINE_PARAMETERS(kRestartFp)
1083 DEFINE_PARAMETER_TYPES(MachineType::Pointer())
1095 DEFINE_PARAMETERS_NO_CONTEXT(kNumPages)
1096 DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::Int32(),
1097 MachineType::Int32())
1103 DEFINE_PARAMETERS_NO_CONTEXT(kException)
1104 DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::AnyTagged(),
1105 MachineType::AnyTagged())
1111 DEFINE_PARAMETERS_NO_CONTEXT(kAddress, kCount)
1112 DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::Uint32(),
1113 MachineType::Uint32(),
1114 MachineType::Uint32())
1120 DEFINE_PARAMETERS_NO_CONTEXT(kAddress, kExpectedValue, kTimeout)
1121 DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::Uint32(),
1122 MachineType::Uint32(),
1123 MachineType::Int32(),
1124 MachineType::Float64())
1130 DEFINE_PARAMETERS(kSource, kFlags, kSlot, kVector)
1131 DEFINE_RESULT_AND_PARAMETER_TYPES(MachineType::TaggedPointer(),
1132 MachineType::AnyTagged(),
1133 MachineType::TaggedSigned(),
1134 MachineType::TaggedSigned(),
1135 MachineType::AnyTagged())
1139 #define DEFINE_TFS_BUILTIN_DESCRIPTOR(Name, ...) \ 1140 class Name##Descriptor : public CallInterfaceDescriptor { \ 1142 DEFINE_PARAMETERS(__VA_ARGS__) \ 1143 DECLARE_DEFAULT_DESCRIPTOR(Name##Descriptor, CallInterfaceDescriptor) \ 1145 BUILTIN_LIST_TFS(DEFINE_TFS_BUILTIN_DESCRIPTOR)
1146 #undef DEFINE_TFS_BUILTIN_DESCRIPTOR 1148 #undef DECLARE_DEFAULT_DESCRIPTOR 1149 #undef DECLARE_DESCRIPTOR_WITH_BASE 1150 #undef DECLARE_DESCRIPTOR 1151 #undef DECLARE_JS_COMPATIBLE_DESCRIPTOR 1152 #undef DEFINE_RESULT_AND_PARAMETERS 1153 #undef DEFINE_RESULT_AND_PARAMETERS_NO_CONTEXT 1154 #undef DEFINE_PARAMETERS 1155 #undef DEFINE_PARAMETERS_NO_CONTEXT 1156 #undef DEFINE_RESULT_AND_PARAMETER_TYPES 1157 #undef DEFINE_PARAMETER_TYPES 1158 #undef DEFINE_JS_PARAMETERS 1159 #undef DEFINE_JS_PARAMETER_TYPES 1163 #define DEF_KEY(name, ...) \ 1164 CallDescriptors::Key name##Descriptor::key() { return CallDescriptors::name; } 1165 INTERFACE_DESCRIPTOR_LIST(DEF_KEY)
1170 #endif // V8_INTERFACE_DESCRIPTORS_H_