// 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_DEFINITIONS_H_ #define V8_BUILTINS_BUILTINS_DEFINITIONS_H_ #include "builtins-generated/bytecodes-builtins-list.h" // include generated header #include "torque-generated/builtin-definitions.h" namespace v8 { namespace internal { #ifdef V8_ENABLE_EXPERIMENTAL_TSA_BUILTINS #define IF_TSA … #else #define IF_TSA(TSA_MACRO, CSA_MACRO) … #endif // CPP: Builtin in C++. Entered via BUILTIN_EXIT frame. // Args: name // TFJ: Builtin in Turbofan, with JS linkage (callable as Javascript function). // Args: name, arguments count, explicit argument names... // TFS: Builtin in Turbofan, with CodeStub linkage. // Args: name, needs context, explicit argument names... // TFC: Builtin in Turbofan, with CodeStub linkage and custom descriptor. // Args: name, interface descriptor // TSC: Builtin in Turboshaft, with CodeStub linkage and custom descriptor. // Args: name, interface descriptor // TFH: Handlers in Turbofan, with CodeStub linkage. // Args: name, interface descriptor // BCH: Bytecode Handlers, with bytecode dispatch linkage. // Args: name, OperandScale, Bytecode // ASM: Builtin in platform-dependent assembly. // Args: name, interface descriptor // Builtins are additionally split into tiers, where the tier determines the // distance of the builtins table from the root register within IsolateData. // // - Tier 0 (T0) are guaranteed to be close to the root register and can thus // be accessed efficiently root-relative calls (so not, e.g., calls from // generated code when short-builtin-calls is on). // - T1 builtins have no distance guarantees. // // Note, this mechanism works only if the set of T0 builtins is kept as small // as possible. Please, resist the temptation to add your builtin here unless // there's a very good reason. #define BUILTIN_LIST_BASE_TIER0(CPP, TFJ, TFC, TFS, TFH, ASM) … #define BUILTIN_LIST_BASE_TIER1(CPP, TSJ, TFJ, TSC, TFC, TFS, TFH, ASM) … #define BUILTIN_LIST_BASE(CPP, TSJ, TFJ, TSC, TFC, TFS, TFH, ASM) … #ifdef V8_INTL_SUPPORT #define BUILTIN_LIST_INTL(CPP, TFJ, TFS) … #else #define BUILTIN_LIST_INTL … #endif // V8_INTL_SUPPORT #define BUILTIN_LIST(CPP, TSJ, TFJ, TSC, TFC, TFS, TFH, BCH, ASM) … // See the comment on top of BUILTIN_LIST_BASE_TIER0 for an explanation of // tiers. #define BUILTIN_LIST_TIER0(CPP, TFJ, TFC, TFS, TFH, BCH, ASM) … #define BUILTIN_LIST_TIER1(CPP, TSJ, TFJ, TFC, TFS, TFH, BCH, ASM) … // The exception thrown in the following builtins are caught // internally and result in a promise rejection. #define BUILTIN_PROMISE_REJECTION_PREDICTION_LIST(V) … #define IGNORE_BUILTIN(...) … #define BUILTIN_LIST_C(V) … #define BUILTIN_LIST_TSJ(V) … #define BUILTIN_LIST_TFJ(V) … #define BUILTIN_LIST_TSC(V) … #define BUILTIN_LIST_TFC(V) … #define BUILTIN_LIST_TFS(V) … #define BUILTIN_LIST_TFH(V) … #define BUILTIN_LIST_BCH(V) … #define BUILTIN_LIST_A(V) … } // namespace internal } // namespace v8 #endif // V8_BUILTINS_BUILTINS_DEFINITIONS_H_