// Copyright 2017 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_BUILTINS_BUILTINS_DESCRIPTORS_H_ #define V8_BUILTINS_BUILTINS_DESCRIPTORS_H_ #include "src/builtins/builtins.h" #include "src/codegen/interface-descriptors.h" #include "src/compiler/code-assembler.h" #include "src/objects/shared-function-info.h" namespace v8 { namespace internal { // Define interface descriptors for builtins with JS linkage. #define DEFINE_TFJ_INTERFACE_DESCRIPTOR(Name, Argc, ...) \ struct Builtin_##Name##_InterfaceDescriptor { \ enum ParameterIndices { \ kJSTarget = compiler::CodeAssembler::kTargetParameterIndex, \ ##__VA_ARGS__, \ kJSNewTarget, \ kJSActualArgumentsCount, \ kContext, \ kParameterCount, \ }; \ static_assert((Argc) == static_cast<uint16_t>(kParameterCount - 4), \ "Inconsistent set of arguments"); \ static_assert(kJSTarget == -1, "Unexpected kJSTarget index value"); \ }; // Define interface descriptors for builtins with StubCall linkage. #define DEFINE_TFC_INTERFACE_DESCRIPTOR(Name, InterfaceDescriptor) \ using Builtin_##Name##_InterfaceDescriptor = InterfaceDescriptor##Descriptor; #define DEFINE_TFS_INTERFACE_DESCRIPTOR(Name, ...) \ using Builtin_##Name##_InterfaceDescriptor = Name##Descriptor; // Define interface descriptors for IC handlers/dispatchers. #define DEFINE_TFH_INTERFACE_DESCRIPTOR(Name, InterfaceDescriptor) \ using Builtin_##Name##_InterfaceDescriptor = InterfaceDescriptor##Descriptor; #define DEFINE_ASM_INTERFACE_DESCRIPTOR(Name, InterfaceDescriptor) \ using Builtin_##Name##_InterfaceDescriptor = InterfaceDescriptor##Descriptor; BUILTIN_LIST(IGNORE_BUILTIN, DEFINE_TFJ_INTERFACE_DESCRIPTOR, DEFINE_TFC_INTERFACE_DESCRIPTOR, DEFINE_TFS_INTERFACE_DESCRIPTOR, DEFINE_TFH_INTERFACE_DESCRIPTOR, IGNORE_BUILTIN, DEFINE_ASM_INTERFACE_DESCRIPTOR) #undef DEFINE_TFJ_INTERFACE_DESCRIPTOR #undef DEFINE_TFC_INTERFACE_DESCRIPTOR #undef DEFINE_TFS_INTERFACE_DESCRIPTOR #undef DEFINE_TFH_INTERFACE_DESCRIPTOR #undef DEFINE_ASM_INTERFACE_DESCRIPTOR } // namespace internal } // namespace v8 #endif // V8_BUILTINS_BUILTINS_DESCRIPTORS_H_