1 // Copyright 2017 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_BUILTINS_BUILTINS_DEFINITIONS_H_
6 #define V8_BUILTINS_BUILTINS_DEFINITIONS_H_
7 
8 #include "builtins-generated/bytecodes-builtins-list.h"
9 
10 // include generated header
11 #include "torque-generated/builtin-definitions-tq.h"
12 
13 namespace v8 {
14 namespace internal {
15 
16 // CPP: Builtin in C++. Entered via BUILTIN_EXIT frame.
17 //      Args: name
18 // TFJ: Builtin in Turbofan, with JS linkage (callable as Javascript function).
19 //      Args: name, arguments count, explicit argument names...
20 // TFS: Builtin in Turbofan, with CodeStub linkage.
21 //      Args: name, explicit argument names...
22 // TFC: Builtin in Turbofan, with CodeStub linkage and custom descriptor.
23 //      Args: name, interface descriptor
24 // TFH: Handlers in Turbofan, with CodeStub linkage.
25 //      Args: name, interface descriptor
26 // BCH: Bytecode Handlers, with bytecode dispatch linkage.
27 //      Args: name, OperandScale, Bytecode
28 // ASM: Builtin in platform-dependent assembly.
29 //      Args: name, interface descriptor
30 
31 // TODO(jgruber): Remove DummyDescriptor once all ASM builtins have been
32 // properly associated with their descriptor.
33 
34 #define BUILTIN_LIST_BASE(CPP, TFJ, TFC, TFS, TFH, ASM)                        \
35   /* GC write barrirer */                                                      \
36   TFC(RecordWrite, RecordWrite)                                                \
37   TFC(EphemeronKeyBarrier, EphemeronKeyBarrier)                                \
38                                                                                \
39   /* Adaptor for CPP builtin */                                                \
40   TFC(AdaptorWithBuiltinExitFrame, CppBuiltinAdaptor)                          \
41                                                                                \
42   /* Calls */                                                                  \
43   ASM(ArgumentsAdaptorTrampoline, ArgumentsAdaptor)                            \
44   /* ES6 section 9.2.1 [[Call]] ( thisArgument, argumentsList) */              \
45   ASM(CallFunction_ReceiverIsNullOrUndefined, CallTrampoline)                  \
46   ASM(CallFunction_ReceiverIsNotNullOrUndefined, CallTrampoline)               \
47   ASM(CallFunction_ReceiverIsAny, CallTrampoline)                              \
48   /* ES6 section 9.4.1.1 [[Call]] ( thisArgument, argumentsList) */            \
49   ASM(CallBoundFunction, CallTrampoline)                                       \
50   /* ES6 section 7.3.12 Call(F, V, [argumentsList]) */                         \
51   ASM(Call_ReceiverIsNullOrUndefined, CallTrampoline)                          \
52   ASM(Call_ReceiverIsNotNullOrUndefined, CallTrampoline)                       \
53   ASM(Call_ReceiverIsAny, CallTrampoline)                                      \
54                                                                                \
55   /* ES6 section 9.5.12[[Call]] ( thisArgument, argumentsList ) */             \
56   TFC(CallProxy, CallTrampoline)                                               \
57   ASM(CallVarargs, CallVarargs)                                                \
58   TFC(CallWithSpread, CallWithSpread)                                          \
59   TFC(CallWithArrayLike, CallWithArrayLike)                                    \
60   ASM(CallForwardVarargs, CallForwardVarargs)                                  \
61   ASM(CallFunctionForwardVarargs, CallForwardVarargs)                          \
62   /* Call an API callback via a {FunctionTemplateInfo}, doing appropriate */   \
63   /* access and compatible receiver checks. */                                 \
64   TFC(CallFunctionTemplate_CheckAccess, CallFunctionTemplate)                  \
65   TFC(CallFunctionTemplate_CheckCompatibleReceiver, CallFunctionTemplate)      \
66   TFC(CallFunctionTemplate_CheckAccessAndCompatibleReceiver,                   \
67       CallFunctionTemplate)                                                    \
68                                                                                \
69   /* Construct */                                                              \
70   /* ES6 section 9.2.2 [[Construct]] ( argumentsList, newTarget) */            \
71   ASM(ConstructFunction, JSTrampoline)                                         \
72   /* ES6 section 9.4.1.2 [[Construct]] (argumentsList, newTarget) */           \
73   ASM(ConstructBoundFunction, JSTrampoline)                                    \
74   ASM(ConstructedNonConstructable, JSTrampoline)                               \
75   /* ES6 section 7.3.13 Construct (F, [argumentsList], [newTarget]) */         \
76   ASM(Construct, JSTrampoline)                                                 \
77   ASM(ConstructVarargs, ConstructVarargs)                                      \
78   TFC(ConstructWithSpread, ConstructWithSpread)                                \
79   TFC(ConstructWithArrayLike, ConstructWithArrayLike)                          \
80   ASM(ConstructForwardVarargs, ConstructForwardVarargs)                        \
81   ASM(ConstructFunctionForwardVarargs, ConstructForwardVarargs)                \
82   ASM(JSConstructStubGeneric, Dummy)                                           \
83   ASM(JSBuiltinsConstructStub, Dummy)                                          \
84   TFC(FastNewObject, FastNewObject)                                            \
85   TFS(FastNewClosure, kSharedFunctionInfo, kFeedbackCell)                      \
86   TFC(FastNewFunctionContextEval, FastNewFunctionContext)                      \
87   TFC(FastNewFunctionContextFunction, FastNewFunctionContext)                  \
88   TFS(CreateRegExpLiteral, kFeedbackVector, kSlot, kPattern, kFlags)           \
89   TFS(CreateEmptyArrayLiteral, kFeedbackVector, kSlot)                         \
90   TFS(CreateShallowArrayLiteral, kFeedbackVector, kSlot, kConstantElements)    \
91   TFS(CreateShallowObjectLiteral, kFeedbackVector, kSlot,                      \
92       kObjectBoilerplateDescription, kFlags)                                   \
93   /* ES6 section 9.5.14 [[Construct]] ( argumentsList, newTarget) */           \
94   TFC(ConstructProxy, JSTrampoline)                                            \
95                                                                                \
96   /* Apply and entries */                                                      \
97   ASM(JSEntry, Dummy)                                                          \
98   ASM(JSConstructEntry, Dummy)                                                 \
99   ASM(JSRunMicrotasksEntry, RunMicrotasksEntry)                                \
100   ASM(JSEntryTrampoline, JSTrampoline)                                         \
101   ASM(JSConstructEntryTrampoline, JSTrampoline)                                \
102   ASM(ResumeGeneratorTrampoline, ResumeGenerator)                              \
103                                                                                \
104   /* String helpers */                                                         \
105   TFC(StringCodePointAt, StringAt)                                             \
106   TFC(StringFromCodePointAt, StringAtAsString)                                 \
107   TFC(StringEqual, Compare)                                                    \
108   TFC(StringGreaterThan, Compare)                                              \
109   TFC(StringGreaterThanOrEqual, Compare)                                       \
110   TFS(StringIndexOf, kReceiver, kSearchString, kPosition)                      \
111   TFC(StringLessThan, Compare)                                                 \
112   TFC(StringLessThanOrEqual, Compare)                                          \
113   TFC(StringSubstring, StringSubstring)                                        \
114                                                                                \
115   /* OrderedHashTable helpers */                                               \
116   TFS(OrderedHashTableHealIndex, kTable, kIndex)                               \
117                                                                                \
118   /* Interpreter */                                                            \
119   ASM(InterpreterEntryTrampoline, JSTrampoline)                                \
120   ASM(InterpreterPushArgsThenCall, InterpreterPushArgsThenCall)                \
121   ASM(InterpreterPushUndefinedAndArgsThenCall, InterpreterPushArgsThenCall)    \
122   ASM(InterpreterPushArgsThenCallWithFinalSpread, InterpreterPushArgsThenCall) \
123   ASM(InterpreterPushArgsThenConstruct, InterpreterPushArgsThenConstruct)      \
124   ASM(InterpreterPushArgsThenConstructArrayFunction,                           \
125       InterpreterPushArgsThenConstruct)                                        \
126   ASM(InterpreterPushArgsThenConstructWithFinalSpread,                         \
127       InterpreterPushArgsThenConstruct)                                        \
128   ASM(InterpreterEnterBytecodeAdvance, Dummy)                                  \
129   ASM(InterpreterEnterBytecodeDispatch, Dummy)                                 \
130   ASM(InterpreterOnStackReplacement, ContextOnly)                              \
131                                                                                \
132   /* Code life-cycle */                                                        \
133   TFC(CompileLazy, JSTrampoline)                                               \
134   TFC(CompileLazyDeoptimizedCode, JSTrampoline)                                \
135   TFC(InstantiateAsmJs, JSTrampoline)                                          \
136   ASM(NotifyDeoptimized, Dummy)                                                \
137                                                                                \
138   /* Trampolines called when returning from a deoptimization that expects   */ \
139   /* to continue in a JavaScript builtin to finish the functionality of a   */ \
140   /* an TF-inlined version of builtin that has side-effects.                */ \
141   /*                                                                        */ \
142   /* The trampolines work as follows:                                       */ \
143   /*   1. Trampoline restores input register values that                    */ \
144   /*      the builtin expects from a BuiltinContinuationFrame.              */ \
145   /*   2. Trampoline tears down BuiltinContinuationFrame.                   */ \
146   /*   3. Trampoline jumps to the builtin's address.                        */ \
147   /*   4. Builtin executes as if invoked by the frame above it.             */ \
148   /*   5. When the builtin returns, execution resumes normally in the       */ \
149   /*      calling frame, processing any return result from the JavaScript   */ \
150   /*      builtin as if it had called the builtin directly.                 */ \
151   /*                                                                        */ \
152   /* There are two variants of the stub that differ in their handling of a  */ \
153   /* value returned by the next frame deeper on the stack. For LAZY deopts, */ \
154   /* the return value (e.g. rax on x64) is explicitly passed as an extra    */ \
155   /* stack parameter to the JavaScript builtin by the "WithResult"          */ \
156   /* trampoline variant. The plain variant is used in EAGER deopt contexts  */ \
157   /* and has no such special handling. */                                      \
158   ASM(ContinueToCodeStubBuiltin, Dummy)                                        \
159   ASM(ContinueToCodeStubBuiltinWithResult, Dummy)                              \
160   ASM(ContinueToJavaScriptBuiltin, Dummy)                                      \
161   ASM(ContinueToJavaScriptBuiltinWithResult, Dummy)                            \
162                                                                                \
163   /* API callback handling */                                                  \
164   ASM(CallApiCallback, ApiCallback)                                            \
165   ASM(CallApiGetter, ApiGetter)                                                \
166   CPP(HandleApiCall)                                                           \
167   CPP(HandleApiCallAsFunction)                                                 \
168   CPP(HandleApiCallAsConstructor)                                              \
169                                                                                \
170   /* Adapters for Turbofan into runtime */                                     \
171   TFC(AllocateInYoungGeneration, Allocate)                                     \
172   TFC(AllocateRegularInYoungGeneration, Allocate)                              \
173   TFC(AllocateInOldGeneration, Allocate)                                       \
174   TFC(AllocateRegularInOldGeneration, Allocate)                                \
175                                                                                \
176   /* TurboFan support builtins */                                              \
177   TFS(CopyFastSmiOrObjectElements, kObject)                                    \
178   TFC(GrowFastDoubleElements, GrowArrayElements)                               \
179   TFC(GrowFastSmiOrObjectElements, GrowArrayElements)                          \
180   TFC(NewArgumentsElements, NewArgumentsElements)                              \
181                                                                                \
182   /* Debugger */                                                               \
183   TFJ(DebugBreakTrampoline, kDontAdaptArgumentsSentinel)                       \
184   ASM(FrameDropperTrampoline, FrameDropperTrampoline)                          \
185   ASM(HandleDebuggerStatement, ContextOnly)                                    \
186                                                                                \
187   /* Type conversions */                                                       \
188   TFC(ToObject, TypeConversion)                                                \
189   TFC(ToBoolean, TypeConversion)                                               \
190   TFC(OrdinaryToPrimitive_Number, TypeConversion)                              \
191   TFC(OrdinaryToPrimitive_String, TypeConversion)                              \
192   TFC(NonPrimitiveToPrimitive_Default, TypeConversion)                         \
193   TFC(NonPrimitiveToPrimitive_Number, TypeConversion)                          \
194   TFC(NonPrimitiveToPrimitive_String, TypeConversion)                          \
195   TFC(StringToNumber, TypeConversion)                                          \
196   TFC(ToName, TypeConversion)                                                  \
197   TFC(NonNumberToNumber, TypeConversion)                                       \
198   TFC(NonNumberToNumeric, TypeConversion)                                      \
199   TFC(ToNumber, TypeConversion)                                                \
200   TFC(ToNumberConvertBigInt, TypeConversion)                                   \
201   TFC(ToNumeric, TypeConversion)                                               \
202   TFC(NumberToString, TypeConversion)                                          \
203   TFC(ToLength, TypeConversion)                                                \
204   TFC(Typeof, Typeof)                                                          \
205   TFC(GetSuperConstructor, Typeof)                                             \
206   TFC(BigIntToI64, BigIntToI64)                                                \
207   TFC(BigIntToI32Pair, BigIntToI32Pair)                                        \
208   TFC(I64ToBigInt, I64ToBigInt)                                                \
209   TFC(I32PairToBigInt, I32PairToBigInt)                                        \
210                                                                                \
211   /* Type conversions continuations */                                         \
212   TFC(ToBooleanLazyDeoptContinuation, TypeConversionStackParameter)            \
213                                                                                \
214   /* Handlers */                                                               \
215   TFH(KeyedLoadIC_PolymorphicName, LoadWithVector)                             \
216   TFH(KeyedStoreIC_Megamorphic, Store)                                         \
217   TFH(LoadGlobalIC_NoFeedback, LoadGlobalNoFeedback)                           \
218   TFH(LoadIC_FunctionPrototype, LoadWithVector)                                \
219   TFH(LoadIC_StringLength, LoadWithVector)                                     \
220   TFH(LoadIC_StringWrapperLength, LoadWithVector)                              \
221   TFH(LoadIC_NoFeedback, LoadNoFeedback)                                       \
222   TFH(StoreGlobalIC_Slow, StoreWithVector)                                     \
223   TFH(StoreIC_NoFeedback, Store)                                               \
224   TFH(KeyedLoadIC_SloppyArguments, LoadWithVector)                             \
225   TFH(LoadIndexedInterceptorIC, LoadWithVector)                                \
226   TFH(KeyedStoreIC_SloppyArguments_Standard, StoreWithVector)                  \
227   TFH(KeyedStoreIC_SloppyArguments_GrowNoTransitionHandleCOW, StoreWithVector) \
228   TFH(KeyedStoreIC_SloppyArguments_NoTransitionIgnoreOOB, StoreWithVector)     \
229   TFH(KeyedStoreIC_SloppyArguments_NoTransitionHandleCOW, StoreWithVector)     \
230   TFH(StoreFastElementIC_Standard, StoreWithVector)                            \
231   TFH(StoreFastElementIC_GrowNoTransitionHandleCOW, StoreWithVector)           \
232   TFH(StoreFastElementIC_NoTransitionIgnoreOOB, StoreWithVector)               \
233   TFH(StoreFastElementIC_NoTransitionHandleCOW, StoreWithVector)               \
234   TFH(ElementsTransitionAndStore_Standard, StoreTransition)                    \
235   TFH(ElementsTransitionAndStore_GrowNoTransitionHandleCOW, StoreTransition)   \
236   TFH(ElementsTransitionAndStore_NoTransitionIgnoreOOB, StoreTransition)       \
237   TFH(ElementsTransitionAndStore_NoTransitionHandleCOW, StoreTransition)       \
238   TFH(KeyedHasIC_PolymorphicName, LoadWithVector)                              \
239   TFH(KeyedHasIC_SloppyArguments, LoadWithVector)                              \
240   TFH(HasIndexedInterceptorIC, LoadWithVector)                                 \
241                                                                                \
242   /* Microtask helpers */                                                      \
243   TFS(EnqueueMicrotask, kMicrotask)                                            \
244   ASM(RunMicrotasksTrampoline, RunMicrotasksEntry)                             \
245   TFC(RunMicrotasks, RunMicrotasks)                                            \
246                                                                                \
247   /* Object property helpers */                                                \
248   TFS(HasProperty, kObject, kKey)                                              \
249   TFS(DeleteProperty, kObject, kKey, kLanguageMode)                            \
250   /* ES #sec-copydataproperties */                                             \
251   TFS(CopyDataProperties, kTarget, kSource)                                    \
252   TFS(SetDataProperties, kTarget, kSource)                                     \
253                                                                                \
254   /* Abort */                                                                  \
255   TFC(Abort, Abort)                                                            \
256   TFC(AbortCSAAssert, Abort)                                                   \
257                                                                                \
258   /* Built-in functions for Javascript */                                      \
259   /* Special internal builtins */                                              \
260   CPP(EmptyFunction)                                                           \
261   CPP(Illegal)                                                                 \
262   CPP(StrictPoisonPillThrower)                                                 \
263   CPP(UnsupportedThrower)                                                      \
264   TFJ(ReturnReceiver, 0, kReceiver)                                            \
265                                                                                \
266   /* Array */                                                                  \
267   TFC(ArrayConstructor, JSTrampoline)                                          \
268   TFC(ArrayConstructorImpl, ArrayConstructor)                                  \
269   TFC(ArrayNoArgumentConstructor_PackedSmi_DontOverride,                       \
270       ArrayNoArgumentConstructor)                                              \
271   TFC(ArrayNoArgumentConstructor_HoleySmi_DontOverride,                        \
272       ArrayNoArgumentConstructor)                                              \
273   TFC(ArrayNoArgumentConstructor_PackedSmi_DisableAllocationSites,             \
274       ArrayNoArgumentConstructor)                                              \
275   TFC(ArrayNoArgumentConstructor_HoleySmi_DisableAllocationSites,              \
276       ArrayNoArgumentConstructor)                                              \
277   TFC(ArrayNoArgumentConstructor_Packed_DisableAllocationSites,                \
278       ArrayNoArgumentConstructor)                                              \
279   TFC(ArrayNoArgumentConstructor_Holey_DisableAllocationSites,                 \
280       ArrayNoArgumentConstructor)                                              \
281   TFC(ArrayNoArgumentConstructor_PackedDouble_DisableAllocationSites,          \
282       ArrayNoArgumentConstructor)                                              \
283   TFC(ArrayNoArgumentConstructor_HoleyDouble_DisableAllocationSites,           \
284       ArrayNoArgumentConstructor)                                              \
285   TFC(ArraySingleArgumentConstructor_PackedSmi_DontOverride,                   \
286       ArraySingleArgumentConstructor)                                          \
287   TFC(ArraySingleArgumentConstructor_HoleySmi_DontOverride,                    \
288       ArraySingleArgumentConstructor)                                          \
289   TFC(ArraySingleArgumentConstructor_PackedSmi_DisableAllocationSites,         \
290       ArraySingleArgumentConstructor)                                          \
291   TFC(ArraySingleArgumentConstructor_HoleySmi_DisableAllocationSites,          \
292       ArraySingleArgumentConstructor)                                          \
293   TFC(ArraySingleArgumentConstructor_Packed_DisableAllocationSites,            \
294       ArraySingleArgumentConstructor)                                          \
295   TFC(ArraySingleArgumentConstructor_Holey_DisableAllocationSites,             \
296       ArraySingleArgumentConstructor)                                          \
297   TFC(ArraySingleArgumentConstructor_PackedDouble_DisableAllocationSites,      \
298       ArraySingleArgumentConstructor)                                          \
299   TFC(ArraySingleArgumentConstructor_HoleyDouble_DisableAllocationSites,       \
300       ArraySingleArgumentConstructor)                                          \
301   TFC(ArrayNArgumentsConstructor, ArrayNArgumentsConstructor)                  \
302   CPP(ArrayConcat)                                                             \
303   /* ES6 #sec-array.prototype.fill */                                          \
304   CPP(ArrayPrototypeFill)                                                      \
305   /* ES7 #sec-array.prototype.includes */                                      \
306   TFS(ArrayIncludesSmiOrObject, kElements, kSearchElement, kLength,            \
307       kFromIndex)                                                              \
308   TFS(ArrayIncludesPackedDoubles, kElements, kSearchElement, kLength,          \
309       kFromIndex)                                                              \
310   TFS(ArrayIncludesHoleyDoubles, kElements, kSearchElement, kLength,           \
311       kFromIndex)                                                              \
312   TFJ(ArrayIncludes, kDontAdaptArgumentsSentinel)                              \
313   /* ES6 #sec-array.prototype.indexof */                                       \
314   TFS(ArrayIndexOfSmiOrObject, kElements, kSearchElement, kLength, kFromIndex) \
315   TFS(ArrayIndexOfPackedDoubles, kElements, kSearchElement, kLength,           \
316       kFromIndex)                                                              \
317   TFS(ArrayIndexOfHoleyDoubles, kElements, kSearchElement, kLength,            \
318       kFromIndex)                                                              \
319   TFJ(ArrayIndexOf, kDontAdaptArgumentsSentinel)                               \
320   /* ES6 #sec-array.prototype.pop */                                           \
321   CPP(ArrayPop)                                                                \
322   TFJ(ArrayPrototypePop, kDontAdaptArgumentsSentinel)                          \
323   /* ES6 #sec-array.prototype.push */                                          \
324   CPP(ArrayPush)                                                               \
325   TFJ(ArrayPrototypePush, kDontAdaptArgumentsSentinel)                         \
326   /* ES6 #sec-array.prototype.shift */                                         \
327   CPP(ArrayShift)                                                              \
328   /* ES6 #sec-array.prototype.unshift */                                       \
329   CPP(ArrayUnshift)                                                            \
330   /* Support for Array.from and other array-copying idioms */                  \
331   TFS(CloneFastJSArray, kSource)                                               \
332   TFS(CloneFastJSArrayFillingHoles, kSource)                                   \
333   TFS(ExtractFastJSArray, kSource, kBegin, kCount)                             \
334   /* ES6 #sec-array.prototype.entries */                                       \
335   TFJ(ArrayPrototypeEntries, 0, kReceiver)                                     \
336   /* ES6 #sec-array.prototype.keys */                                          \
337   TFJ(ArrayPrototypeKeys, 0, kReceiver)                                        \
338   /* ES6 #sec-array.prototype.values */                                        \
339   TFJ(ArrayPrototypeValues, 0, kReceiver)                                      \
340   /* ES6 #sec-%arrayiteratorprototype%.next */                                 \
341   TFJ(ArrayIteratorPrototypeNext, 0, kReceiver)                                \
342   /* https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray */          \
343   TFS(FlattenIntoArray, kTarget, kSource, kSourceLength, kStart, kDepth)       \
344   TFS(FlatMapIntoArray, kTarget, kSource, kSourceLength, kStart, kDepth,       \
345       kMapperFunction, kThisArg)                                               \
346   /* https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flat */      \
347   TFJ(ArrayPrototypeFlat, kDontAdaptArgumentsSentinel)                         \
348   /* https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap */   \
349   TFJ(ArrayPrototypeFlatMap, kDontAdaptArgumentsSentinel)                      \
350                                                                                \
351   /* ArrayBuffer */                                                            \
352   /* ES #sec-arraybuffer-constructor */                                        \
353   CPP(ArrayBufferConstructor)                                                  \
354   CPP(ArrayBufferConstructor_DoNotInitialize)                                  \
355   CPP(ArrayBufferPrototypeGetByteLength)                                       \
356   CPP(ArrayBufferIsView)                                                       \
357   CPP(ArrayBufferPrototypeSlice)                                               \
358                                                                                \
359   /* AsyncFunction */                                                          \
360   TFS(AsyncFunctionEnter, kClosure, kReceiver)                                 \
361   TFS(AsyncFunctionReject, kAsyncFunctionObject, kReason, kCanSuspend)         \
362   TFS(AsyncFunctionResolve, kAsyncFunctionObject, kValue, kCanSuspend)         \
363   TFC(AsyncFunctionLazyDeoptContinuation, AsyncFunctionStackParameter)         \
364   TFS(AsyncFunctionAwaitCaught, kAsyncFunctionObject, kValue)                  \
365   TFS(AsyncFunctionAwaitUncaught, kAsyncFunctionObject, kValue)                \
366   TFJ(AsyncFunctionAwaitRejectClosure, 1, kReceiver, kSentError)               \
367   TFJ(AsyncFunctionAwaitResolveClosure, 1, kReceiver, kSentValue)              \
368                                                                                \
369   /* BigInt */                                                                 \
370   CPP(BigIntConstructor)                                                       \
371   CPP(BigIntAsUintN)                                                           \
372   CPP(BigIntAsIntN)                                                            \
373   CPP(BigIntPrototypeToLocaleString)                                           \
374   CPP(BigIntPrototypeToString)                                                 \
375   CPP(BigIntPrototypeValueOf)                                                  \
376                                                                                \
377   /* CallSite */                                                               \
378   CPP(CallSitePrototypeGetColumnNumber)                                        \
379   CPP(CallSitePrototypeGetEvalOrigin)                                          \
380   CPP(CallSitePrototypeGetFileName)                                            \
381   CPP(CallSitePrototypeGetFunction)                                            \
382   CPP(CallSitePrototypeGetFunctionName)                                        \
383   CPP(CallSitePrototypeGetLineNumber)                                          \
384   CPP(CallSitePrototypeGetMethodName)                                          \
385   CPP(CallSitePrototypeGetPosition)                                            \
386   CPP(CallSitePrototypeGetPromiseIndex)                                        \
387   CPP(CallSitePrototypeGetScriptNameOrSourceURL)                               \
388   CPP(CallSitePrototypeGetThis)                                                \
389   CPP(CallSitePrototypeGetTypeName)                                            \
390   CPP(CallSitePrototypeIsAsync)                                                \
391   CPP(CallSitePrototypeIsConstructor)                                          \
392   CPP(CallSitePrototypeIsEval)                                                 \
393   CPP(CallSitePrototypeIsNative)                                               \
394   CPP(CallSitePrototypeIsPromiseAll)                                           \
395   CPP(CallSitePrototypeIsToplevel)                                             \
396   CPP(CallSitePrototypeToString)                                               \
397                                                                                \
398   /* Console */                                                                \
399   CPP(ConsoleDebug)                                                            \
400   CPP(ConsoleError)                                                            \
401   CPP(ConsoleInfo)                                                             \
402   CPP(ConsoleLog)                                                              \
403   CPP(ConsoleWarn)                                                             \
404   CPP(ConsoleDir)                                                              \
405   CPP(ConsoleDirXml)                                                           \
406   CPP(ConsoleTable)                                                            \
407   CPP(ConsoleTrace)                                                            \
408   CPP(ConsoleGroup)                                                            \
409   CPP(ConsoleGroupCollapsed)                                                   \
410   CPP(ConsoleGroupEnd)                                                         \
411   CPP(ConsoleClear)                                                            \
412   CPP(ConsoleCount)                                                            \
413   CPP(ConsoleCountReset)                                                       \
414   CPP(ConsoleAssert)                                                           \
415   CPP(ConsoleProfile)                                                          \
416   CPP(ConsoleProfileEnd)                                                       \
417   CPP(ConsoleTime)                                                             \
418   CPP(ConsoleTimeLog)                                                          \
419   CPP(ConsoleTimeEnd)                                                          \
420   CPP(ConsoleTimeStamp)                                                        \
421   CPP(ConsoleContext)                                                          \
422                                                                                \
423   /* DataView */                                                               \
424   /* ES #sec-dataview-constructor */                                           \
425   CPP(DataViewConstructor)                                                     \
426                                                                                \
427   /* Date */                                                                   \
428   /* ES #sec-date-constructor */                                               \
429   CPP(DateConstructor)                                                         \
430   /* ES6 #sec-date.prototype.getdate */                                        \
431   TFJ(DatePrototypeGetDate, 0, kReceiver)                                      \
432   /* ES6 #sec-date.prototype.getday */                                         \
433   TFJ(DatePrototypeGetDay, 0, kReceiver)                                       \
434   /* ES6 #sec-date.prototype.getfullyear */                                    \
435   TFJ(DatePrototypeGetFullYear, 0, kReceiver)                                  \
436   /* ES6 #sec-date.prototype.gethours */                                       \
437   TFJ(DatePrototypeGetHours, 0, kReceiver)                                     \
438   /* ES6 #sec-date.prototype.getmilliseconds */                                \
439   TFJ(DatePrototypeGetMilliseconds, 0, kReceiver)                              \
440   /* ES6 #sec-date.prototype.getminutes */                                     \
441   TFJ(DatePrototypeGetMinutes, 0, kReceiver)                                   \
442   /* ES6 #sec-date.prototype.getmonth */                                       \
443   TFJ(DatePrototypeGetMonth, 0, kReceiver)                                     \
444   /* ES6 #sec-date.prototype.getseconds */                                     \
445   TFJ(DatePrototypeGetSeconds, 0, kReceiver)                                   \
446   /* ES6 #sec-date.prototype.gettime */                                        \
447   TFJ(DatePrototypeGetTime, 0, kReceiver)                                      \
448   /* ES6 #sec-date.prototype.gettimezoneoffset */                              \
449   TFJ(DatePrototypeGetTimezoneOffset, 0, kReceiver)                            \
450   /* ES6 #sec-date.prototype.getutcdate */                                     \
451   TFJ(DatePrototypeGetUTCDate, 0, kReceiver)                                   \
452   /* ES6 #sec-date.prototype.getutcday */                                      \
453   TFJ(DatePrototypeGetUTCDay, 0, kReceiver)                                    \
454   /* ES6 #sec-date.prototype.getutcfullyear */                                 \
455   TFJ(DatePrototypeGetUTCFullYear, 0, kReceiver)                               \
456   /* ES6 #sec-date.prototype.getutchours */                                    \
457   TFJ(DatePrototypeGetUTCHours, 0, kReceiver)                                  \
458   /* ES6 #sec-date.prototype.getutcmilliseconds */                             \
459   TFJ(DatePrototypeGetUTCMilliseconds, 0, kReceiver)                           \
460   /* ES6 #sec-date.prototype.getutcminutes */                                  \
461   TFJ(DatePrototypeGetUTCMinutes, 0, kReceiver)                                \
462   /* ES6 #sec-date.prototype.getutcmonth */                                    \
463   TFJ(DatePrototypeGetUTCMonth, 0, kReceiver)                                  \
464   /* ES6 #sec-date.prototype.getutcseconds */                                  \
465   TFJ(DatePrototypeGetUTCSeconds, 0, kReceiver)                                \
466   /* ES6 #sec-date.prototype.valueof */                                        \
467   TFJ(DatePrototypeValueOf, 0, kReceiver)                                      \
468   /* ES6 #sec-date.prototype-@@toprimitive */                                  \
469   TFJ(DatePrototypeToPrimitive, 1, kReceiver, kHint)                           \
470   CPP(DatePrototypeGetYear)                                                    \
471   CPP(DatePrototypeSetYear)                                                    \
472   CPP(DateNow)                                                                 \
473   CPP(DateParse)                                                               \
474   CPP(DatePrototypeSetDate)                                                    \
475   CPP(DatePrototypeSetFullYear)                                                \
476   CPP(DatePrototypeSetHours)                                                   \
477   CPP(DatePrototypeSetMilliseconds)                                            \
478   CPP(DatePrototypeSetMinutes)                                                 \
479   CPP(DatePrototypeSetMonth)                                                   \
480   CPP(DatePrototypeSetSeconds)                                                 \
481   CPP(DatePrototypeSetTime)                                                    \
482   CPP(DatePrototypeSetUTCDate)                                                 \
483   CPP(DatePrototypeSetUTCFullYear)                                             \
484   CPP(DatePrototypeSetUTCHours)                                                \
485   CPP(DatePrototypeSetUTCMilliseconds)                                         \
486   CPP(DatePrototypeSetUTCMinutes)                                              \
487   CPP(DatePrototypeSetUTCMonth)                                                \
488   CPP(DatePrototypeSetUTCSeconds)                                              \
489   CPP(DatePrototypeToDateString)                                               \
490   CPP(DatePrototypeToISOString)                                                \
491   CPP(DatePrototypeToUTCString)                                                \
492   CPP(DatePrototypeToString)                                                   \
493   CPP(DatePrototypeToTimeString)                                               \
494   CPP(DatePrototypeToJson)                                                     \
495   CPP(DateUTC)                                                                 \
496                                                                                \
497   /* Error */                                                                  \
498   CPP(ErrorConstructor)                                                        \
499   CPP(ErrorCaptureStackTrace)                                                  \
500   CPP(ErrorPrototypeToString)                                                  \
501   CPP(MakeError)                                                               \
502   CPP(MakeRangeError)                                                          \
503   CPP(MakeSyntaxError)                                                         \
504   CPP(MakeTypeError)                                                           \
505   CPP(MakeURIError)                                                            \
506                                                                                \
507   /* Function */                                                               \
508   CPP(FunctionConstructor)                                                     \
509   ASM(FunctionPrototypeApply, JSTrampoline)                                    \
510   CPP(FunctionPrototypeBind)                                                   \
511   /* ES6 #sec-function.prototype.bind */                                       \
512   TFJ(FastFunctionPrototypeBind, kDontAdaptArgumentsSentinel)                  \
513   ASM(FunctionPrototypeCall, JSTrampoline)                                     \
514   /* ES6 #sec-function.prototype-@@hasinstance */                              \
515   TFJ(FunctionPrototypeHasInstance, 1, kReceiver, kV)                          \
516   /* ES6 #sec-function.prototype.tostring */                                   \
517   CPP(FunctionPrototypeToString)                                               \
518                                                                                \
519   /* Belongs to Objects but is a dependency of GeneratorPrototypeResume */     \
520   TFS(CreateIterResultObject, kValue, kDone)                                   \
521                                                                                \
522   /* Generator and Async */                                                    \
523   TFS(CreateGeneratorObject, kClosure, kReceiver)                              \
524   CPP(GeneratorFunctionConstructor)                                            \
525   /* ES6 #sec-generator.prototype.next */                                      \
526   TFJ(GeneratorPrototypeNext, kDontAdaptArgumentsSentinel)                     \
527   /* ES6 #sec-generator.prototype.return */                                    \
528   TFJ(GeneratorPrototypeReturn, kDontAdaptArgumentsSentinel)                   \
529   /* ES6 #sec-generator.prototype.throw */                                     \
530   TFJ(GeneratorPrototypeThrow, kDontAdaptArgumentsSentinel)                    \
531   CPP(AsyncFunctionConstructor)                                                \
532                                                                                \
533   /* Iterator Protocol */                                                      \
534   TFC(GetIteratorWithFeedbackLazyDeoptContinuation, GetIteratorStackParameter) \
535                                                                                \
536   /* Global object */                                                          \
537   CPP(GlobalDecodeURI)                                                         \
538   CPP(GlobalDecodeURIComponent)                                                \
539   CPP(GlobalEncodeURI)                                                         \
540   CPP(GlobalEncodeURIComponent)                                                \
541   CPP(GlobalEscape)                                                            \
542   CPP(GlobalUnescape)                                                          \
543   CPP(GlobalEval)                                                              \
544   /* ES6 #sec-isfinite-number */                                               \
545   TFJ(GlobalIsFinite, 1, kReceiver, kNumber)                                   \
546   /* ES6 #sec-isnan-number */                                                  \
547   TFJ(GlobalIsNaN, 1, kReceiver, kNumber)                                      \
548                                                                                \
549   /* JSON */                                                                   \
550   CPP(JsonParse)                                                               \
551   CPP(JsonStringify)                                                           \
552                                                                                \
553   /* ICs */                                                                    \
554   TFH(LoadIC, LoadWithVector)                                                  \
555   TFH(LoadIC_Megamorphic, LoadWithVector)                                      \
556   TFH(LoadIC_Noninlined, LoadWithVector)                                       \
557   TFH(LoadICTrampoline, Load)                                                  \
558   TFH(LoadICTrampoline_Megamorphic, Load)                                      \
559   TFH(KeyedLoadIC, LoadWithVector)                                             \
560   TFH(KeyedLoadIC_Megamorphic, LoadWithVector)                                 \
561   TFH(KeyedLoadICTrampoline, Load)                                             \
562   TFH(KeyedLoadICTrampoline_Megamorphic, Load)                                 \
563   TFH(StoreGlobalIC, StoreGlobalWithVector)                                    \
564   TFH(StoreGlobalICTrampoline, StoreGlobal)                                    \
565   TFH(StoreIC, StoreWithVector)                                                \
566   TFH(StoreICTrampoline, Store)                                                \
567   TFH(KeyedStoreIC, StoreWithVector)                                           \
568   TFH(KeyedStoreICTrampoline, Store)                                           \
569   TFH(StoreInArrayLiteralIC, StoreWithVector)                                  \
570   TFH(LoadGlobalIC, LoadGlobalWithVector)                                      \
571   TFH(LoadGlobalICInsideTypeof, LoadGlobalWithVector)                          \
572   TFH(LoadGlobalICTrampoline, LoadGlobal)                                      \
573   TFH(LoadGlobalICInsideTypeofTrampoline, LoadGlobal)                          \
574   TFH(CloneObjectIC, CloneObjectWithVector)                                    \
575   TFH(CloneObjectIC_Slow, CloneObjectWithVector)                               \
576   TFH(KeyedHasIC, LoadWithVector)                                              \
577   TFH(KeyedHasIC_Megamorphic, LoadWithVector)                                  \
578                                                                                \
579   /* IterableToList */                                                         \
580   /* ES #sec-iterabletolist */                                                 \
581   TFS(IterableToList, kIterable, kIteratorFn)                                  \
582   TFS(IterableToListWithSymbolLookup, kIterable)                               \
583   TFS(IterableToListMayPreserveHoles, kIterable, kIteratorFn)                  \
584   TFS(IterableToFixedArrayForWasm, kIterable, kExpectedLength)                 \
585                                                                                \
586   /* #sec-createstringlistfromiterable */                                      \
587   TFS(StringListFromIterable, kIterable)                                       \
588                                                                                \
589   /* Map */                                                                    \
590   TFS(FindOrderedHashMapEntry, kTable, kKey)                                   \
591   TFJ(MapConstructor, kDontAdaptArgumentsSentinel)                             \
592   TFJ(MapPrototypeSet, 2, kReceiver, kKey, kValue)                             \
593   TFJ(MapPrototypeDelete, 1, kReceiver, kKey)                                  \
594   TFJ(MapPrototypeGet, 1, kReceiver, kKey)                                     \
595   TFJ(MapPrototypeHas, 1, kReceiver, kKey)                                     \
596   CPP(MapPrototypeClear)                                                       \
597   /* ES #sec-map.prototype.entries */                                          \
598   TFJ(MapPrototypeEntries, 0, kReceiver)                                       \
599   /* ES #sec-get-map.prototype.size */                                         \
600   TFJ(MapPrototypeGetSize, 0, kReceiver)                                       \
601   /* ES #sec-map.prototype.forEach */                                          \
602   TFJ(MapPrototypeForEach, kDontAdaptArgumentsSentinel)                        \
603   /* ES #sec-map.prototype.keys */                                             \
604   TFJ(MapPrototypeKeys, 0, kReceiver)                                          \
605   /* ES #sec-map.prototype.values */                                           \
606   TFJ(MapPrototypeValues, 0, kReceiver)                                        \
607   /* ES #sec-%mapiteratorprototype%.next */                                    \
608   TFJ(MapIteratorPrototypeNext, 0, kReceiver)                                  \
609   TFS(MapIteratorToList, kSource)                                              \
610                                                                                \
611   /* Number */                                                                 \
612   TFC(AllocateHeapNumber, AllocateHeapNumber)                                  \
613   /* ES #sec-number-constructor */                                             \
614   TFJ(NumberConstructor, kDontAdaptArgumentsSentinel)                          \
615   /* ES6 #sec-number.isfinite */                                               \
616   TFJ(NumberIsFinite, 1, kReceiver, kNumber)                                   \
617   /* ES6 #sec-number.isinteger */                                              \
618   TFJ(NumberIsInteger, 1, kReceiver, kNumber)                                  \
619   /* ES6 #sec-number.isnan */                                                  \
620   TFJ(NumberIsNaN, 1, kReceiver, kNumber)                                      \
621   /* ES6 #sec-number.issafeinteger */                                          \
622   TFJ(NumberIsSafeInteger, 1, kReceiver, kNumber)                              \
623   /* ES6 #sec-number.parsefloat */                                             \
624   TFJ(NumberParseFloat, 1, kReceiver, kString)                                 \
625   /* ES6 #sec-number.parseint */                                               \
626   TFJ(NumberParseInt, 2, kReceiver, kString, kRadix)                           \
627   TFS(ParseInt, kString, kRadix)                                               \
628   CPP(NumberPrototypeToExponential)                                            \
629   CPP(NumberPrototypeToFixed)                                                  \
630   CPP(NumberPrototypeToLocaleString)                                           \
631   CPP(NumberPrototypeToPrecision)                                              \
632   /* ES6 #sec-number.prototype.valueof */                                      \
633   TFJ(NumberPrototypeValueOf, 0, kReceiver)                                    \
634   TFC(Add, BinaryOp)                                                           \
635   TFC(Subtract, BinaryOp)                                                      \
636   TFC(Multiply, BinaryOp)                                                      \
637   TFC(Divide, BinaryOp)                                                        \
638   TFC(Modulus, BinaryOp)                                                       \
639   TFC(Exponentiate, BinaryOp)                                                  \
640   TFC(BitwiseAnd, BinaryOp)                                                    \
641   TFC(BitwiseOr, BinaryOp)                                                     \
642   TFC(BitwiseXor, BinaryOp)                                                    \
643   TFC(ShiftLeft, BinaryOp)                                                     \
644   TFC(ShiftRight, BinaryOp)                                                    \
645   TFC(ShiftRightLogical, BinaryOp)                                             \
646   TFC(LessThan, Compare)                                                       \
647   TFC(LessThanOrEqual, Compare)                                                \
648   TFC(GreaterThan, Compare)                                                    \
649   TFC(GreaterThanOrEqual, Compare)                                             \
650   TFC(Equal, Compare)                                                          \
651   TFC(SameValue, Compare)                                                      \
652   TFC(SameValueNumbersOnly, Compare)                                           \
653   TFC(StrictEqual, Compare)                                                    \
654   TFS(BitwiseNot, kValue)                                                      \
655   TFS(Decrement, kValue)                                                       \
656   TFS(Increment, kValue)                                                       \
657   TFS(Negate, kValue)                                                          \
658                                                                                \
659   /* Object */                                                                 \
660   /* ES #sec-object-constructor */                                             \
661   TFJ(ObjectConstructor, kDontAdaptArgumentsSentinel)                          \
662   TFJ(ObjectAssign, kDontAdaptArgumentsSentinel)                               \
663   /* ES #sec-object.create */                                                  \
664   TFJ(ObjectCreate, kDontAdaptArgumentsSentinel)                               \
665   CPP(ObjectDefineGetter)                                                      \
666   CPP(ObjectDefineProperties)                                                  \
667   CPP(ObjectDefineProperty)                                                    \
668   CPP(ObjectDefineSetter)                                                      \
669   TFJ(ObjectEntries, 1, kReceiver, kObject)                                    \
670   CPP(ObjectFreeze)                                                            \
671   TFJ(ObjectGetOwnPropertyDescriptor, kDontAdaptArgumentsSentinel)             \
672   CPP(ObjectGetOwnPropertyDescriptors)                                         \
673   TFJ(ObjectGetOwnPropertyNames, 1, kReceiver, kObject)                        \
674   CPP(ObjectGetOwnPropertySymbols)                                             \
675   TFJ(ObjectIs, 2, kReceiver, kLeft, kRight)                                   \
676   CPP(ObjectIsFrozen)                                                          \
677   CPP(ObjectIsSealed)                                                          \
678   TFJ(ObjectKeys, 1, kReceiver, kObject)                                       \
679   CPP(ObjectLookupGetter)                                                      \
680   CPP(ObjectLookupSetter)                                                      \
681   /* ES6 #sec-object.prototype.tostring */                                     \
682   TFJ(ObjectPrototypeToString, 0, kReceiver)                                   \
683   /* ES6 #sec-object.prototype.valueof */                                      \
684   TFJ(ObjectPrototypeValueOf, 0, kReceiver)                                    \
685   /* ES6 #sec-object.prototype.hasownproperty */                               \
686   TFJ(ObjectPrototypeHasOwnProperty, 1, kReceiver, kKey)                       \
687   TFJ(ObjectPrototypeIsPrototypeOf, 1, kReceiver, kValue)                      \
688   CPP(ObjectPrototypePropertyIsEnumerable)                                     \
689   CPP(ObjectPrototypeGetProto)                                                 \
690   CPP(ObjectPrototypeSetProto)                                                 \
691   /* ES #sec-object.prototype.tolocalestring */                                \
692   TFJ(ObjectPrototypeToLocaleString, 0, kReceiver)                             \
693   CPP(ObjectSeal)                                                              \
694   TFS(ObjectToString, kReceiver)                                               \
695   TFJ(ObjectValues, 1, kReceiver, kObject)                                     \
696                                                                                \
697   /* instanceof */                                                             \
698   TFC(OrdinaryHasInstance, Compare)                                            \
699   TFC(InstanceOf, Compare)                                                     \
700                                                                                \
701   /* for-in */                                                                 \
702   TFS(ForInEnumerate, kReceiver)                                               \
703   TFS(ForInFilter, kKey, kObject)                                              \
704                                                                                \
705   /* Promise */                                                                \
706   CPP(IsPromise)                                                               \
707                                                                                \
708   /* Reflect */                                                                \
709   ASM(ReflectApply, JSTrampoline)                                              \
710   ASM(ReflectConstruct, JSTrampoline)                                          \
711   CPP(ReflectDefineProperty)                                                   \
712   CPP(ReflectGetOwnPropertyDescriptor)                                         \
713   CPP(ReflectOwnKeys)                                                          \
714   CPP(ReflectSet)                                                              \
715                                                                                \
716   /* RegExp */                                                                 \
717   CPP(RegExpCapture1Getter)                                                    \
718   CPP(RegExpCapture2Getter)                                                    \
719   CPP(RegExpCapture3Getter)                                                    \
720   CPP(RegExpCapture4Getter)                                                    \
721   CPP(RegExpCapture5Getter)                                                    \
722   CPP(RegExpCapture6Getter)                                                    \
723   CPP(RegExpCapture7Getter)                                                    \
724   CPP(RegExpCapture8Getter)                                                    \
725   CPP(RegExpCapture9Getter)                                                    \
726   /* ES #sec-regexp-pattern-flags */                                           \
727   TFJ(RegExpConstructor, 2, kReceiver, kPattern, kFlags)                       \
728   CPP(RegExpInputGetter)                                                       \
729   CPP(RegExpInputSetter)                                                       \
730   CPP(RegExpLastMatchGetter)                                                   \
731   CPP(RegExpLastParenGetter)                                                   \
732   CPP(RegExpLeftContextGetter)                                                 \
733   /* ES #sec-regexp.prototype.compile */                                       \
734   TFJ(RegExpPrototypeCompile, 2, kReceiver, kPattern, kFlags)                  \
735   CPP(RegExpPrototypeToString)                                                 \
736   CPP(RegExpRightContextGetter)                                                \
737                                                                                \
738   /* RegExp helpers */                                                         \
739   TFS(RegExpExecAtom, kRegExp, kString, kLastIndex, kMatchInfo)                \
740   TFS(RegExpExecInternal, kRegExp, kString, kLastIndex, kMatchInfo)            \
741   ASM(RegExpInterpreterTrampoline, CCall)                                      \
742                                                                                \
743   /* Set */                                                                    \
744   TFJ(SetConstructor, kDontAdaptArgumentsSentinel)                             \
745   TFJ(SetPrototypeHas, 1, kReceiver, kKey)                                     \
746   TFJ(SetPrototypeAdd, 1, kReceiver, kKey)                                     \
747   TFJ(SetPrototypeDelete, 1, kReceiver, kKey)                                  \
748   CPP(SetPrototypeClear)                                                       \
749   /* ES #sec-set.prototype.entries */                                          \
750   TFJ(SetPrototypeEntries, 0, kReceiver)                                       \
751   /* ES #sec-get-set.prototype.size */                                         \
752   TFJ(SetPrototypeGetSize, 0, kReceiver)                                       \
753   /* ES #sec-set.prototype.foreach */                                          \
754   TFJ(SetPrototypeForEach, kDontAdaptArgumentsSentinel)                        \
755   /* ES #sec-set.prototype.values */                                           \
756   TFJ(SetPrototypeValues, 0, kReceiver)                                        \
757   /* ES #sec-%setiteratorprototype%.next */                                    \
758   TFJ(SetIteratorPrototypeNext, 0, kReceiver)                                  \
759   TFS(SetOrSetIteratorToList, kSource)                                         \
760                                                                                \
761   /* SharedArrayBuffer */                                                      \
762   CPP(SharedArrayBufferPrototypeGetByteLength)                                 \
763   CPP(SharedArrayBufferPrototypeSlice)                                         \
764   TFJ(AtomicsLoad, 2, kReceiver, kArray, kIndex)                               \
765   TFJ(AtomicsStore, 3, kReceiver, kArray, kIndex, kValue)                      \
766   TFJ(AtomicsExchange, 3, kReceiver, kArray, kIndex, kValue)                   \
767   TFJ(AtomicsCompareExchange, 4, kReceiver, kArray, kIndex, kOldValue,         \
768       kNewValue)                                                               \
769   TFJ(AtomicsAdd, 3, kReceiver, kArray, kIndex, kValue)                        \
770   TFJ(AtomicsSub, 3, kReceiver, kArray, kIndex, kValue)                        \
771   TFJ(AtomicsAnd, 3, kReceiver, kArray, kIndex, kValue)                        \
772   TFJ(AtomicsOr, 3, kReceiver, kArray, kIndex, kValue)                         \
773   TFJ(AtomicsXor, 3, kReceiver, kArray, kIndex, kValue)                        \
774   CPP(AtomicsNotify)                                                           \
775   CPP(AtomicsIsLockFree)                                                       \
776   CPP(AtomicsWait)                                                             \
777   CPP(AtomicsWake)                                                             \
778                                                                                \
779   /* String */                                                                 \
780   /* ES #sec-string.fromcodepoint */                                           \
781   CPP(StringFromCodePoint)                                                     \
782   /* ES6 #sec-string.fromcharcode */                                           \
783   TFJ(StringFromCharCode, kDontAdaptArgumentsSentinel)                         \
784   /* ES6 #sec-string.prototype.includes */                                     \
785   TFJ(StringPrototypeIncludes, kDontAdaptArgumentsSentinel)                    \
786   /* ES6 #sec-string.prototype.indexof */                                      \
787   TFJ(StringPrototypeIndexOf, kDontAdaptArgumentsSentinel)                     \
788   /* ES6 #sec-string.prototype.lastindexof */                                  \
789   CPP(StringPrototypeLastIndexOf)                                              \
790   /* ES6 #sec-string.prototype.match */                                        \
791   TFJ(StringPrototypeMatch, 1, kReceiver, kRegexp)                             \
792   /* ES #sec-string.prototype.matchAll */                                      \
793   TFJ(StringPrototypeMatchAll, 1, kReceiver, kRegexp)                          \
794   /* ES6 #sec-string.prototype.localecompare */                                \
795   CPP(StringPrototypeLocaleCompare)                                            \
796   /* ES6 #sec-string.prototype.replace */                                      \
797   TFJ(StringPrototypeReplace, 2, kReceiver, kSearch, kReplace)                 \
798   /* ES6 #sec-string.prototype.search */                                       \
799   TFJ(StringPrototypeSearch, 1, kReceiver, kRegexp)                            \
800   /* ES6 #sec-string.prototype.split */                                        \
801   TFJ(StringPrototypeSplit, kDontAdaptArgumentsSentinel)                       \
802   TFJ(StringPrototypeTrim, kDontAdaptArgumentsSentinel)                        \
803   TFJ(StringPrototypeTrimEnd, kDontAdaptArgumentsSentinel)                     \
804   TFJ(StringPrototypeTrimStart, kDontAdaptArgumentsSentinel)                   \
805   /* ES6 #sec-string.raw */                                                    \
806   CPP(StringRaw)                                                               \
807                                                                                \
808   /* Symbol */                                                                 \
809   /* ES #sec-symbol-constructor */                                             \
810   CPP(SymbolConstructor)                                                       \
811   /* ES6 #sec-symbol.for */                                                    \
812   CPP(SymbolFor)                                                               \
813   /* ES6 #sec-symbol.keyfor */                                                 \
814   CPP(SymbolKeyFor)                                                            \
815                                                                                \
816   /* TypedArray */                                                             \
817   /* ES #sec-typedarray-constructors */                                        \
818   TFJ(TypedArrayBaseConstructor, 0, kReceiver)                                 \
819   TFJ(GenericLazyDeoptContinuation, 1, kReceiver, kResult)                     \
820   TFJ(TypedArrayConstructor, kDontAdaptArgumentsSentinel)                      \
821   CPP(TypedArrayPrototypeBuffer)                                               \
822   /* ES6 #sec-get-%typedarray%.prototype.bytelength */                         \
823   TFJ(TypedArrayPrototypeByteLength, 0, kReceiver)                             \
824   /* ES6 #sec-get-%typedarray%.prototype.byteoffset */                         \
825   TFJ(TypedArrayPrototypeByteOffset, 0, kReceiver)                             \
826   /* ES6 #sec-get-%typedarray%.prototype.length */                             \
827   TFJ(TypedArrayPrototypeLength, 0, kReceiver)                                 \
828   /* ES6 #sec-%typedarray%.prototype.entries */                                \
829   TFJ(TypedArrayPrototypeEntries, 0, kReceiver)                                \
830   /* ES6 #sec-%typedarray%.prototype.keys */                                   \
831   TFJ(TypedArrayPrototypeKeys, 0, kReceiver)                                   \
832   /* ES6 #sec-%typedarray%.prototype.values */                                 \
833   TFJ(TypedArrayPrototypeValues, 0, kReceiver)                                 \
834   /* ES6 #sec-%typedarray%.prototype.copywithin */                             \
835   CPP(TypedArrayPrototypeCopyWithin)                                           \
836   /* ES6 #sec-%typedarray%.prototype.fill */                                   \
837   CPP(TypedArrayPrototypeFill)                                                 \
838   /* ES7 #sec-%typedarray%.prototype.includes */                               \
839   CPP(TypedArrayPrototypeIncludes)                                             \
840   /* ES6 #sec-%typedarray%.prototype.indexof */                                \
841   CPP(TypedArrayPrototypeIndexOf)                                              \
842   /* ES6 #sec-%typedarray%.prototype.lastindexof */                            \
843   CPP(TypedArrayPrototypeLastIndexOf)                                          \
844   /* ES6 #sec-%typedarray%.prototype.reverse */                                \
845   CPP(TypedArrayPrototypeReverse)                                              \
846   /* ES6 #sec-get-%typedarray%.prototype-@@tostringtag */                      \
847   TFJ(TypedArrayPrototypeToStringTag, 0, kReceiver)                            \
848   /* ES6 %TypedArray%.prototype.map */                                         \
849   TFJ(TypedArrayPrototypeMap, kDontAdaptArgumentsSentinel)                     \
850                                                                                \
851   /* Wasm */                                                                   \
852   ASM(WasmCompileLazy, Dummy)                                                  \
853   ASM(WasmDebugBreak, Dummy)                                                   \
854   TFC(WasmAtomicNotify, WasmAtomicNotify)                                      \
855   TFC(WasmI32AtomicWait32, WasmI32AtomicWait32)                                \
856   TFC(WasmI32AtomicWait64, WasmI32AtomicWait64)                                \
857   TFC(WasmI64AtomicWait32, WasmI64AtomicWait32)                                \
858   TFC(WasmI64AtomicWait64, WasmI64AtomicWait64)                                \
859   TFC(WasmMemoryGrow, WasmMemoryGrow)                                          \
860   TFC(WasmTableInit, WasmTableInit)                                            \
861   TFC(WasmTableCopy, WasmTableCopy)                                            \
862   TFC(WasmTableGet, WasmTableGet)                                              \
863   TFC(WasmTableSet, WasmTableSet)                                              \
864   TFC(WasmStackGuard, NoContext)                                               \
865   TFC(WasmStackOverflow, NoContext)                                            \
866   TFC(WasmThrow, WasmThrow)                                                    \
867   TFC(WasmRethrow, WasmThrow)                                                  \
868   TFS(WasmTraceMemory, kMemoryTracingInfo)                                     \
869   TFS(ThrowWasmTrapUnreachable)                                                \
870   TFS(ThrowWasmTrapMemOutOfBounds)                                             \
871   TFS(ThrowWasmTrapUnalignedAccess)                                            \
872   TFS(ThrowWasmTrapDivByZero)                                                  \
873   TFS(ThrowWasmTrapDivUnrepresentable)                                         \
874   TFS(ThrowWasmTrapRemByZero)                                                  \
875   TFS(ThrowWasmTrapFloatUnrepresentable)                                       \
876   TFS(ThrowWasmTrapFuncInvalid)                                                \
877   TFS(ThrowWasmTrapFuncSigMismatch)                                            \
878   TFS(ThrowWasmTrapDataSegmentDropped)                                         \
879   TFS(ThrowWasmTrapElemSegmentDropped)                                         \
880   TFS(ThrowWasmTrapTableOutOfBounds)                                           \
881   TFS(ThrowWasmTrapBrOnExnNullRef)                                             \
882   TFS(ThrowWasmTrapRethrowNullRef)                                             \
883                                                                                \
884   /* WeakMap */                                                                \
885   TFJ(WeakMapConstructor, kDontAdaptArgumentsSentinel)                         \
886   TFS(WeakMapLookupHashIndex, kTable, kKey)                                    \
887   TFJ(WeakMapGet, 1, kReceiver, kKey)                                          \
888   TFJ(WeakMapPrototypeHas, 1, kReceiver, kKey)                                 \
889   TFJ(WeakMapPrototypeSet, 2, kReceiver, kKey, kValue)                         \
890   TFJ(WeakMapPrototypeDelete, 1, kReceiver, kKey)                              \
891                                                                                \
892   /* WeakSet */                                                                \
893   TFJ(WeakSetConstructor, kDontAdaptArgumentsSentinel)                         \
894   TFJ(WeakSetPrototypeHas, 1, kReceiver, kKey)                                 \
895   TFJ(WeakSetPrototypeAdd, 1, kReceiver, kValue)                               \
896   TFJ(WeakSetPrototypeDelete, 1, kReceiver, kValue)                            \
897                                                                                \
898   /* WeakSet / WeakMap Helpers */                                              \
899   TFS(WeakCollectionDelete, kCollection, kKey)                                 \
900   TFS(WeakCollectionSet, kCollection, kKey, kValue)                            \
901                                                                                \
902   /* AsyncGenerator */                                                         \
903                                                                                \
904   TFS(AsyncGeneratorResolve, kGenerator, kValue, kDone)                        \
905   TFS(AsyncGeneratorReject, kGenerator, kValue)                                \
906   TFS(AsyncGeneratorYield, kGenerator, kValue, kIsCaught)                      \
907   TFS(AsyncGeneratorReturn, kGenerator, kValue, kIsCaught)                     \
908   TFS(AsyncGeneratorResumeNext, kGenerator)                                    \
909                                                                                \
910   /* AsyncGeneratorFunction( p1, p2, ... pn, body ) */                         \
911   /* proposal-async-iteration/#sec-asyncgeneratorfunction-constructor */       \
912   CPP(AsyncGeneratorFunctionConstructor)                                       \
913   /* AsyncGenerator.prototype.next ( value ) */                                \
914   /* proposal-async-iteration/#sec-asyncgenerator-prototype-next */            \
915   TFJ(AsyncGeneratorPrototypeNext, kDontAdaptArgumentsSentinel)                \
916   /* AsyncGenerator.prototype.return ( value ) */                              \
917   /* proposal-async-iteration/#sec-asyncgenerator-prototype-return */          \
918   TFJ(AsyncGeneratorPrototypeReturn, kDontAdaptArgumentsSentinel)              \
919   /* AsyncGenerator.prototype.throw ( exception ) */                           \
920   /* proposal-async-iteration/#sec-asyncgenerator-prototype-throw */           \
921   TFJ(AsyncGeneratorPrototypeThrow, kDontAdaptArgumentsSentinel)               \
922                                                                                \
923   /* Await (proposal-async-iteration/#await), with resume behaviour */         \
924   /* specific to Async Generators. Internal / Not exposed to JS code. */       \
925   TFS(AsyncGeneratorAwaitCaught, kAsyncGeneratorObject, kValue)                \
926   TFS(AsyncGeneratorAwaitUncaught, kAsyncGeneratorObject, kValue)              \
927   TFJ(AsyncGeneratorAwaitResolveClosure, 1, kReceiver, kValue)                 \
928   TFJ(AsyncGeneratorAwaitRejectClosure, 1, kReceiver, kValue)                  \
929   TFJ(AsyncGeneratorYieldResolveClosure, 1, kReceiver, kValue)                 \
930   TFJ(AsyncGeneratorReturnClosedResolveClosure, 1, kReceiver, kValue)          \
931   TFJ(AsyncGeneratorReturnClosedRejectClosure, 1, kReceiver, kValue)           \
932   TFJ(AsyncGeneratorReturnResolveClosure, 1, kReceiver, kValue)                \
933                                                                                \
934   /* Async-from-Sync Iterator */                                               \
935                                                                                \
936   /* %AsyncFromSyncIteratorPrototype% */                                       \
937   /* See tc39.github.io/proposal-async-iteration/ */                           \
938   /* #sec-%asyncfromsynciteratorprototype%-object) */                          \
939   TFJ(AsyncFromSyncIteratorPrototypeNext, 1, kReceiver, kValue)                \
940   /* #sec-%asyncfromsynciteratorprototype%.throw */                            \
941   TFJ(AsyncFromSyncIteratorPrototypeThrow, 1, kReceiver, kReason)              \
942   /* #sec-%asyncfromsynciteratorprototype%.return */                           \
943   TFJ(AsyncFromSyncIteratorPrototypeReturn, 1, kReceiver, kValue)              \
944   /* #sec-async-iterator-value-unwrap-functions */                             \
945   TFJ(AsyncIteratorValueUnwrap, 1, kReceiver, kValue)                          \
946                                                                                \
947   /* CEntry */                                                                 \
948   ASM(CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit, Dummy)          \
949   ASM(CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit, Dummy)            \
950   ASM(CEntry_Return1_DontSaveFPRegs_ArgvInRegister_NoBuiltinExit, Dummy)       \
951   ASM(CEntry_Return1_SaveFPRegs_ArgvOnStack_NoBuiltinExit, Dummy)              \
952   ASM(CEntry_Return1_SaveFPRegs_ArgvOnStack_BuiltinExit, Dummy)                \
953   ASM(CEntry_Return2_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit, Dummy)          \
954   ASM(CEntry_Return2_DontSaveFPRegs_ArgvOnStack_BuiltinExit, Dummy)            \
955   ASM(CEntry_Return2_DontSaveFPRegs_ArgvInRegister_NoBuiltinExit, Dummy)       \
956   ASM(CEntry_Return2_SaveFPRegs_ArgvOnStack_NoBuiltinExit, Dummy)              \
957   ASM(CEntry_Return2_SaveFPRegs_ArgvOnStack_BuiltinExit, Dummy)                \
958   ASM(DirectCEntry, Dummy)                                                     \
959                                                                                \
960   /* String helpers */                                                         \
961   TFS(StringAdd_CheckNone, kLeft, kRight)                                      \
962   TFS(SubString, kString, kFrom, kTo)                                          \
963                                                                                \
964   /* Miscellaneous */                                                          \
965   ASM(StackCheck, Dummy)                                                       \
966   ASM(DoubleToI, Dummy)                                                        \
967   TFC(GetProperty, GetProperty)                                                \
968   TFS(GetPropertyWithReceiver, kObject, kKey, kReceiver, kOnNonExistent)       \
969   TFS(SetProperty, kReceiver, kKey, kValue)                                    \
970   TFS(SetPropertyInLiteral, kReceiver, kKey, kValue)                           \
971   ASM(MemCopyUint8Uint8, CCall)                                                \
972   ASM(MemMove, CCall)                                                          \
973                                                                                \
974   /* Trace */                                                                  \
975   CPP(IsTraceCategoryEnabled)                                                  \
976   CPP(Trace)                                                                   \
977                                                                                \
978   /* Weak refs */                                                              \
979   CPP(FinalizationRegistryCleanupIteratorNext)                                 \
980   CPP(FinalizationRegistryCleanupSome)                                         \
981   CPP(FinalizationRegistryConstructor)                                         \
982   CPP(FinalizationRegistryRegister)                                            \
983   CPP(FinalizationRegistryUnregister)                                          \
984   CPP(WeakRefConstructor)                                                      \
985   CPP(WeakRefDeref)                                                            \
986                                                                                \
987   /* Async modules */                                                          \
988   TFJ(AsyncModuleEvaluate, kDontAdaptArgumentsSentinel)                        \
989                                                                                \
990   /* CallAsyncModule* are spec anonymyous functions */                         \
991   CPP(CallAsyncModuleFulfilled)                                                \
992   CPP(CallAsyncModuleRejected)
993 
994 #ifdef V8_INTL_SUPPORT
995 #define BUILTIN_LIST_INTL(CPP, TFJ, TFS)                               \
996   /* ecma402 #sec-intl.collator */                                     \
997   CPP(CollatorConstructor)                                             \
998   /* ecma 402 #sec-collator-compare-functions*/                        \
999   CPP(CollatorInternalCompare)                                         \
1000   /* ecma402 #sec-intl.collator.prototype.compare */                   \
1001   CPP(CollatorPrototypeCompare)                                        \
1002   /* ecma402 #sec-intl.collator.supportedlocalesof */                  \
1003   CPP(CollatorSupportedLocalesOf)                                      \
1004   CPP(CollatorPrototypeResolvedOptions)                                \
1005   /* ecma402 #sup-date.prototype.tolocaledatestring */                 \
1006   CPP(DatePrototypeToLocaleDateString)                                 \
1007   /* ecma402 #sup-date.prototype.tolocalestring */                     \
1008   CPP(DatePrototypeToLocaleString)                                     \
1009   /* ecma402 #sup-date.prototype.tolocaletimestring */                 \
1010   CPP(DatePrototypeToLocaleTimeString)                                 \
1011   /* ecma402 #sec-intl.datetimeformat */                               \
1012   CPP(DateTimeFormatConstructor)                                       \
1013   /* ecma402 #sec-datetime-format-functions */                         \
1014   CPP(DateTimeFormatInternalFormat)                                    \
1015   /* ecma402 #sec-intl.datetimeformat.prototype.format */              \
1016   CPP(DateTimeFormatPrototypeFormat)                                   \
1017   /* ecma402 #sec-intl.datetimeformat.prototype.formatrange */         \
1018   CPP(DateTimeFormatPrototypeFormatRange)                              \
1019   /* ecma402 #sec-intl.datetimeformat.prototype.formatrangetoparts */  \
1020   CPP(DateTimeFormatPrototypeFormatRangeToParts)                       \
1021   /* ecma402 #sec-intl.datetimeformat.prototype.formattoparts */       \
1022   CPP(DateTimeFormatPrototypeFormatToParts)                            \
1023   /* ecma402 #sec-intl.datetimeformat.prototype.resolvedoptions */     \
1024   CPP(DateTimeFormatPrototypeResolvedOptions)                          \
1025   /* ecma402 #sec-intl.datetimeformat.supportedlocalesof */            \
1026   CPP(DateTimeFormatSupportedLocalesOf)                                \
1027   /* ecma402 #sec-Intl.DisplayNames */                                 \
1028   CPP(DisplayNamesConstructor)                                         \
1029   /* ecma402 #sec-Intl.DisplayNames.prototype.of */                    \
1030   CPP(DisplayNamesPrototypeOf)                                         \
1031   /* ecma402 #sec-Intl.DisplayNames.prototype.resolvedOptions */       \
1032   CPP(DisplayNamesPrototypeResolvedOptions)                            \
1033   /* ecma402 #sec-Intl.DisplayNames.supportedLocalesOf */              \
1034   CPP(DisplayNamesSupportedLocalesOf)                                  \
1035   /* ecma402 #sec-intl.getcanonicallocales */                          \
1036   CPP(IntlGetCanonicalLocales)                                         \
1037   /* ecma402 #sec-intl-listformat-constructor */                       \
1038   CPP(ListFormatConstructor)                                           \
1039   /* ecma402 #sec-intl-list-format.prototype.format */                 \
1040   TFJ(ListFormatPrototypeFormat, kDontAdaptArgumentsSentinel)          \
1041   /* ecma402 #sec-intl-list-format.prototype.formattoparts */          \
1042   TFJ(ListFormatPrototypeFormatToParts, kDontAdaptArgumentsSentinel)   \
1043   /* ecma402 #sec-intl.listformat.prototype.resolvedoptions */         \
1044   CPP(ListFormatPrototypeResolvedOptions)                              \
1045   /* ecma402 #sec-intl.ListFormat.supportedlocalesof */                \
1046   CPP(ListFormatSupportedLocalesOf)                                    \
1047   /* ecma402 #sec-intl-locale-constructor */                           \
1048   CPP(LocaleConstructor)                                               \
1049   CPP(LocalePrototypeBaseName)                                         \
1050   CPP(LocalePrototypeCalendar)                                         \
1051   CPP(LocalePrototypeCaseFirst)                                        \
1052   CPP(LocalePrototypeCollation)                                        \
1053   CPP(LocalePrototypeHourCycle)                                        \
1054   CPP(LocalePrototypeLanguage)                                         \
1055   /* ecma402 #sec-Intl.Locale.prototype.maximize */                    \
1056   CPP(LocalePrototypeMaximize)                                         \
1057   /* ecma402 #sec-Intl.Locale.prototype.minimize */                    \
1058   CPP(LocalePrototypeMinimize)                                         \
1059   CPP(LocalePrototypeNumeric)                                          \
1060   CPP(LocalePrototypeNumberingSystem)                                  \
1061   CPP(LocalePrototypeRegion)                                           \
1062   CPP(LocalePrototypeScript)                                           \
1063   CPP(LocalePrototypeToString)                                         \
1064   /* ecma402 #sec-intl.numberformat */                                 \
1065   CPP(NumberFormatConstructor)                                         \
1066   /* ecma402 #sec-number-format-functions */                           \
1067   CPP(NumberFormatInternalFormatNumber)                                \
1068   /* ecma402 #sec-intl.numberformat.prototype.format */                \
1069   CPP(NumberFormatPrototypeFormatNumber)                               \
1070   /* ecma402 #sec-intl.numberformat.prototype.formattoparts */         \
1071   CPP(NumberFormatPrototypeFormatToParts)                              \
1072   /* ecma402 #sec-intl.numberformat.prototype.resolvedoptions */       \
1073   CPP(NumberFormatPrototypeResolvedOptions)                            \
1074   /* ecma402 #sec-intl.numberformat.supportedlocalesof */              \
1075   CPP(NumberFormatSupportedLocalesOf)                                  \
1076   /* ecma402 #sec-intl.pluralrules */                                  \
1077   CPP(PluralRulesConstructor)                                          \
1078   CPP(PluralRulesPrototypeResolvedOptions)                             \
1079   /* ecma402 #sec-intl.pluralrules.prototype.select */                 \
1080   CPP(PluralRulesPrototypeSelect)                                      \
1081   /* ecma402 #sec-intl.pluralrules.supportedlocalesof */               \
1082   CPP(PluralRulesSupportedLocalesOf)                                   \
1083   /* ecma402 #sec-intl.RelativeTimeFormat.constructor */               \
1084   CPP(RelativeTimeFormatConstructor)                                   \
1085   /* ecma402 #sec-intl.RelativeTimeFormat.prototype.format */          \
1086   CPP(RelativeTimeFormatPrototypeFormat)                               \
1087   /* ecma402 #sec-intl.RelativeTimeFormat.prototype.formatToParts */   \
1088   CPP(RelativeTimeFormatPrototypeFormatToParts)                        \
1089   /* ecma402 #sec-intl.RelativeTimeFormat.prototype.resolvedOptions */ \
1090   CPP(RelativeTimeFormatPrototypeResolvedOptions)                      \
1091   /* ecma402 #sec-intl.RelativeTimeFormat.supportedlocalesof */        \
1092   CPP(RelativeTimeFormatSupportedLocalesOf)                            \
1093   /* ecma402 #sec-Intl.Segmenter */                                    \
1094   CPP(SegmenterConstructor)                                            \
1095   /* ecma402 #sec-Intl.Segmenter.prototype.resolvedOptions */          \
1096   CPP(SegmenterPrototypeResolvedOptions)                               \
1097   /* ecma402 #sec-Intl.Segmenter.prototype.segment  */                 \
1098   CPP(SegmenterPrototypeSegment)                                       \
1099   /* ecma402  #sec-Intl.Segmenter.supportedLocalesOf */                \
1100   CPP(SegmenterSupportedLocalesOf)                                     \
1101   /* ecma402 #sec-segment-iterator-prototype-breakType */              \
1102   CPP(SegmentIteratorPrototypeBreakType)                               \
1103   /* ecma402 #sec-segment-iterator-prototype-following */              \
1104   CPP(SegmentIteratorPrototypeFollowing)                               \
1105   /* ecma402 #sec-segment-iterator-prototype-preceding */              \
1106   CPP(SegmentIteratorPrototypePreceding)                               \
1107   /* ecma402 #sec-segment-iterator-prototype-index */                  \
1108   CPP(SegmentIteratorPrototypeIndex)                                   \
1109   /* ecma402 #sec-segment-iterator-prototype-next */                   \
1110   CPP(SegmentIteratorPrototypeNext)                                    \
1111   /* ES #sec-string.prototype.normalize */                             \
1112   CPP(StringPrototypeNormalizeIntl)                                    \
1113   /* ecma402 #sup-string.prototype.tolocalelowercase */                \
1114   CPP(StringPrototypeToLocaleLowerCase)                                \
1115   /* ecma402 #sup-string.prototype.tolocaleuppercase */                \
1116   CPP(StringPrototypeToLocaleUpperCase)                                \
1117   /* ES #sec-string.prototype.tolowercase */                           \
1118   TFJ(StringPrototypeToLowerCaseIntl, 0, kReceiver)                    \
1119   /* ES #sec-string.prototype.touppercase */                           \
1120   CPP(StringPrototypeToUpperCaseIntl)                                  \
1121   TFS(StringToLowerCaseIntl, kString)                                  \
1122   CPP(V8BreakIteratorConstructor)                                      \
1123   CPP(V8BreakIteratorInternalAdoptText)                                \
1124   CPP(V8BreakIteratorInternalBreakType)                                \
1125   CPP(V8BreakIteratorInternalCurrent)                                  \
1126   CPP(V8BreakIteratorInternalFirst)                                    \
1127   CPP(V8BreakIteratorInternalNext)                                     \
1128   CPP(V8BreakIteratorPrototypeAdoptText)                               \
1129   CPP(V8BreakIteratorPrototypeBreakType)                               \
1130   CPP(V8BreakIteratorPrototypeCurrent)                                 \
1131   CPP(V8BreakIteratorPrototypeFirst)                                   \
1132   CPP(V8BreakIteratorPrototypeNext)                                    \
1133   CPP(V8BreakIteratorPrototypeResolvedOptions)                         \
1134   CPP(V8BreakIteratorSupportedLocalesOf)
1135 #else
1136 #define BUILTIN_LIST_INTL(CPP, TFJ, TFS)      \
1137   /* no-op fallback version */                \
1138   CPP(StringPrototypeNormalize)               \
1139   /* same as toLowercase; fallback version */ \
1140   CPP(StringPrototypeToLocaleLowerCase)       \
1141   /* same as toUppercase; fallback version */ \
1142   CPP(StringPrototypeToLocaleUpperCase)       \
1143   /* (obsolete) Unibrow version */            \
1144   CPP(StringPrototypeToLowerCase)             \
1145   /* (obsolete) Unibrow version */            \
1146   CPP(StringPrototypeToUpperCase)
1147 #endif  // V8_INTL_SUPPORT
1148 
1149 #define BUILTIN_LIST(CPP, TFJ, TFC, TFS, TFH, BCH, ASM)  \
1150   BUILTIN_LIST_BASE(CPP, TFJ, TFC, TFS, TFH, ASM)        \
1151   BUILTIN_LIST_FROM_TORQUE(CPP, TFJ, TFC, TFS, TFH, ASM) \
1152   BUILTIN_LIST_INTL(CPP, TFJ, TFS)                       \
1153   BUILTIN_LIST_BYTECODE_HANDLERS(BCH)
1154 
1155 // The exception thrown in the following builtins are caught
1156 // internally and result in a promise rejection.
1157 #define BUILTIN_PROMISE_REJECTION_PREDICTION_LIST(V) \
1158   V(AsyncFromSyncIteratorPrototypeNext)              \
1159   V(AsyncFromSyncIteratorPrototypeReturn)            \
1160   V(AsyncFromSyncIteratorPrototypeThrow)             \
1161   V(AsyncFunctionAwaitCaught)                        \
1162   V(AsyncFunctionAwaitUncaught)                      \
1163   V(AsyncGeneratorResolve)                           \
1164   V(AsyncGeneratorAwaitCaught)                       \
1165   V(AsyncGeneratorAwaitUncaught)                     \
1166   V(PromiseAll)                                      \
1167   V(PromiseConstructor)                              \
1168   V(PromiseConstructorLazyDeoptContinuation)         \
1169   V(PromiseFulfillReactionJob)                       \
1170   V(PromiseRace)                                     \
1171   V(ResolvePromise)
1172 
1173 // The exception thrown in the following builtins are caught internally and will
1174 // not be propagated further or re-thrown
1175 #define BUILTIN_EXCEPTION_CAUGHT_PREDICTION_LIST(V) V(PromiseRejectReactionJob)
1176 
1177 #define IGNORE_BUILTIN(...)
1178 
1179 #define BUILTIN_LIST_C(V)                                         \
1180   BUILTIN_LIST(V, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \
1181                IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
1182 
1183 #define BUILTIN_LIST_A(V)                                                      \
1184   BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \
1185                IGNORE_BUILTIN, IGNORE_BUILTIN, V)
1186 
1187 #define BUILTIN_LIST_TFS(V)                                       \
1188   BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, V, \
1189                IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
1190 
1191 #define BUILTIN_LIST_TFJ(V)                                       \
1192   BUILTIN_LIST(IGNORE_BUILTIN, V, IGNORE_BUILTIN, IGNORE_BUILTIN, \
1193                IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
1194 
1195 #define BUILTIN_LIST_TFC(V)                                       \
1196   BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, V, IGNORE_BUILTIN, \
1197                IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
1198 
1199 }  // namespace internal
1200 }  // namespace v8
1201 
1202 #endif  // V8_BUILTINS_BUILTINS_DEFINITIONS_H_
1203