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 "src/interpreter/bytecodes.h"
9 
10 // include generated header
11 #include "torque-generated/builtin-definitions-from-dsl.h"
12 
13 namespace v8 {
14 namespace internal {
15 
16 // CPP: Builtin in C++. Entered via BUILTIN_EXIT frame.
17 //      Args: name
18 // API: Builtin in C++ for API callbacks. Entered via EXIT frame.
19 //      Args: name
20 // TFJ: Builtin in Turbofan, with JS linkage (callable as Javascript function).
21 //      Args: name, arguments count, explicit argument names...
22 // TFS: Builtin in Turbofan, with CodeStub linkage.
23 //      Args: name, explicit argument names...
24 // TFC: Builtin in Turbofan, with CodeStub linkage and custom descriptor.
25 //      Args: name, interface descriptor, return_size
26 // TFH: Handlers in Turbofan, with CodeStub linkage.
27 //      Args: name, interface descriptor
28 // BCH: Bytecode Handlers, with bytecode dispatch linkage.
29 //      Args: name
30 // ASM: Builtin in platform-dependent assembly.
31 //      Args: name
32 
33 #define BUILTIN_LIST_BASE(CPP, API, TFJ, TFC, TFS, TFH, ASM)                   \
34   /* GC write barrirer */                                                      \
35   TFC(RecordWrite, RecordWrite, 1)                                             \
36                                                                                \
37   /* Adaptors for CPP/API builtin */                                           \
38   TFC(AdaptorWithExitFrame, CppBuiltinAdaptor, 1)                              \
39   TFC(AdaptorWithBuiltinExitFrame, CppBuiltinAdaptor, 1)                       \
40                                                                                \
41   /* Calls */                                                                  \
42   ASM(ArgumentsAdaptorTrampoline)                                              \
43   /* ES6 section 9.2.1 [[Call]] ( thisArgument, argumentsList) */              \
44   ASM(CallFunction_ReceiverIsNullOrUndefined)                                  \
45   ASM(CallFunction_ReceiverIsNotNullOrUndefined)                               \
46   ASM(CallFunction_ReceiverIsAny)                                              \
47   /* ES6 section 9.4.1.1 [[Call]] ( thisArgument, argumentsList) */            \
48   ASM(CallBoundFunction)                                                       \
49   /* ES6 section 7.3.12 Call(F, V, [argumentsList]) */                         \
50   ASM(Call_ReceiverIsNullOrUndefined)                                          \
51   ASM(Call_ReceiverIsNotNullOrUndefined)                                       \
52   ASM(Call_ReceiverIsAny)                                                      \
53                                                                                \
54   /* ES6 section 9.5.12[[Call]] ( thisArgument, argumentsList ) */             \
55   TFC(CallProxy, CallTrampoline, 1)                                            \
56   ASM(CallVarargs)                                                             \
57   TFC(CallWithSpread, CallWithSpread, 1)                                       \
58   TFC(CallWithArrayLike, CallWithArrayLike, 1)                                 \
59   ASM(CallForwardVarargs)                                                      \
60   ASM(CallFunctionForwardVarargs)                                              \
61                                                                                \
62   /* Construct */                                                              \
63   /* ES6 section 9.2.2 [[Construct]] ( argumentsList, newTarget) */            \
64   ASM(ConstructFunction)                                                       \
65   /* ES6 section 9.4.1.2 [[Construct]] (argumentsList, newTarget) */           \
66   ASM(ConstructBoundFunction)                                                  \
67   ASM(ConstructedNonConstructable)                                             \
68   /* ES6 section 7.3.13 Construct (F, [argumentsList], [newTarget]) */         \
69   ASM(Construct)                                                               \
70   ASM(ConstructVarargs)                                                        \
71   TFC(ConstructWithSpread, ConstructWithSpread, 1)                             \
72   TFC(ConstructWithArrayLike, ConstructWithArrayLike, 1)                       \
73   ASM(ConstructForwardVarargs)                                                 \
74   ASM(ConstructFunctionForwardVarargs)                                         \
75   ASM(JSConstructStubGeneric)                                                  \
76   ASM(JSBuiltinsConstructStub)                                                 \
77   TFC(FastNewObject, FastNewObject, 1)                                         \
78   TFS(FastNewClosure, kSharedFunctionInfo, kFeedbackCell)                      \
79   TFC(FastNewFunctionContextEval, FastNewFunctionContext, 1)                   \
80   TFC(FastNewFunctionContextFunction, FastNewFunctionContext, 1)               \
81   TFS(CreateRegExpLiteral, kFeedbackVector, kSlot, kPattern, kFlags)           \
82   TFS(CreateEmptyArrayLiteral, kFeedbackVector, kSlot)                         \
83   TFS(CreateShallowArrayLiteral, kFeedbackVector, kSlot, kConstantElements)    \
84   TFS(CreateShallowObjectLiteral, kFeedbackVector, kSlot,                      \
85       kObjectBoilerplateDescription, kFlags)                                   \
86   /* ES6 section 9.5.14 [[Construct]] ( argumentsList, newTarget) */           \
87   TFC(ConstructProxy, JSTrampoline, 1)                                         \
88                                                                                \
89   /* Apply and entries */                                                      \
90   ASM(JSEntryTrampoline)                                                       \
91   ASM(JSConstructEntryTrampoline)                                              \
92   ASM(ResumeGeneratorTrampoline)                                               \
93                                                                                \
94   /* Stack and interrupt check */                                              \
95   ASM(InterruptCheck)                                                          \
96   ASM(StackCheck)                                                              \
97                                                                                \
98   /* String helpers */                                                         \
99   TFC(StringCharAt, StringAt, 1)                                               \
100   TFC(StringCodePointAtUTF16, StringAt, 1)                                     \
101   TFC(StringCodePointAtUTF32, StringAt, 1)                                     \
102   TFC(StringEqual, Compare, 1)                                                 \
103   TFC(StringGreaterThan, Compare, 1)                                           \
104   TFC(StringGreaterThanOrEqual, Compare, 1)                                    \
105   TFS(StringIndexOf, kReceiver, kSearchString, kPosition)                      \
106   TFC(StringLessThan, Compare, 1)                                              \
107   TFC(StringLessThanOrEqual, Compare, 1)                                       \
108   TFS(StringRepeat, kString, kCount)                                           \
109   TFC(StringSubstring, StringSubstring, 1)                                     \
110                                                                                \
111   /* OrderedHashTable helpers */                                               \
112   TFS(OrderedHashTableHealIndex, kTable, kIndex)                               \
113                                                                                \
114   /* Interpreter */                                                            \
115   ASM(InterpreterEntryTrampoline)                                              \
116   ASM(InterpreterPushArgsThenCall)                                             \
117   ASM(InterpreterPushUndefinedAndArgsThenCall)                                 \
118   ASM(InterpreterPushArgsThenCallWithFinalSpread)                              \
119   ASM(InterpreterPushArgsThenConstruct)                                        \
120   ASM(InterpreterPushArgsThenConstructArrayFunction)                           \
121   ASM(InterpreterPushArgsThenConstructWithFinalSpread)                         \
122   ASM(InterpreterEnterBytecodeAdvance)                                         \
123   ASM(InterpreterEnterBytecodeDispatch)                                        \
124   ASM(InterpreterOnStackReplacement)                                           \
125                                                                                \
126   /* Code life-cycle */                                                        \
127   TFC(CompileLazy, JSTrampoline, 1)                                            \
128   TFC(CompileLazyDeoptimizedCode, JSTrampoline, 1)                             \
129   TFC(DeserializeLazy, JSTrampoline, 1)                                        \
130   ASM(InstantiateAsmJs)                                                        \
131   ASM(NotifyDeoptimized)                                                       \
132                                                                                \
133   /* Trampolines called when returning from a deoptimization that expects   */ \
134   /* to continue in a JavaScript builtin to finish the functionality of a   */ \
135   /* an TF-inlined version of builtin that has side-effects.                */ \
136   /*                                                                        */ \
137   /* The trampolines work as follows:                                       */ \
138   /*   1. Trampoline restores input register values that                    */ \
139   /*      the builtin expects from a BuiltinContinuationFrame.              */ \
140   /*   2. Trampoline tears down BuiltinContinuationFrame.                   */ \
141   /*   3. Trampoline jumps to the builtin's address.                        */ \
142   /*   4. Builtin executes as if invoked by the frame above it.             */ \
143   /*   5. When the builtin returns, execution resumes normally in the       */ \
144   /*      calling frame, processing any return result from the JavaScript   */ \
145   /*      builtin as if it had called the builtin directly.                 */ \
146   /*                                                                        */ \
147   /* There are two variants of the stub that differ in their handling of a  */ \
148   /* value returned by the next frame deeper on the stack. For LAZY deopts, */ \
149   /* the return value (e.g. rax on x64) is explicitly passed as an extra    */ \
150   /* stack parameter to the JavaScript builtin by the "WithResult"          */ \
151   /* trampoline variant. The plain variant is used in EAGER deopt contexts  */ \
152   /* and has no such special handling. */                                      \
153   ASM(ContinueToCodeStubBuiltin)                                               \
154   ASM(ContinueToCodeStubBuiltinWithResult)                                     \
155   ASM(ContinueToJavaScriptBuiltin)                                             \
156   ASM(ContinueToJavaScriptBuiltinWithResult)                                   \
157                                                                                \
158   ASM(OnStackReplacement)                                                      \
159                                                                                \
160   /* API callback handling */                                                  \
161   API(HandleApiCall)                                                           \
162   API(HandleApiCallAsFunction)                                                 \
163   API(HandleApiCallAsConstructor)                                              \
164                                                                                \
165   /* Adapters for Turbofan into runtime */                                     \
166   TFC(AllocateInNewSpace, Allocate, 1)                                         \
167   TFC(AllocateInOldSpace, Allocate, 1)                                         \
168                                                                                \
169   /* TurboFan support builtins */                                              \
170   TFS(CopyFastSmiOrObjectElements, kObject)                                    \
171   TFC(GrowFastDoubleElements, GrowArrayElements, 1)                            \
172   TFC(GrowFastSmiOrObjectElements, GrowArrayElements, 1)                       \
173   TFC(NewArgumentsElements, NewArgumentsElements, 1)                           \
174                                                                                \
175   /* Debugger */                                                               \
176   TFJ(DebugBreakTrampoline, SharedFunctionInfo::kDontAdaptArgumentsSentinel)   \
177   ASM(FrameDropperTrampoline)                                                  \
178   ASM(HandleDebuggerStatement)                                                 \
179                                                                                \
180   /* Type conversions */                                                       \
181   TFC(ToObject, TypeConversion, 1)                                             \
182   TFC(ToBoolean, TypeConversion, 1)                                            \
183   TFC(OrdinaryToPrimitive_Number, TypeConversion, 1)                           \
184   TFC(OrdinaryToPrimitive_String, TypeConversion, 1)                           \
185   TFC(NonPrimitiveToPrimitive_Default, TypeConversion, 1)                      \
186   TFC(NonPrimitiveToPrimitive_Number, TypeConversion, 1)                       \
187   TFC(NonPrimitiveToPrimitive_String, TypeConversion, 1)                       \
188   TFC(StringToNumber, TypeConversion, 1)                                       \
189   TFC(ToName, TypeConversion, 1)                                               \
190   TFC(NonNumberToNumber, TypeConversion, 1)                                    \
191   TFC(NonNumberToNumeric, TypeConversion, 1)                                   \
192   TFC(ToNumber, TypeConversion, 1)                                             \
193   TFC(ToNumberConvertBigInt, TypeConversion, 1)                                \
194   TFC(ToNumeric, TypeConversion, 1)                                            \
195   TFC(NumberToString, TypeConversion, 1)                                       \
196   TFC(ToString, TypeConversion, 1)                                             \
197   TFC(ToInteger, TypeConversion, 1)                                            \
198   TFC(ToInteger_TruncateMinusZero, TypeConversion, 1)                          \
199   TFC(ToLength, TypeConversion, 1)                                             \
200   TFC(Typeof, Typeof, 1)                                                       \
201   TFC(GetSuperConstructor, Typeof, 1)                                          \
202                                                                                \
203   /* Type conversions continuations */                                         \
204   TFC(ToBooleanLazyDeoptContinuation, TypeConversionStackParameter, 1)         \
205                                                                                \
206   /* Handlers */                                                               \
207   TFH(KeyedLoadIC_Megamorphic, LoadWithVector)                                 \
208   TFH(KeyedLoadIC_PolymorphicName, LoadWithVector)                             \
209   TFH(KeyedLoadIC_Slow, LoadWithVector)                                        \
210   TFH(KeyedStoreIC_Megamorphic, StoreWithVector)                               \
211   TFH(KeyedStoreIC_Slow, StoreWithVector)                                      \
212   TFH(LoadGlobalIC_Slow, LoadWithVector)                                       \
213   TFH(LoadIC_FunctionPrototype, LoadWithVector)                                \
214   TFH(LoadIC_Slow, LoadWithVector)                                             \
215   TFH(LoadIC_StringLength, LoadWithVector)                                     \
216   TFH(LoadIC_StringWrapperLength, LoadWithVector)                              \
217   TFH(LoadIC_Uninitialized, LoadWithVector)                                    \
218   TFH(StoreGlobalIC_Slow, StoreWithVector)                                     \
219   TFH(StoreIC_Uninitialized, StoreWithVector)                                  \
220   TFH(StoreInArrayLiteralIC_Slow, StoreWithVector)                             \
221                                                                                \
222   /* Microtask helpers */                                                      \
223   TFS(EnqueueMicrotask, kMicrotask)                                            \
224   TFC(RunMicrotasks, RunMicrotasks, 1)                                         \
225                                                                                \
226   /* Object property helpers */                                                \
227   TFS(HasProperty, kObject, kKey)                                              \
228   TFS(DeleteProperty, kObject, kKey, kLanguageMode)                            \
229                                                                                \
230   /* Abort */                                                                  \
231   TFC(Abort, Abort, 1)                                                         \
232   TFC(AbortJS, Abort, 1)                                                       \
233                                                                                \
234   /* Built-in functions for Javascript */                                      \
235   /* Special internal builtins */                                              \
236   CPP(EmptyFunction)                                                           \
237   CPP(Illegal)                                                                 \
238   CPP(StrictPoisonPillThrower)                                                 \
239   CPP(UnsupportedThrower)                                                      \
240   TFJ(ReturnReceiver, 0, kReceiver)                                            \
241                                                                                \
242   /* Array */                                                                  \
243   TFC(ArrayConstructor, JSTrampoline, 1)                                       \
244   TFC(ArrayConstructorImpl, ArrayConstructor, 1)                               \
245   TFC(ArrayNoArgumentConstructor_PackedSmi_DontOverride,                       \
246       ArrayNoArgumentConstructor, 1)                                           \
247   TFC(ArrayNoArgumentConstructor_HoleySmi_DontOverride,                        \
248       ArrayNoArgumentConstructor, 1)                                           \
249   TFC(ArrayNoArgumentConstructor_PackedSmi_DisableAllocationSites,             \
250       ArrayNoArgumentConstructor, 1)                                           \
251   TFC(ArrayNoArgumentConstructor_HoleySmi_DisableAllocationSites,              \
252       ArrayNoArgumentConstructor, 1)                                           \
253   TFC(ArrayNoArgumentConstructor_Packed_DisableAllocationSites,                \
254       ArrayNoArgumentConstructor, 1)                                           \
255   TFC(ArrayNoArgumentConstructor_Holey_DisableAllocationSites,                 \
256       ArrayNoArgumentConstructor, 1)                                           \
257   TFC(ArrayNoArgumentConstructor_PackedDouble_DisableAllocationSites,          \
258       ArrayNoArgumentConstructor, 1)                                           \
259   TFC(ArrayNoArgumentConstructor_HoleyDouble_DisableAllocationSites,           \
260       ArrayNoArgumentConstructor, 1)                                           \
261   TFC(ArraySingleArgumentConstructor_PackedSmi_DontOverride,                   \
262       ArraySingleArgumentConstructor, 1)                                       \
263   TFC(ArraySingleArgumentConstructor_HoleySmi_DontOverride,                    \
264       ArraySingleArgumentConstructor, 1)                                       \
265   TFC(ArraySingleArgumentConstructor_PackedSmi_DisableAllocationSites,         \
266       ArraySingleArgumentConstructor, 1)                                       \
267   TFC(ArraySingleArgumentConstructor_HoleySmi_DisableAllocationSites,          \
268       ArraySingleArgumentConstructor, 1)                                       \
269   TFC(ArraySingleArgumentConstructor_Packed_DisableAllocationSites,            \
270       ArraySingleArgumentConstructor, 1)                                       \
271   TFC(ArraySingleArgumentConstructor_Holey_DisableAllocationSites,             \
272       ArraySingleArgumentConstructor, 1)                                       \
273   TFC(ArraySingleArgumentConstructor_PackedDouble_DisableAllocationSites,      \
274       ArraySingleArgumentConstructor, 1)                                       \
275   TFC(ArraySingleArgumentConstructor_HoleyDouble_DisableAllocationSites,       \
276       ArraySingleArgumentConstructor, 1)                                       \
277   TFC(ArrayNArgumentsConstructor, ArrayNArgumentsConstructor, 1)               \
278   ASM(InternalArrayConstructor)                                                \
279   ASM(InternalArrayConstructorImpl)                                            \
280   TFC(InternalArrayNoArgumentConstructor_Packed, ArrayNoArgumentConstructor,   \
281       1)                                                                       \
282   TFC(InternalArrayNoArgumentConstructor_Holey, ArrayNoArgumentConstructor, 1) \
283   TFC(InternalArraySingleArgumentConstructor_Packed,                           \
284       ArraySingleArgumentConstructor, 1)                                       \
285   TFC(InternalArraySingleArgumentConstructor_Holey,                            \
286       ArraySingleArgumentConstructor, 1)                                       \
287   CPP(ArrayConcat)                                                             \
288   /* ES6 #sec-array.isarray */                                                 \
289   TFJ(ArrayIsArray, 1, kReceiver, kArg)                                        \
290   /* ES6 #sec-array.prototype.fill */                                          \
291   CPP(ArrayPrototypeFill)                                                      \
292   /* ES6 #sec-array.from */                                                    \
293   TFJ(ArrayFrom, SharedFunctionInfo::kDontAdaptArgumentsSentinel)              \
294   /* ES6 #sec-array.of */                                                      \
295   TFJ(ArrayOf, SharedFunctionInfo::kDontAdaptArgumentsSentinel)                \
296   /* ES7 #sec-array.prototype.includes */                                      \
297   TFS(ArrayIncludesSmiOrObject, kElements, kSearchElement, kLength,            \
298       kFromIndex)                                                              \
299   TFS(ArrayIncludesPackedDoubles, kElements, kSearchElement, kLength,          \
300       kFromIndex)                                                              \
301   TFS(ArrayIncludesHoleyDoubles, kElements, kSearchElement, kLength,           \
302       kFromIndex)                                                              \
303   TFJ(ArrayIncludes, SharedFunctionInfo::kDontAdaptArgumentsSentinel)          \
304   /* ES6 #sec-array.prototype.indexof */                                       \
305   TFS(ArrayIndexOfSmiOrObject, kElements, kSearchElement, kLength, kFromIndex) \
306   TFS(ArrayIndexOfPackedDoubles, kElements, kSearchElement, kLength,           \
307       kFromIndex)                                                              \
308   TFS(ArrayIndexOfHoleyDoubles, kElements, kSearchElement, kLength,            \
309       kFromIndex)                                                              \
310   TFJ(ArrayIndexOf, SharedFunctionInfo::kDontAdaptArgumentsSentinel)           \
311   /* ES6 #sec-array.prototype.pop */                                           \
312   CPP(ArrayPop)                                                                \
313   TFJ(ArrayPrototypePop, SharedFunctionInfo::kDontAdaptArgumentsSentinel)      \
314   /* ES6 #sec-array.prototype.push */                                          \
315   CPP(ArrayPush)                                                               \
316   TFJ(ArrayPrototypePush, SharedFunctionInfo::kDontAdaptArgumentsSentinel)     \
317   /* ES6 #sec-array.prototype.shift */                                         \
318   CPP(ArrayShift)                                                              \
319   TFJ(ArrayPrototypeShift, SharedFunctionInfo::kDontAdaptArgumentsSentinel)    \
320   /* ES6 #sec-array.prototype.slice */                                         \
321   TFJ(ArrayPrototypeSlice, SharedFunctionInfo::kDontAdaptArgumentsSentinel)    \
322   /* ES6 #sec-array.prototype.splice */                                        \
323   CPP(ArraySplice)                                                             \
324   /* ES6 #sec-array.prototype.unshift */                                       \
325   CPP(ArrayUnshift)                                                            \
326   /* Support for Array.from and other array-copying idioms */                  \
327   TFS(CloneFastJSArray, kSource)                                               \
328   TFS(ExtractFastJSArray, kSource, kBegin, kCount)                             \
329   /* ES6 #sec-array.prototype.every */                                         \
330   TFS(ArrayEveryLoopContinuation, kReceiver, kCallbackFn, kThisArg, kArray,    \
331       kObject, kInitialK, kLength, kTo)                                        \
332   TFJ(ArrayEveryLoopEagerDeoptContinuation, 4, kReceiver, kCallbackFn,         \
333       kThisArg, kInitialK, kLength)                                            \
334   TFJ(ArrayEveryLoopLazyDeoptContinuation, 5, kReceiver, kCallbackFn,          \
335       kThisArg, kInitialK, kLength, kResult)                                   \
336   TFJ(ArrayEvery, SharedFunctionInfo::kDontAdaptArgumentsSentinel)             \
337   /* ES6 #sec-array.prototype.some */                                          \
338   TFS(ArraySomeLoopContinuation, kReceiver, kCallbackFn, kThisArg, kArray,     \
339       kObject, kInitialK, kLength, kTo)                                        \
340   TFJ(ArraySomeLoopEagerDeoptContinuation, 4, kReceiver, kCallbackFn,          \
341       kThisArg, kInitialK, kLength)                                            \
342   TFJ(ArraySomeLoopLazyDeoptContinuation, 5, kReceiver, kCallbackFn, kThisArg, \
343       kInitialK, kLength, kResult)                                             \
344   TFJ(ArraySome, SharedFunctionInfo::kDontAdaptArgumentsSentinel)              \
345   /* ES6 #sec-array.prototype.filter */                                        \
346   TFS(ArrayFilterLoopContinuation, kReceiver, kCallbackFn, kThisArg, kArray,   \
347       kObject, kInitialK, kLength, kTo)                                        \
348   TFJ(ArrayFilter, SharedFunctionInfo::kDontAdaptArgumentsSentinel)            \
349   TFJ(ArrayFilterLoopEagerDeoptContinuation, 6, kReceiver, kCallbackFn,        \
350       kThisArg, kArray, kInitialK, kLength, kTo)                               \
351   TFJ(ArrayFilterLoopLazyDeoptContinuation, 8, kReceiver, kCallbackFn,         \
352       kThisArg, kArray, kInitialK, kLength, kValueK, kTo, kResult)             \
353   /* ES6 #sec-array.prototype.foreach */                                       \
354   TFS(ArrayMapLoopContinuation, kReceiver, kCallbackFn, kThisArg, kArray,      \
355       kObject, kInitialK, kLength, kTo)                                        \
356   TFJ(ArrayMapLoopEagerDeoptContinuation, 5, kReceiver, kCallbackFn, kThisArg, \
357       kArray, kInitialK, kLength)                                              \
358   TFJ(ArrayMapLoopLazyDeoptContinuation, 6, kReceiver, kCallbackFn, kThisArg,  \
359       kArray, kInitialK, kLength, kResult)                                     \
360   TFJ(ArrayMap, SharedFunctionInfo::kDontAdaptArgumentsSentinel)               \
361   /* ES6 #sec-array.prototype.reduce */                                        \
362   TFS(ArrayReduceLoopContinuation, kReceiver, kCallbackFn, kThisArg,           \
363       kAccumulator, kObject, kInitialK, kLength, kTo)                          \
364   TFJ(ArrayReducePreLoopEagerDeoptContinuation, 2, kReceiver, kCallbackFn,     \
365       kLength)                                                                 \
366   TFJ(ArrayReduceLoopEagerDeoptContinuation, 4, kReceiver, kCallbackFn,        \
367       kInitialK, kLength, kAccumulator)                                        \
368   TFJ(ArrayReduceLoopLazyDeoptContinuation, 4, kReceiver, kCallbackFn,         \
369       kInitialK, kLength, kResult)                                             \
370   TFJ(ArrayReduce, SharedFunctionInfo::kDontAdaptArgumentsSentinel)            \
371   /* ES6 #sec-array.prototype.reduceRight */                                   \
372   TFS(ArrayReduceRightLoopContinuation, kReceiver, kCallbackFn, kThisArg,      \
373       kAccumulator, kObject, kInitialK, kLength, kTo)                          \
374   TFJ(ArrayReduceRightPreLoopEagerDeoptContinuation, 2, kReceiver,             \
375       kCallbackFn, kLength)                                                    \
376   TFJ(ArrayReduceRightLoopEagerDeoptContinuation, 4, kReceiver, kCallbackFn,   \
377       kInitialK, kLength, kAccumulator)                                        \
378   TFJ(ArrayReduceRightLoopLazyDeoptContinuation, 4, kReceiver, kCallbackFn,    \
379       kInitialK, kLength, kResult)                                             \
380   TFJ(ArrayReduceRight, SharedFunctionInfo::kDontAdaptArgumentsSentinel)       \
381   /* ES6 #sec-array.prototype.entries */                                       \
382   TFJ(ArrayPrototypeEntries, 0, kReceiver)                                     \
383   /* ES6 #sec-array.prototype.find */                                          \
384   TFS(ArrayFindLoopContinuation, kReceiver, kCallbackFn, kThisArg, kArray,     \
385       kObject, kInitialK, kLength, kTo)                                        \
386   TFJ(ArrayFindLoopEagerDeoptContinuation, 4, kReceiver, kCallbackFn,          \
387       kThisArg, kInitialK, kLength)                                            \
388   TFJ(ArrayFindLoopLazyDeoptContinuation, 5, kReceiver, kCallbackFn, kThisArg, \
389       kInitialK, kLength, kResult)                                             \
390   TFJ(ArrayFindLoopAfterCallbackLazyDeoptContinuation, 6, kReceiver,           \
391       kCallbackFn, kThisArg, kInitialK, kLength, kFoundValue, kIsFound)        \
392   TFJ(ArrayPrototypeFind, SharedFunctionInfo::kDontAdaptArgumentsSentinel)     \
393   /* ES6 #sec-array.prototype.findIndex */                                     \
394   TFS(ArrayFindIndexLoopContinuation, kReceiver, kCallbackFn, kThisArg,        \
395       kArray, kObject, kInitialK, kLength, kTo)                                \
396   TFJ(ArrayFindIndexLoopEagerDeoptContinuation, 4, kReceiver, kCallbackFn,     \
397       kThisArg, kInitialK, kLength)                                            \
398   TFJ(ArrayFindIndexLoopLazyDeoptContinuation, 5, kReceiver, kCallbackFn,      \
399       kThisArg, kInitialK, kLength, kResult)                                   \
400   TFJ(ArrayFindIndexLoopAfterCallbackLazyDeoptContinuation, 6, kReceiver,      \
401       kCallbackFn, kThisArg, kInitialK, kLength, kFoundValue, kIsFound)        \
402   TFJ(ArrayPrototypeFindIndex,                                                 \
403       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
404   /* ES6 #sec-array.prototype.keys */                                          \
405   TFJ(ArrayPrototypeKeys, 0, kReceiver)                                        \
406   /* ES6 #sec-array.prototype.values */                                        \
407   TFJ(ArrayPrototypeValues, 0, kReceiver)                                      \
408   /* ES6 #sec-%arrayiteratorprototype%.next */                                 \
409   TFJ(ArrayIteratorPrototypeNext, 0, kReceiver)                                \
410   /* https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray */          \
411   TFS(FlattenIntoArray, kTarget, kSource, kSourceLength, kStart, kDepth)       \
412   TFS(FlatMapIntoArray, kTarget, kSource, kSourceLength, kStart, kDepth,       \
413       kMapperFunction, kThisArg)                                               \
414   /* https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flat */      \
415   TFJ(ArrayPrototypeFlat, SharedFunctionInfo::kDontAdaptArgumentsSentinel)     \
416   /* https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap */   \
417   TFJ(ArrayPrototypeFlatMap, SharedFunctionInfo::kDontAdaptArgumentsSentinel)  \
418                                                                                \
419   /* ArrayBuffer */                                                            \
420   /* ES #sec-arraybuffer-constructor */                                        \
421   CPP(ArrayBufferConstructor)                                                  \
422   CPP(ArrayBufferConstructor_DoNotInitialize)                                  \
423   CPP(ArrayBufferPrototypeGetByteLength)                                       \
424   CPP(ArrayBufferIsView)                                                       \
425   CPP(ArrayBufferPrototypeSlice)                                               \
426                                                                                \
427   /* AsyncFunction */                                                          \
428   TFJ(AsyncFunctionAwaitCaught, 3, kReceiver, kGenerator, kAwaited,            \
429       kOuterPromise)                                                           \
430   TFJ(AsyncFunctionAwaitCaughtOptimized, 3, kReceiver, kGenerator, kAwaited,   \
431       kOuterPromise)                                                           \
432   TFJ(AsyncFunctionAwaitUncaught, 3, kReceiver, kGenerator, kAwaited,          \
433       kOuterPromise)                                                           \
434   TFJ(AsyncFunctionAwaitUncaughtOptimized, 3, kReceiver, kGenerator, kAwaited, \
435       kOuterPromise)                                                           \
436   TFJ(AsyncFunctionAwaitRejectClosure, 1, kReceiver, kSentError)               \
437   TFJ(AsyncFunctionAwaitResolveClosure, 1, kReceiver, kSentValue)              \
438   TFJ(AsyncFunctionPromiseCreate, 0, kReceiver)                                \
439   TFJ(AsyncFunctionPromiseRelease, 2, kReceiver, kPromise, kCanSuspend)        \
440                                                                                \
441   /* BigInt */                                                                 \
442   CPP(BigIntConstructor)                                                       \
443   CPP(BigIntAsUintN)                                                           \
444   CPP(BigIntAsIntN)                                                            \
445   CPP(BigIntPrototypeToLocaleString)                                           \
446   CPP(BigIntPrototypeToString)                                                 \
447   CPP(BigIntPrototypeValueOf)                                                  \
448                                                                                \
449   /* Boolean */                                                                \
450   /* ES #sec-boolean-constructor */                                            \
451   CPP(BooleanConstructor)                                                      \
452   /* ES6 #sec-boolean.prototype.tostring */                                    \
453   TFJ(BooleanPrototypeToString, 0, kReceiver)                                  \
454   /* ES6 #sec-boolean.prototype.valueof */                                     \
455   TFJ(BooleanPrototypeValueOf, 0, kReceiver)                                   \
456                                                                                \
457   /* CallSite */                                                               \
458   CPP(CallSitePrototypeGetColumnNumber)                                        \
459   CPP(CallSitePrototypeGetEvalOrigin)                                          \
460   CPP(CallSitePrototypeGetFileName)                                            \
461   CPP(CallSitePrototypeGetFunction)                                            \
462   CPP(CallSitePrototypeGetFunctionName)                                        \
463   CPP(CallSitePrototypeGetLineNumber)                                          \
464   CPP(CallSitePrototypeGetMethodName)                                          \
465   CPP(CallSitePrototypeGetPosition)                                            \
466   CPP(CallSitePrototypeGetScriptNameOrSourceURL)                               \
467   CPP(CallSitePrototypeGetThis)                                                \
468   CPP(CallSitePrototypeGetTypeName)                                            \
469   CPP(CallSitePrototypeIsConstructor)                                          \
470   CPP(CallSitePrototypeIsEval)                                                 \
471   CPP(CallSitePrototypeIsNative)                                               \
472   CPP(CallSitePrototypeIsToplevel)                                             \
473   CPP(CallSitePrototypeToString)                                               \
474                                                                                \
475   /* Console */                                                                \
476   CPP(ConsoleDebug)                                                            \
477   CPP(ConsoleError)                                                            \
478   CPP(ConsoleInfo)                                                             \
479   CPP(ConsoleLog)                                                              \
480   CPP(ConsoleWarn)                                                             \
481   CPP(ConsoleDir)                                                              \
482   CPP(ConsoleDirXml)                                                           \
483   CPP(ConsoleTable)                                                            \
484   CPP(ConsoleTrace)                                                            \
485   CPP(ConsoleGroup)                                                            \
486   CPP(ConsoleGroupCollapsed)                                                   \
487   CPP(ConsoleGroupEnd)                                                         \
488   CPP(ConsoleClear)                                                            \
489   CPP(ConsoleCount)                                                            \
490   CPP(ConsoleCountReset)                                                       \
491   CPP(ConsoleAssert)                                                           \
492   TFJ(FastConsoleAssert, SharedFunctionInfo::kDontAdaptArgumentsSentinel)      \
493   CPP(ConsoleProfile)                                                          \
494   CPP(ConsoleProfileEnd)                                                       \
495   CPP(ConsoleTime)                                                             \
496   CPP(ConsoleTimeEnd)                                                          \
497   CPP(ConsoleTimeStamp)                                                        \
498   CPP(ConsoleContext)                                                          \
499                                                                                \
500   /* DataView */                                                               \
501   /* ES #sec-dataview-constructor */                                           \
502   CPP(DataViewConstructor)                                                     \
503                                                                                \
504   /* Date */                                                                   \
505   /* ES #sec-date-constructor */                                               \
506   CPP(DateConstructor)                                                         \
507   /* ES6 #sec-date.prototype.getdate */                                        \
508   TFJ(DatePrototypeGetDate, 0, kReceiver)                                      \
509   /* ES6 #sec-date.prototype.getday */                                         \
510   TFJ(DatePrototypeGetDay, 0, kReceiver)                                       \
511   /* ES6 #sec-date.prototype.getfullyear */                                    \
512   TFJ(DatePrototypeGetFullYear, 0, kReceiver)                                  \
513   /* ES6 #sec-date.prototype.gethours */                                       \
514   TFJ(DatePrototypeGetHours, 0, kReceiver)                                     \
515   /* ES6 #sec-date.prototype.getmilliseconds */                                \
516   TFJ(DatePrototypeGetMilliseconds, 0, kReceiver)                              \
517   /* ES6 #sec-date.prototype.getminutes */                                     \
518   TFJ(DatePrototypeGetMinutes, 0, kReceiver)                                   \
519   /* ES6 #sec-date.prototype.getmonth */                                       \
520   TFJ(DatePrototypeGetMonth, 0, kReceiver)                                     \
521   /* ES6 #sec-date.prototype.getseconds */                                     \
522   TFJ(DatePrototypeGetSeconds, 0, kReceiver)                                   \
523   /* ES6 #sec-date.prototype.gettime */                                        \
524   TFJ(DatePrototypeGetTime, 0, kReceiver)                                      \
525   /* ES6 #sec-date.prototype.gettimezoneoffset */                              \
526   TFJ(DatePrototypeGetTimezoneOffset, 0, kReceiver)                            \
527   /* ES6 #sec-date.prototype.getutcdate */                                     \
528   TFJ(DatePrototypeGetUTCDate, 0, kReceiver)                                   \
529   /* ES6 #sec-date.prototype.getutcday */                                      \
530   TFJ(DatePrototypeGetUTCDay, 0, kReceiver)                                    \
531   /* ES6 #sec-date.prototype.getutcfullyear */                                 \
532   TFJ(DatePrototypeGetUTCFullYear, 0, kReceiver)                               \
533   /* ES6 #sec-date.prototype.getutchours */                                    \
534   TFJ(DatePrototypeGetUTCHours, 0, kReceiver)                                  \
535   /* ES6 #sec-date.prototype.getutcmilliseconds */                             \
536   TFJ(DatePrototypeGetUTCMilliseconds, 0, kReceiver)                           \
537   /* ES6 #sec-date.prototype.getutcminutes */                                  \
538   TFJ(DatePrototypeGetUTCMinutes, 0, kReceiver)                                \
539   /* ES6 #sec-date.prototype.getutcmonth */                                    \
540   TFJ(DatePrototypeGetUTCMonth, 0, kReceiver)                                  \
541   /* ES6 #sec-date.prototype.getutcseconds */                                  \
542   TFJ(DatePrototypeGetUTCSeconds, 0, kReceiver)                                \
543   /* ES6 #sec-date.prototype.valueof */                                        \
544   TFJ(DatePrototypeValueOf, 0, kReceiver)                                      \
545   /* ES6 #sec-date.prototype-@@toprimitive */                                  \
546   TFJ(DatePrototypeToPrimitive, 1, kReceiver, kHint)                           \
547   CPP(DatePrototypeGetYear)                                                    \
548   CPP(DatePrototypeSetYear)                                                    \
549   CPP(DateNow)                                                                 \
550   CPP(DateParse)                                                               \
551   CPP(DatePrototypeSetDate)                                                    \
552   CPP(DatePrototypeSetFullYear)                                                \
553   CPP(DatePrototypeSetHours)                                                   \
554   CPP(DatePrototypeSetMilliseconds)                                            \
555   CPP(DatePrototypeSetMinutes)                                                 \
556   CPP(DatePrototypeSetMonth)                                                   \
557   CPP(DatePrototypeSetSeconds)                                                 \
558   CPP(DatePrototypeSetTime)                                                    \
559   CPP(DatePrototypeSetUTCDate)                                                 \
560   CPP(DatePrototypeSetUTCFullYear)                                             \
561   CPP(DatePrototypeSetUTCHours)                                                \
562   CPP(DatePrototypeSetUTCMilliseconds)                                         \
563   CPP(DatePrototypeSetUTCMinutes)                                              \
564   CPP(DatePrototypeSetUTCMonth)                                                \
565   CPP(DatePrototypeSetUTCSeconds)                                              \
566   CPP(DatePrototypeToDateString)                                               \
567   CPP(DatePrototypeToISOString)                                                \
568   CPP(DatePrototypeToUTCString)                                                \
569   CPP(DatePrototypeToString)                                                   \
570   CPP(DatePrototypeToTimeString)                                               \
571   CPP(DatePrototypeToJson)                                                     \
572   CPP(DateUTC)                                                                 \
573                                                                                \
574   /* Error */                                                                  \
575   CPP(ErrorConstructor)                                                        \
576   CPP(ErrorCaptureStackTrace)                                                  \
577   CPP(ErrorPrototypeToString)                                                  \
578   CPP(MakeError)                                                               \
579   CPP(MakeRangeError)                                                          \
580   CPP(MakeSyntaxError)                                                         \
581   CPP(MakeTypeError)                                                           \
582   CPP(MakeURIError)                                                            \
583                                                                                \
584   /* Function */                                                               \
585   CPP(FunctionConstructor)                                                     \
586   ASM(FunctionPrototypeApply)                                                  \
587   CPP(FunctionPrototypeBind)                                                   \
588   /* ES6 #sec-function.prototype.bind */                                       \
589   TFJ(FastFunctionPrototypeBind,                                               \
590       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
591   ASM(FunctionPrototypeCall)                                                   \
592   /* ES6 #sec-function.prototype-@@hasinstance */                              \
593   TFJ(FunctionPrototypeHasInstance, 1, kReceiver, kV)                          \
594   /* ES6 #sec-function.prototype.tostring */                                   \
595   CPP(FunctionPrototypeToString)                                               \
596                                                                                \
597   /* Belongs to Objects but is a dependency of GeneratorPrototypeResume */     \
598   TFS(CreateIterResultObject, kValue, kDone)                                   \
599                                                                                \
600   /* Generator and Async */                                                    \
601   TFS(CreateGeneratorObject, kClosure, kReceiver)                              \
602   CPP(GeneratorFunctionConstructor)                                            \
603   /* ES6 #sec-generator.prototype.next */                                      \
604   TFJ(GeneratorPrototypeNext, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \
605   /* ES6 #sec-generator.prototype.return */                                    \
606   TFJ(GeneratorPrototypeReturn,                                                \
607       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
608   /* ES6 #sec-generator.prototype.throw */                                     \
609   TFJ(GeneratorPrototypeThrow,                                                 \
610       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
611   CPP(AsyncFunctionConstructor)                                                \
612                                                                                \
613   /* Global object */                                                          \
614   CPP(GlobalDecodeURI)                                                         \
615   CPP(GlobalDecodeURIComponent)                                                \
616   CPP(GlobalEncodeURI)                                                         \
617   CPP(GlobalEncodeURIComponent)                                                \
618   CPP(GlobalEscape)                                                            \
619   CPP(GlobalUnescape)                                                          \
620   CPP(GlobalEval)                                                              \
621   /* ES6 #sec-isfinite-number */                                               \
622   TFJ(GlobalIsFinite, 1, kReceiver, kNumber)                                   \
623   /* ES6 #sec-isnan-number */                                                  \
624   TFJ(GlobalIsNaN, 1, kReceiver, kNumber)                                      \
625                                                                                \
626   /* JSON */                                                                   \
627   CPP(JsonParse)                                                               \
628   CPP(JsonStringify)                                                           \
629                                                                                \
630   /* ICs */                                                                    \
631   TFH(LoadIC, LoadWithVector)                                                  \
632   TFH(LoadIC_Noninlined, LoadWithVector)                                       \
633   TFH(LoadICTrampoline, Load)                                                  \
634   TFH(KeyedLoadIC, LoadWithVector)                                             \
635   TFH(KeyedLoadICTrampoline, Load)                                             \
636   TFH(StoreGlobalIC, StoreGlobalWithVector)                                    \
637   TFH(StoreGlobalICTrampoline, StoreGlobal)                                    \
638   TFH(StoreIC, StoreWithVector)                                                \
639   TFH(StoreICTrampoline, Store)                                                \
640   TFH(KeyedStoreIC, StoreWithVector)                                           \
641   TFH(KeyedStoreICTrampoline, Store)                                           \
642   TFH(StoreInArrayLiteralIC, StoreWithVector)                                  \
643   TFH(LoadGlobalIC, LoadGlobalWithVector)                                      \
644   TFH(LoadGlobalICInsideTypeof, LoadGlobalWithVector)                          \
645   TFH(LoadGlobalICTrampoline, LoadGlobal)                                      \
646   TFH(LoadGlobalICInsideTypeofTrampoline, LoadGlobal)                          \
647   TFH(CloneObjectIC, CloneObjectWithVector)                                    \
648                                                                                \
649   /* Map */                                                                    \
650   TFS(FindOrderedHashMapEntry, kTable, kKey)                                   \
651   TFJ(MapConstructor, SharedFunctionInfo::kDontAdaptArgumentsSentinel)         \
652   TFJ(MapPrototypeSet, 2, kReceiver, kKey, kValue)                             \
653   TFJ(MapPrototypeDelete, 1, kReceiver, kKey)                                  \
654   TFJ(MapPrototypeGet, 1, kReceiver, kKey)                                     \
655   TFJ(MapPrototypeHas, 1, kReceiver, kKey)                                     \
656   CPP(MapPrototypeClear)                                                       \
657   /* ES #sec-map.prototype.entries */                                          \
658   TFJ(MapPrototypeEntries, 0, kReceiver)                                       \
659   /* ES #sec-get-map.prototype.size */                                         \
660   TFJ(MapPrototypeGetSize, 0, kReceiver)                                       \
661   /* ES #sec-map.prototype.forEach */                                          \
662   TFJ(MapPrototypeForEach, SharedFunctionInfo::kDontAdaptArgumentsSentinel)    \
663   /* ES #sec-map.prototype.keys */                                             \
664   TFJ(MapPrototypeKeys, 0, kReceiver)                                          \
665   /* ES #sec-map.prototype.values */                                           \
666   TFJ(MapPrototypeValues, 0, kReceiver)                                        \
667   /* ES #sec-%mapiteratorprototype%.next */                                    \
668   TFJ(MapIteratorPrototypeNext, 0, kReceiver)                                  \
669                                                                                \
670   /* Math */                                                                   \
671   /* ES6 #sec-math.abs */                                                      \
672   TFJ(MathAbs, 1, kReceiver, kX)                                               \
673   /* ES6 #sec-math.acos */                                                     \
674   TFJ(MathAcos, 1, kReceiver, kX)                                              \
675   /* ES6 #sec-math.acosh */                                                    \
676   TFJ(MathAcosh, 1, kReceiver, kX)                                             \
677   /* ES6 #sec-math.asin */                                                     \
678   TFJ(MathAsin, 1, kReceiver, kX)                                              \
679   /* ES6 #sec-math.asinh */                                                    \
680   TFJ(MathAsinh, 1, kReceiver, kX)                                             \
681   /* ES6 #sec-math.atan */                                                     \
682   TFJ(MathAtan, 1, kReceiver, kX)                                              \
683   /* ES6 #sec-math.atanh */                                                    \
684   TFJ(MathAtanh, 1, kReceiver, kX)                                             \
685   /* ES6 #sec-math.atan2 */                                                    \
686   TFJ(MathAtan2, 2, kReceiver, kY, kX)                                         \
687   /* ES6 #sec-math.cbrt */                                                     \
688   TFJ(MathCbrt, 1, kReceiver, kX)                                              \
689   /* ES6 #sec-math.ceil */                                                     \
690   TFJ(MathCeil, 1, kReceiver, kX)                                              \
691   /* ES6 #sec-math.clz32 */                                                    \
692   TFJ(MathClz32, 1, kReceiver, kX)                                             \
693   /* ES6 #sec-math.cos */                                                      \
694   TFJ(MathCos, 1, kReceiver, kX)                                               \
695   /* ES6 #sec-math.cosh */                                                     \
696   TFJ(MathCosh, 1, kReceiver, kX)                                              \
697   /* ES6 #sec-math.exp */                                                      \
698   TFJ(MathExp, 1, kReceiver, kX)                                               \
699   /* ES6 #sec-math.expm1 */                                                    \
700   TFJ(MathExpm1, 1, kReceiver, kX)                                             \
701   /* ES6 #sec-math.floor */                                                    \
702   TFJ(MathFloor, 1, kReceiver, kX)                                             \
703   /* ES6 #sec-math.fround */                                                   \
704   TFJ(MathFround, 1, kReceiver, kX)                                            \
705   /* ES6 #sec-math.hypot */                                                    \
706   CPP(MathHypot)                                                               \
707   /* ES6 #sec-math.imul */                                                     \
708   TFJ(MathImul, 2, kReceiver, kX, kY)                                          \
709   /* ES6 #sec-math.log */                                                      \
710   TFJ(MathLog, 1, kReceiver, kX)                                               \
711   /* ES6 #sec-math.log1p */                                                    \
712   TFJ(MathLog1p, 1, kReceiver, kX)                                             \
713   /* ES6 #sec-math.log10 */                                                    \
714   TFJ(MathLog10, 1, kReceiver, kX)                                             \
715   /* ES6 #sec-math.log2 */                                                     \
716   TFJ(MathLog2, 1, kReceiver, kX)                                              \
717   /* ES6 #sec-math.max */                                                      \
718   TFJ(MathMax, SharedFunctionInfo::kDontAdaptArgumentsSentinel)                \
719   /* ES6 #sec-math.min */                                                      \
720   TFJ(MathMin, SharedFunctionInfo::kDontAdaptArgumentsSentinel)                \
721   /* ES6 #sec-math.pow */                                                      \
722   TFJ(MathPow, 2, kReceiver, kBase, kExponent)                                 \
723   /* ES6 #sec-math.random */                                                   \
724   TFJ(MathRandom, 0, kReceiver)                                                \
725   /* ES6 #sec-math.round */                                                    \
726   TFJ(MathRound, 1, kReceiver, kX)                                             \
727   /* ES6 #sec-math.sign */                                                     \
728   TFJ(MathSign, 1, kReceiver, kX)                                              \
729   /* ES6 #sec-math.sin */                                                      \
730   TFJ(MathSin, 1, kReceiver, kX)                                               \
731   /* ES6 #sec-math.sinh */                                                     \
732   TFJ(MathSinh, 1, kReceiver, kX)                                              \
733   /* ES6 #sec-math.sqrt */                                                     \
734   TFJ(MathTan, 1, kReceiver, kX)                                               \
735   /* ES6 #sec-math.tan */                                                      \
736   TFJ(MathTanh, 1, kReceiver, kX)                                              \
737   /* ES6 #sec-math.tanh */                                                     \
738   TFJ(MathSqrt, 1, kReceiver, kX)                                              \
739   /* ES6 #sec-math.trunc */                                                    \
740   TFJ(MathTrunc, 1, kReceiver, kX)                                             \
741                                                                                \
742   /* Number */                                                                 \
743   TFC(AllocateHeapNumber, AllocateHeapNumber, 1)                               \
744   /* ES #sec-number-constructor */                                             \
745   TFJ(NumberConstructor, SharedFunctionInfo::kDontAdaptArgumentsSentinel)      \
746   /* ES6 #sec-number.isfinite */                                               \
747   TFJ(NumberIsFinite, 1, kReceiver, kNumber)                                   \
748   /* ES6 #sec-number.isinteger */                                              \
749   TFJ(NumberIsInteger, 1, kReceiver, kNumber)                                  \
750   /* ES6 #sec-number.isnan */                                                  \
751   TFJ(NumberIsNaN, 1, kReceiver, kNumber)                                      \
752   /* ES6 #sec-number.issafeinteger */                                          \
753   TFJ(NumberIsSafeInteger, 1, kReceiver, kNumber)                              \
754   /* ES6 #sec-number.parsefloat */                                             \
755   TFJ(NumberParseFloat, 1, kReceiver, kString)                                 \
756   /* ES6 #sec-number.parseint */                                               \
757   TFJ(NumberParseInt, 2, kReceiver, kString, kRadix)                           \
758   TFS(ParseInt, kString, kRadix)                                               \
759   CPP(NumberPrototypeToExponential)                                            \
760   CPP(NumberPrototypeToFixed)                                                  \
761   CPP(NumberPrototypeToLocaleString)                                           \
762   CPP(NumberPrototypeToPrecision)                                              \
763   CPP(NumberPrototypeToString)                                                 \
764   /* ES6 #sec-number.prototype.valueof */                                      \
765   TFJ(NumberPrototypeValueOf, 0, kReceiver)                                    \
766   TFC(Add, BinaryOp, 1)                                                        \
767   TFC(Subtract, BinaryOp, 1)                                                   \
768   TFC(Multiply, BinaryOp, 1)                                                   \
769   TFC(Divide, BinaryOp, 1)                                                     \
770   TFC(Modulus, BinaryOp, 1)                                                    \
771   TFC(Exponentiate, BinaryOp, 1)                                               \
772   TFC(BitwiseAnd, BinaryOp, 1)                                                 \
773   TFC(BitwiseOr, BinaryOp, 1)                                                  \
774   TFC(BitwiseXor, BinaryOp, 1)                                                 \
775   TFC(ShiftLeft, BinaryOp, 1)                                                  \
776   TFC(ShiftRight, BinaryOp, 1)                                                 \
777   TFC(ShiftRightLogical, BinaryOp, 1)                                          \
778   TFC(LessThan, Compare, 1)                                                    \
779   TFC(LessThanOrEqual, Compare, 1)                                             \
780   TFC(GreaterThan, Compare, 1)                                                 \
781   TFC(GreaterThanOrEqual, Compare, 1)                                          \
782   TFC(Equal, Compare, 1)                                                       \
783   TFC(SameValue, Compare, 1)                                                   \
784   TFC(StrictEqual, Compare, 1)                                                 \
785   TFS(BitwiseNot, kValue)                                                      \
786   TFS(Decrement, kValue)                                                       \
787   TFS(Increment, kValue)                                                       \
788   TFS(Negate, kValue)                                                          \
789                                                                                \
790   /* Object */                                                                 \
791   /* ES #sec-object-constructor */                                             \
792   TFJ(ObjectConstructor, SharedFunctionInfo::kDontAdaptArgumentsSentinel)      \
793   TFJ(ObjectAssign, SharedFunctionInfo::kDontAdaptArgumentsSentinel)           \
794   /* ES #sec-object.create */                                                  \
795   TFJ(ObjectCreate, SharedFunctionInfo::kDontAdaptArgumentsSentinel)           \
796   TFS(CreateObjectWithoutProperties, kPrototypeArg)                            \
797   CPP(ObjectDefineGetter)                                                      \
798   CPP(ObjectDefineProperties)                                                  \
799   CPP(ObjectDefineProperty)                                                    \
800   CPP(ObjectDefineSetter)                                                      \
801   TFJ(ObjectEntries, 1, kReceiver, kObject)                                    \
802   CPP(ObjectFreeze)                                                            \
803   TFJ(ObjectGetOwnPropertyDescriptor,                                          \
804       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
805   CPP(ObjectGetOwnPropertyDescriptors)                                         \
806   TFJ(ObjectGetOwnPropertyNames, 1, kReceiver, kObject)                        \
807   CPP(ObjectGetOwnPropertySymbols)                                             \
808   CPP(ObjectGetPrototypeOf)                                                    \
809   CPP(ObjectSetPrototypeOf)                                                    \
810   TFJ(ObjectIs, 2, kReceiver, kLeft, kRight)                                   \
811   CPP(ObjectIsExtensible)                                                      \
812   CPP(ObjectIsFrozen)                                                          \
813   CPP(ObjectIsSealed)                                                          \
814   TFJ(ObjectKeys, 1, kReceiver, kObject)                                       \
815   CPP(ObjectLookupGetter)                                                      \
816   CPP(ObjectLookupSetter)                                                      \
817   CPP(ObjectPreventExtensions)                                                 \
818   /* ES6 #sec-object.prototype.tostring */                                     \
819   TFJ(ObjectPrototypeToString, 0, kReceiver)                                   \
820   /* ES6 #sec-object.prototype.valueof */                                      \
821   TFJ(ObjectPrototypeValueOf, 0, kReceiver)                                    \
822   /* ES6 #sec-object.prototype.hasownproperty */                               \
823   TFJ(ObjectPrototypeHasOwnProperty, 1, kReceiver, kKey)                       \
824   TFJ(ObjectPrototypeIsPrototypeOf, 1, kReceiver, kValue)                      \
825   CPP(ObjectPrototypePropertyIsEnumerable)                                     \
826   CPP(ObjectPrototypeGetProto)                                                 \
827   CPP(ObjectPrototypeSetProto)                                                 \
828   /* ES #sec-object.prototype.tolocalestring */                                \
829   TFJ(ObjectPrototypeToLocaleString, 0, kReceiver)                             \
830   CPP(ObjectSeal)                                                              \
831   TFJ(ObjectValues, 1, kReceiver, kObject)                                     \
832                                                                                \
833   /* instanceof */                                                             \
834   TFC(OrdinaryHasInstance, Compare, 1)                                         \
835   TFC(InstanceOf, Compare, 1)                                                  \
836                                                                                \
837   /* for-in */                                                                 \
838   TFS(ForInEnumerate, kReceiver)                                               \
839   TFS(ForInFilter, kKey, kObject)                                              \
840                                                                                \
841   /* Promise */                                                                \
842   /* ES #sec-fulfillpromise */                                                 \
843   TFS(FulfillPromise, kPromise, kValue)                                        \
844   /* ES #sec-rejectpromise */                                                  \
845   TFS(RejectPromise, kPromise, kReason, kDebugEvent)                           \
846   /* ES #sec-promise-resolve-functions */                                      \
847   /* Starting at step 6 of "Promise Resolve Functions" */                      \
848   TFS(ResolvePromise, kPromise, kResolution)                                   \
849   /* ES #sec-promise-reject-functions */                                       \
850   TFJ(PromiseCapabilityDefaultReject, 1, kReceiver, kReason)                   \
851   /* ES #sec-promise-resolve-functions */                                      \
852   TFJ(PromiseCapabilityDefaultResolve, 1, kReceiver, kResolution)              \
853   /* ES6 #sec-getcapabilitiesexecutor-functions */                             \
854   TFJ(PromiseGetCapabilitiesExecutor, 2, kReceiver, kResolve, kReject)         \
855   /* ES6 #sec-newpromisecapability */                                          \
856   TFS(NewPromiseCapability, kConstructor, kDebugEvent)                         \
857   TFJ(PromiseConstructorLazyDeoptContinuation, 4, kReceiver, kPromise,         \
858       kReject, kException, kResult)                                            \
859   /* ES6 #sec-promise-executor */                                              \
860   TFJ(PromiseConstructor, 1, kReceiver, kExecutor)                             \
861   CPP(IsPromise)                                                               \
862   /* ES #sec-promise.prototype.then */                                         \
863   TFJ(PromisePrototypeThen, 2, kReceiver, kOnFulfilled, kOnRejected)           \
864   /* ES #sec-performpromisethen */                                             \
865   TFS(PerformPromiseThen, kPromise, kOnFulfilled, kOnRejected, kResultPromise) \
866   /* ES #sec-promise.prototype.catch */                                        \
867   TFJ(PromisePrototypeCatch, 1, kReceiver, kOnRejected)                        \
868   /* ES #sec-promisereactionjob */                                             \
869   TFS(PromiseRejectReactionJob, kReason, kHandler, kPromiseOrCapability)       \
870   TFS(PromiseFulfillReactionJob, kValue, kHandler, kPromiseOrCapability)       \
871   /* ES #sec-promiseresolvethenablejob */                                      \
872   TFS(PromiseResolveThenableJob, kPromiseToResolve, kThenable, kThen)          \
873   /* ES #sec-promise.resolve */                                                \
874   TFJ(PromiseResolveTrampoline, 1, kReceiver, kValue)                          \
875   /* ES #sec-promise-resolve */                                                \
876   TFS(PromiseResolve, kConstructor, kValue)                                    \
877   /* ES #sec-promise.reject */                                                 \
878   TFJ(PromiseReject, 1, kReceiver, kReason)                                    \
879   TFJ(PromisePrototypeFinally, 1, kReceiver, kOnFinally)                       \
880   TFJ(PromiseThenFinally, 1, kReceiver, kValue)                                \
881   TFJ(PromiseCatchFinally, 1, kReceiver, kReason)                              \
882   TFJ(PromiseValueThunkFinally, 0, kReceiver)                                  \
883   TFJ(PromiseThrowerFinally, 0, kReceiver)                                     \
884   /* ES #sec-promise.all */                                                    \
885   TFJ(PromiseAll, 1, kReceiver, kIterable)                                     \
886   TFJ(PromiseAllResolveElementClosure, 1, kReceiver, kValue)                   \
887   /* ES #sec-promise.race */                                                   \
888   TFJ(PromiseRace, 1, kReceiver, kIterable)                                    \
889   /* V8 Extras: v8.createPromise(parent) */                                    \
890   TFJ(PromiseInternalConstructor, 1, kReceiver, kParent)                       \
891   /* V8 Extras: v8.rejectPromise(promise, reason) */                           \
892   TFJ(PromiseInternalReject, 2, kReceiver, kPromise, kReason)                  \
893   /* V8 Extras: v8.resolvePromise(promise, resolution) */                      \
894   TFJ(PromiseInternalResolve, 2, kReceiver, kPromise, kResolution)             \
895                                                                                \
896   /* Proxy */                                                                  \
897   TFJ(ProxyConstructor, 2, kReceiver, kTarget, kHandler)                       \
898   TFJ(ProxyRevocable, 2, kReceiver, kTarget, kHandler)                         \
899   TFJ(ProxyRevoke, 0, kReceiver)                                               \
900   TFS(ProxyGetProperty, kProxy, kName, kReceiverValue, kOnNonExistent)         \
901   TFS(ProxyHasProperty, kProxy, kName)                                         \
902   TFS(ProxySetProperty, kProxy, kName, kValue, kReceiverValue, kLanguageMode)  \
903                                                                                \
904   /* Reflect */                                                                \
905   ASM(ReflectApply)                                                            \
906   ASM(ReflectConstruct)                                                        \
907   CPP(ReflectDefineProperty)                                                   \
908   CPP(ReflectDeleteProperty)                                                   \
909   CPP(ReflectGet)                                                              \
910   CPP(ReflectGetOwnPropertyDescriptor)                                         \
911   CPP(ReflectGetPrototypeOf)                                                   \
912   TFJ(ReflectHas, 2, kReceiver, kTarget, kKey)                                 \
913   CPP(ReflectIsExtensible)                                                     \
914   CPP(ReflectOwnKeys)                                                          \
915   CPP(ReflectPreventExtensions)                                                \
916   CPP(ReflectSet)                                                              \
917   CPP(ReflectSetPrototypeOf)                                                   \
918                                                                                \
919   /* RegExp */                                                                 \
920   CPP(RegExpCapture1Getter)                                                    \
921   CPP(RegExpCapture2Getter)                                                    \
922   CPP(RegExpCapture3Getter)                                                    \
923   CPP(RegExpCapture4Getter)                                                    \
924   CPP(RegExpCapture5Getter)                                                    \
925   CPP(RegExpCapture6Getter)                                                    \
926   CPP(RegExpCapture7Getter)                                                    \
927   CPP(RegExpCapture8Getter)                                                    \
928   CPP(RegExpCapture9Getter)                                                    \
929   /* ES #sec-regexp-pattern-flags */                                           \
930   TFJ(RegExpConstructor, 2, kReceiver, kPattern, kFlags)                       \
931   TFJ(RegExpInternalMatch, 2, kReceiver, kRegExp, kString)                     \
932   CPP(RegExpInputGetter)                                                       \
933   CPP(RegExpInputSetter)                                                       \
934   CPP(RegExpLastMatchGetter)                                                   \
935   CPP(RegExpLastParenGetter)                                                   \
936   CPP(RegExpLeftContextGetter)                                                 \
937   /* ES #sec-regexp.prototype.compile */                                       \
938   TFJ(RegExpPrototypeCompile, 2, kReceiver, kPattern, kFlags)                  \
939   /* ES #sec-regexp.prototype.exec */                                          \
940   TFJ(RegExpPrototypeExec, 1, kReceiver, kString)                              \
941   /* ES #sec-get-regexp.prototype.dotAll */                                    \
942   TFJ(RegExpPrototypeDotAllGetter, 0, kReceiver)                               \
943   /* ES #sec-get-regexp.prototype.flags */                                     \
944   TFJ(RegExpPrototypeFlagsGetter, 0, kReceiver)                                \
945   /* ES #sec-get-regexp.prototype.global */                                    \
946   TFJ(RegExpPrototypeGlobalGetter, 0, kReceiver)                               \
947   /* ES #sec-get-regexp.prototype.ignorecase */                                \
948   TFJ(RegExpPrototypeIgnoreCaseGetter, 0, kReceiver)                           \
949   /* ES #sec-regexp.prototype-@@match */                                       \
950   TFJ(RegExpPrototypeMatch, 1, kReceiver, kString)                             \
951   /* https://tc39.github.io/proposal-string-matchall/ */                       \
952   TFJ(RegExpPrototypeMatchAll, 1, kReceiver, kString)                          \
953   /* ES #sec-get-regexp.prototype.multiline */                                 \
954   TFJ(RegExpPrototypeMultilineGetter, 0, kReceiver)                            \
955   /* ES #sec-regexp.prototype-@@search */                                      \
956   TFJ(RegExpPrototypeSearch, 1, kReceiver, kString)                            \
957   /* ES #sec-get-regexp.prototype.source */                                    \
958   TFJ(RegExpPrototypeSourceGetter, 0, kReceiver)                               \
959   /* ES #sec-get-regexp.prototype.sticky */                                    \
960   TFJ(RegExpPrototypeStickyGetter, 0, kReceiver)                               \
961   /* ES #sec-regexp.prototype.test */                                          \
962   TFJ(RegExpPrototypeTest, 1, kReceiver, kString)                              \
963   TFS(RegExpPrototypeTestFast, kReceiver, kString)                             \
964   CPP(RegExpPrototypeToString)                                                 \
965   /* ES #sec-get-regexp.prototype.unicode */                                   \
966   TFJ(RegExpPrototypeUnicodeGetter, 0, kReceiver)                              \
967   CPP(RegExpRightContextGetter)                                                \
968                                                                                \
969   /* ES #sec-regexp.prototype-@@replace */                                     \
970   TFJ(RegExpPrototypeReplace, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \
971   /* ES #sec-regexp.prototype-@@split */                                       \
972   TFJ(RegExpPrototypeSplit, SharedFunctionInfo::kDontAdaptArgumentsSentinel)   \
973   /* RegExp helpers */                                                         \
974   TFS(RegExpExecAtom, kRegExp, kString, kLastIndex, kMatchInfo)                \
975   TFS(RegExpExecInternal, kRegExp, kString, kLastIndex, kMatchInfo)            \
976   TFS(RegExpMatchFast, kReceiver, kPattern)                                    \
977   TFS(RegExpPrototypeExecSlow, kReceiver, kString)                             \
978   TFS(RegExpReplace, kRegExp, kString, kReplaceValue)                          \
979   TFS(RegExpSearchFast, kReceiver, kPattern)                                   \
980   TFS(RegExpSplit, kRegExp, kString, kLimit)                                   \
981                                                                                \
982   /* RegExp String Iterator */                                                 \
983   /* https://tc39.github.io/proposal-string-matchall/ */                       \
984   TFJ(RegExpStringIteratorPrototypeNext, 0, kReceiver)                         \
985                                                                                \
986   /* Set */                                                                    \
987   TFJ(SetConstructor, SharedFunctionInfo::kDontAdaptArgumentsSentinel)         \
988   TFJ(SetPrototypeHas, 1, kReceiver, kKey)                                     \
989   TFJ(SetPrototypeAdd, 1, kReceiver, kKey)                                     \
990   TFJ(SetPrototypeDelete, 1, kReceiver, kKey)                                  \
991   CPP(SetPrototypeClear)                                                       \
992   /* ES #sec-set.prototype.entries */                                          \
993   TFJ(SetPrototypeEntries, 0, kReceiver)                                       \
994   /* ES #sec-get-set.prototype.size */                                         \
995   TFJ(SetPrototypeGetSize, 0, kReceiver)                                       \
996   /* ES #sec-set.prototype.foreach */                                          \
997   TFJ(SetPrototypeForEach, SharedFunctionInfo::kDontAdaptArgumentsSentinel)    \
998   /* ES #sec-set.prototype.values */                                           \
999   TFJ(SetPrototypeValues, 0, kReceiver)                                        \
1000   /* ES #sec-%setiteratorprototype%.next */                                    \
1001   TFJ(SetIteratorPrototypeNext, 0, kReceiver)                                  \
1002                                                                                \
1003   /* SharedArrayBuffer */                                                      \
1004   CPP(SharedArrayBufferPrototypeGetByteLength)                                 \
1005   CPP(SharedArrayBufferPrototypeSlice)                                         \
1006   TFJ(AtomicsLoad, 2, kReceiver, kArray, kIndex)                               \
1007   TFJ(AtomicsStore, 3, kReceiver, kArray, kIndex, kValue)                      \
1008   TFJ(AtomicsExchange, 3, kReceiver, kArray, kIndex, kValue)                   \
1009   TFJ(AtomicsCompareExchange, 4, kReceiver, kArray, kIndex, kOldValue,         \
1010       kNewValue)                                                               \
1011   TFJ(AtomicsAdd, 3, kReceiver, kArray, kIndex, kValue)                        \
1012   TFJ(AtomicsSub, 3, kReceiver, kArray, kIndex, kValue)                        \
1013   TFJ(AtomicsAnd, 3, kReceiver, kArray, kIndex, kValue)                        \
1014   TFJ(AtomicsOr, 3, kReceiver, kArray, kIndex, kValue)                         \
1015   TFJ(AtomicsXor, 3, kReceiver, kArray, kIndex, kValue)                        \
1016   CPP(AtomicsIsLockFree)                                                       \
1017   CPP(AtomicsWait)                                                             \
1018   CPP(AtomicsWake)                                                             \
1019                                                                                \
1020   /* String */                                                                 \
1021   /* ES #sec-string-constructor */                                             \
1022   TFJ(StringConstructor, SharedFunctionInfo::kDontAdaptArgumentsSentinel)      \
1023   /* ES #sec-string.fromcodepoint */                                           \
1024   CPP(StringFromCodePoint)                                                     \
1025   /* ES6 #sec-string.fromcharcode */                                           \
1026   TFJ(StringFromCharCode, SharedFunctionInfo::kDontAdaptArgumentsSentinel)     \
1027   /* ES6 #sec-string.prototype.anchor */                                       \
1028   TFJ(StringPrototypeAnchor, 1, kReceiver, kValue)                             \
1029   /* ES6 #sec-string.prototype.big */                                          \
1030   TFJ(StringPrototypeBig, 0, kReceiver)                                        \
1031   /* ES6 #sec-string.prototype.blink */                                        \
1032   TFJ(StringPrototypeBlink, 0, kReceiver)                                      \
1033   /* ES6 #sec-string.prototype.bold */                                         \
1034   TFJ(StringPrototypeBold, 0, kReceiver)                                       \
1035   /* ES6 #sec-string.prototype.charat */                                       \
1036   TFJ(StringPrototypeCharAt, 1, kReceiver, kPosition)                          \
1037   /* ES6 #sec-string.prototype.charcodeat */                                   \
1038   TFJ(StringPrototypeCharCodeAt, 1, kReceiver, kPosition)                      \
1039   /* ES6 #sec-string.prototype.codepointat */                                  \
1040   TFJ(StringPrototypeCodePointAt, 1, kReceiver, kPosition)                     \
1041   /* ES6 #sec-string.prototype.concat */                                       \
1042   TFJ(StringPrototypeConcat, SharedFunctionInfo::kDontAdaptArgumentsSentinel)  \
1043   /* ES6 #sec-string.prototype.endswith */                                     \
1044   CPP(StringPrototypeEndsWith)                                                 \
1045   /* ES6 #sec-string.prototype.fontcolor */                                    \
1046   TFJ(StringPrototypeFontcolor, 1, kReceiver, kValue)                          \
1047   /* ES6 #sec-string.prototype.fontsize */                                     \
1048   TFJ(StringPrototypeFontsize, 1, kReceiver, kValue)                           \
1049   /* ES6 #sec-string.prototype.fixed */                                        \
1050   TFJ(StringPrototypeFixed, 0, kReceiver)                                      \
1051   /* ES6 #sec-string.prototype.includes */                                     \
1052   TFJ(StringPrototypeIncludes,                                                 \
1053       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1054   /* ES6 #sec-string.prototype.indexof */                                      \
1055   TFJ(StringPrototypeIndexOf, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \
1056   /* ES6 #sec-string.prototype.italics */                                      \
1057   TFJ(StringPrototypeItalics, 0, kReceiver)                                    \
1058   /* ES6 #sec-string.prototype.lastindexof */                                  \
1059   CPP(StringPrototypeLastIndexOf)                                              \
1060   /* ES6 #sec-string.prototype.link */                                         \
1061   TFJ(StringPrototypeLink, 1, kReceiver, kValue)                               \
1062   /* ES6 #sec-string.prototype.match */                                        \
1063   TFJ(StringPrototypeMatch, 1, kReceiver, kRegexp)                             \
1064   /* ES #sec-string.prototype.matchAll */                                      \
1065   TFJ(StringPrototypeMatchAll, 1, kReceiver, kRegexp)                          \
1066   /* ES6 #sec-string.prototype.localecompare */                                \
1067   CPP(StringPrototypeLocaleCompare)                                            \
1068   /* ES6 #sec-string.prototype.padEnd */                                       \
1069   TFJ(StringPrototypePadEnd, SharedFunctionInfo::kDontAdaptArgumentsSentinel)  \
1070   /* ES6 #sec-string.prototype.padStart */                                     \
1071   TFJ(StringPrototypePadStart,                                                 \
1072       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1073   /* ES6 #sec-string.prototype.repeat */                                       \
1074   TFJ(StringPrototypeRepeat, 1, kReceiver, kCount)                             \
1075   /* ES6 #sec-string.prototype.replace */                                      \
1076   TFJ(StringPrototypeReplace, 2, kReceiver, kSearch, kReplace)                 \
1077   /* ES6 #sec-string.prototype.search */                                       \
1078   TFJ(StringPrototypeSearch, 1, kReceiver, kRegexp)                            \
1079   /* ES6 #sec-string.prototype.slice */                                        \
1080   TFJ(StringPrototypeSlice, SharedFunctionInfo::kDontAdaptArgumentsSentinel)   \
1081   /* ES6 #sec-string.prototype.small */                                        \
1082   TFJ(StringPrototypeSmall, 0, kReceiver)                                      \
1083   /* ES6 #sec-string.prototype.split */                                        \
1084   TFJ(StringPrototypeSplit, SharedFunctionInfo::kDontAdaptArgumentsSentinel)   \
1085   /* ES6 #sec-string.prototype.strike */                                       \
1086   TFJ(StringPrototypeStrike, 0, kReceiver)                                     \
1087   /* ES6 #sec-string.prototype.sub */                                          \
1088   TFJ(StringPrototypeSub, 0, kReceiver)                                        \
1089   /* ES6 #sec-string.prototype.substr */                                       \
1090   TFJ(StringPrototypeSubstr, SharedFunctionInfo::kDontAdaptArgumentsSentinel)  \
1091   /* ES6 #sec-string.prototype.substring */                                    \
1092   TFJ(StringPrototypeSubstring,                                                \
1093       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1094   /* ES6 #sec-string.prototype.sup */                                          \
1095   TFJ(StringPrototypeSup, 0, kReceiver)                                        \
1096   /* ES6 #sec-string.prototype.startswith */                                   \
1097   CPP(StringPrototypeStartsWith)                                               \
1098   /* ES6 #sec-string.prototype.tostring */                                     \
1099   TFJ(StringPrototypeToString, 0, kReceiver)                                   \
1100   TFJ(StringPrototypeTrim, SharedFunctionInfo::kDontAdaptArgumentsSentinel)    \
1101   TFJ(StringPrototypeTrimEnd, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \
1102   TFJ(StringPrototypeTrimStart,                                                \
1103       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1104   /* ES6 #sec-string.prototype.valueof */                                      \
1105   TFJ(StringPrototypeValueOf, 0, kReceiver)                                    \
1106   /* ES6 #sec-string.raw */                                                    \
1107   CPP(StringRaw)                                                               \
1108   /* ES6 #sec-string.prototype-@@iterator */                                   \
1109   TFJ(StringPrototypeIterator, 0, kReceiver)                                   \
1110                                                                                \
1111   /* StringIterator */                                                         \
1112   /* ES6 #sec-%stringiteratorprototype%.next */                                \
1113   TFJ(StringIteratorPrototypeNext, 0, kReceiver)                               \
1114                                                                                \
1115   /* Symbol */                                                                 \
1116   /* ES #sec-symbol-constructor */                                             \
1117   CPP(SymbolConstructor)                                                       \
1118   /* ES6 #sec-symbol.for */                                                    \
1119   CPP(SymbolFor)                                                               \
1120   /* ES6 #sec-symbol.keyfor */                                                 \
1121   CPP(SymbolKeyFor)                                                            \
1122   /* ES #sec-symbol.prototype.description */                                   \
1123   TFJ(SymbolPrototypeDescriptionGetter, 0, kReceiver)                          \
1124   /* ES6 #sec-symbol.prototype-@@toprimitive */                                \
1125   TFJ(SymbolPrototypeToPrimitive, 1, kReceiver, kHint)                         \
1126   /* ES6 #sec-symbol.prototype.tostring */                                     \
1127   TFJ(SymbolPrototypeToString, 0, kReceiver)                                   \
1128   /* ES6 #sec-symbol.prototype.valueof */                                      \
1129   TFJ(SymbolPrototypeValueOf, 0, kReceiver)                                    \
1130                                                                                \
1131   /* TypedArray */                                                             \
1132   TFS(IterableToList, kIterable, kIteratorFn)                                  \
1133   TFS(TypedArrayInitialize, kHolder, kLength, kElementSize, kInitialize,       \
1134       kBufferConstructor)                                                      \
1135   TFS(TypedArrayInitializeWithBuffer, kHolder, kLength, kBuffer, kElementSize, \
1136       kByteOffset)                                                             \
1137   /* ES #sec-typedarray-constructors */                                        \
1138   TFS(CreateTypedArray, kTarget, kNewTarget, kArg1, kArg2, kArg3)              \
1139   TFJ(TypedArrayBaseConstructor, 0, kReceiver)                                 \
1140   TFJ(GenericConstructorLazyDeoptContinuation, 1, kReceiver, kResult)          \
1141   TFJ(TypedArrayConstructor, SharedFunctionInfo::kDontAdaptArgumentsSentinel)  \
1142   CPP(TypedArrayPrototypeBuffer)                                               \
1143   /* ES6 #sec-get-%typedarray%.prototype.bytelength */                         \
1144   TFJ(TypedArrayPrototypeByteLength, 0, kReceiver)                             \
1145   /* ES6 #sec-get-%typedarray%.prototype.byteoffset */                         \
1146   TFJ(TypedArrayPrototypeByteOffset, 0, kReceiver)                             \
1147   /* ES6 #sec-get-%typedarray%.prototype.length */                             \
1148   TFJ(TypedArrayPrototypeLength, 0, kReceiver)                                 \
1149   /* ES6 #sec-%typedarray%.prototype.entries */                                \
1150   TFJ(TypedArrayPrototypeEntries, 0, kReceiver)                                \
1151   /* ES6 #sec-%typedarray%.prototype.keys */                                   \
1152   TFJ(TypedArrayPrototypeKeys, 0, kReceiver)                                   \
1153   /* ES6 #sec-%typedarray%.prototype.values */                                 \
1154   TFJ(TypedArrayPrototypeValues, 0, kReceiver)                                 \
1155   /* ES6 #sec-%typedarray%.prototype.copywithin */                             \
1156   CPP(TypedArrayPrototypeCopyWithin)                                           \
1157   /* ES6 #sec-%typedarray%.prototype.fill */                                   \
1158   CPP(TypedArrayPrototypeFill)                                                 \
1159   /* ES6 #sec-%typedarray%.prototype.filter */                                 \
1160   TFJ(TypedArrayPrototypeFilter,                                               \
1161       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1162   /* ES6 %TypedArray%.prototype.find */                                        \
1163   TFJ(TypedArrayPrototypeFind,                                                 \
1164       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1165   /* ES6 %TypedArray%.prototype.findIndex */                                   \
1166   TFJ(TypedArrayPrototypeFindIndex,                                            \
1167       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1168   /* ES7 #sec-%typedarray%.prototype.includes */                               \
1169   CPP(TypedArrayPrototypeIncludes)                                             \
1170   /* ES6 #sec-%typedarray%.prototype.indexof */                                \
1171   CPP(TypedArrayPrototypeIndexOf)                                              \
1172   /* ES6 #sec-%typedarray%.prototype.lastindexof */                            \
1173   CPP(TypedArrayPrototypeLastIndexOf)                                          \
1174   /* ES6 #sec-%typedarray%.prototype.reverse */                                \
1175   CPP(TypedArrayPrototypeReverse)                                              \
1176   /* ES6 %TypedArray%.prototype.set */                                         \
1177   TFJ(TypedArrayPrototypeSet, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \
1178   /* ES6 #sec-%typedarray%.prototype.slice */                                  \
1179   TFJ(TypedArrayPrototypeSlice,                                                \
1180       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1181   /* ES6 %TypedArray%.prototype.subarray */                                    \
1182   TFJ(TypedArrayPrototypeSubArray,                                             \
1183       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1184   /* ES6 #sec-get-%typedarray%.prototype-@@tostringtag */                      \
1185   TFJ(TypedArrayPrototypeToStringTag, 0, kReceiver)                            \
1186   /* ES6 %TypedArray%.prototype.every */                                       \
1187   TFJ(TypedArrayPrototypeEvery,                                                \
1188       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1189   /* ES6 %TypedArray%.prototype.some */                                        \
1190   TFJ(TypedArrayPrototypeSome,                                                 \
1191       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1192   /* ES6 %TypedArray%.prototype.reduce */                                      \
1193   TFJ(TypedArrayPrototypeReduce,                                               \
1194       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1195   /* ES6 %TypedArray%.prototype.reduceRight */                                 \
1196   TFJ(TypedArrayPrototypeReduceRight,                                          \
1197       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1198   /* ES6 %TypedArray%.prototype.map */                                         \
1199   TFJ(TypedArrayPrototypeMap, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \
1200   /* ES6 %TypedArray%.prototype.forEach */                                     \
1201   TFJ(TypedArrayPrototypeForEach,                                              \
1202       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1203   /* ES6 %TypedArray%.of */                                                    \
1204   TFJ(TypedArrayOf, SharedFunctionInfo::kDontAdaptArgumentsSentinel)           \
1205   /* ES6 %TypedArray%.from */                                                  \
1206   TFJ(TypedArrayFrom, SharedFunctionInfo::kDontAdaptArgumentsSentinel)         \
1207                                                                                \
1208   /* Wasm */                                                                   \
1209   ASM(WasmCompileLazy)                                                         \
1210   TFC(WasmAllocateHeapNumber, AllocateHeapNumber, 1)                           \
1211   TFC(WasmArgumentsAdaptor, ArgumentAdaptor, 1)                                \
1212   TFC(WasmCallJavaScript, CallTrampoline, 1)                                   \
1213   TFC(WasmGrowMemory, WasmGrowMemory, 1)                                       \
1214   TFC(WasmStackGuard, NoContext, 1)                                            \
1215   TFC(WasmToNumber, TypeConversion, 1)                                         \
1216   TFS(ThrowWasmTrapUnreachable)                                                \
1217   TFS(ThrowWasmTrapMemOutOfBounds)                                             \
1218   TFS(ThrowWasmTrapUnalignedAccess)                                            \
1219   TFS(ThrowWasmTrapDivByZero)                                                  \
1220   TFS(ThrowWasmTrapDivUnrepresentable)                                         \
1221   TFS(ThrowWasmTrapRemByZero)                                                  \
1222   TFS(ThrowWasmTrapFloatUnrepresentable)                                       \
1223   TFS(ThrowWasmTrapFuncInvalid)                                                \
1224   TFS(ThrowWasmTrapFuncSigMismatch)                                            \
1225                                                                                \
1226   /* WeakMap */                                                                \
1227   TFJ(WeakMapConstructor, SharedFunctionInfo::kDontAdaptArgumentsSentinel)     \
1228   TFS(WeakMapLookupHashIndex, kTable, kKey)                                    \
1229   TFJ(WeakMapGet, 1, kReceiver, kKey)                                          \
1230   TFJ(WeakMapHas, 1, kReceiver, kKey)                                          \
1231   TFJ(WeakMapPrototypeSet, 2, kReceiver, kKey, kValue)                         \
1232   TFJ(WeakMapPrototypeDelete, 1, kReceiver, kKey)                              \
1233                                                                                \
1234   /* WeakSet */                                                                \
1235   TFJ(WeakSetConstructor, SharedFunctionInfo::kDontAdaptArgumentsSentinel)     \
1236   TFJ(WeakSetHas, 1, kReceiver, kKey)                                          \
1237   TFJ(WeakSetPrototypeAdd, 1, kReceiver, kValue)                               \
1238   TFJ(WeakSetPrototypeDelete, 1, kReceiver, kValue)                            \
1239                                                                                \
1240   /* WeakSet / WeakMap Helpers */                                              \
1241   TFS(WeakCollectionDelete, kCollection, kKey)                                 \
1242   TFS(WeakCollectionSet, kCollection, kKey, kValue)                            \
1243                                                                                \
1244   /* AsyncGenerator */                                                         \
1245                                                                                \
1246   TFS(AsyncGeneratorResolve, kGenerator, kValue, kDone)                        \
1247   TFS(AsyncGeneratorReject, kGenerator, kValue)                                \
1248   TFS(AsyncGeneratorYield, kGenerator, kValue, kIsCaught)                      \
1249   TFS(AsyncGeneratorReturn, kGenerator, kValue, kIsCaught)                     \
1250   TFS(AsyncGeneratorResumeNext, kGenerator)                                    \
1251                                                                                \
1252   /* AsyncGeneratorFunction( p1, p2, ... pn, body ) */                         \
1253   /* proposal-async-iteration/#sec-asyncgeneratorfunction-constructor */       \
1254   CPP(AsyncGeneratorFunctionConstructor)                                       \
1255   /* AsyncGenerator.prototype.next ( value ) */                                \
1256   /* proposal-async-iteration/#sec-asyncgenerator-prototype-next */            \
1257   TFJ(AsyncGeneratorPrototypeNext,                                             \
1258       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1259   /* AsyncGenerator.prototype.return ( value ) */                              \
1260   /* proposal-async-iteration/#sec-asyncgenerator-prototype-return */          \
1261   TFJ(AsyncGeneratorPrototypeReturn,                                           \
1262       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1263   /* AsyncGenerator.prototype.throw ( exception ) */                           \
1264   /* proposal-async-iteration/#sec-asyncgenerator-prototype-throw */           \
1265   TFJ(AsyncGeneratorPrototypeThrow,                                            \
1266       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                         \
1267                                                                                \
1268   /* Await (proposal-async-iteration/#await), with resume behaviour */         \
1269   /* specific to Async Generators. Internal / Not exposed to JS code. */       \
1270   TFJ(AsyncGeneratorAwaitCaught, 2, kReceiver, kGenerator, kAwaited)           \
1271   TFJ(AsyncGeneratorAwaitUncaught, 2, kReceiver, kGenerator, kAwaited)         \
1272   TFJ(AsyncGeneratorAwaitResolveClosure, 1, kReceiver, kValue)                 \
1273   TFJ(AsyncGeneratorAwaitRejectClosure, 1, kReceiver, kValue)                  \
1274   TFJ(AsyncGeneratorYieldResolveClosure, 1, kReceiver, kValue)                 \
1275   TFJ(AsyncGeneratorReturnClosedResolveClosure, 1, kReceiver, kValue)          \
1276   TFJ(AsyncGeneratorReturnClosedRejectClosure, 1, kReceiver, kValue)           \
1277   TFJ(AsyncGeneratorReturnResolveClosure, 1, kReceiver, kValue)                \
1278                                                                                \
1279   /* Async-from-Sync Iterator */                                               \
1280                                                                                \
1281   /* %AsyncFromSyncIteratorPrototype% */                                       \
1282   /* See tc39.github.io/proposal-async-iteration/ */                           \
1283   /* #sec-%asyncfromsynciteratorprototype%-object) */                          \
1284   TFJ(AsyncFromSyncIteratorPrototypeNext, 1, kReceiver, kValue)                \
1285   TFJ(AsyncFromSyncIteratorPrototypeNextOptimized, 1, kReceiver, kValue)       \
1286   /* #sec-%asyncfromsynciteratorprototype%.throw */                            \
1287   TFJ(AsyncFromSyncIteratorPrototypeThrow, 1, kReceiver, kReason)              \
1288   TFJ(AsyncFromSyncIteratorPrototypeThrowOptimized, 1, kReceiver, kReason)     \
1289   /* #sec-%asyncfromsynciteratorprototype%.return */                           \
1290   TFJ(AsyncFromSyncIteratorPrototypeReturn, 1, kReceiver, kValue)              \
1291   TFJ(AsyncFromSyncIteratorPrototypeReturnOptimized, 1, kReceiver, kValue)     \
1292   /* #sec-async-iterator-value-unwrap-functions */                             \
1293   TFJ(AsyncIteratorValueUnwrap, 1, kReceiver, kValue)                          \
1294                                                                                \
1295   /* CEntry */                                                                 \
1296   ASM(CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit)                 \
1297   ASM(CEntry_Return1_DontSaveFPRegs_ArgvOnStack_BuiltinExit)                   \
1298   ASM(CEntry_Return1_DontSaveFPRegs_ArgvInRegister_NoBuiltinExit)              \
1299   ASM(CEntry_Return1_SaveFPRegs_ArgvOnStack_NoBuiltinExit)                     \
1300   ASM(CEntry_Return1_SaveFPRegs_ArgvOnStack_BuiltinExit)                       \
1301   ASM(CEntry_Return2_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit)                 \
1302   ASM(CEntry_Return2_DontSaveFPRegs_ArgvOnStack_BuiltinExit)                   \
1303   ASM(CEntry_Return2_DontSaveFPRegs_ArgvInRegister_NoBuiltinExit)              \
1304   ASM(CEntry_Return2_SaveFPRegs_ArgvOnStack_NoBuiltinExit)                     \
1305   ASM(CEntry_Return2_SaveFPRegs_ArgvOnStack_BuiltinExit)                       \
1306                                                                                \
1307   /* String helpers */                                                         \
1308   TFS(StringAdd_CheckNone_NotTenured, kLeft, kRight)                           \
1309   TFS(StringAdd_CheckNone_Tenured, kLeft, kRight)                              \
1310   TFS(StringAdd_ConvertLeft_NotTenured, kLeft, kRight)                         \
1311   TFS(StringAdd_ConvertRight_NotTenured, kLeft, kRight)                        \
1312   TFS(SubString, kString, kFrom, kTo)                                          \
1313                                                                                \
1314   /* Miscellaneous */                                                          \
1315   ASM(CallApiCallback_Argc0)                                                   \
1316   ASM(CallApiCallback_Argc1)                                                   \
1317   ASM(CallApiGetter)                                                           \
1318   ASM(DoubleToI)                                                               \
1319   TFC(GetProperty, GetProperty, 1)                                             \
1320   TFS(SetProperty, kReceiver, kKey, kValue)                                    \
1321   ASM(MathPowInternal)                                                         \
1322                                                                                \
1323   /* Trace */                                                                  \
1324   CPP(IsTraceCategoryEnabled)                                                  \
1325   CPP(Trace)
1326 
1327 #ifdef V8_INTL_SUPPORT
1328 #define BUILTIN_LIST_INTL(CPP, TFJ, TFS)                               \
1329   /* ecma402 #sec-intl.collator */                                     \
1330   CPP(CollatorConstructor)                                             \
1331   TFS(StringToLowerCaseIntl, kString)                                  \
1332   /* ES #sec-string.prototype.tolowercase */                           \
1333   TFJ(StringPrototypeToLowerCaseIntl, 0, kReceiver)                    \
1334   /* ES #sec-string.prototype.touppercase */                           \
1335   CPP(StringPrototypeToUpperCaseIntl)                                  \
1336   /* ES #sec-string.prototype.normalize */                             \
1337   CPP(StringPrototypeNormalizeIntl)                                    \
1338   /* ecma402 #sec-intl.numberformat.prototype.formattoparts */         \
1339   CPP(NumberFormatPrototypeFormatToParts)                              \
1340   /* ecma402 #sec-intl.datetimeformat.prototype.formattoparts */       \
1341   CPP(DateTimeFormatPrototypeFormatToParts)                            \
1342   /* ecma402 #new proposal */                                          \
1343   /* ecma402 #sec-intl-listformat-constructor */                       \
1344   CPP(ListFormatConstructor)                                           \
1345   /* ecma402 #sec-intl.listformat.prototype.resolvedoptions */         \
1346   CPP(ListFormatPrototypeResolvedOptions)                              \
1347   /* ecma402 #sec-intl-list-format.prototype.format */                 \
1348   TFJ(ListFormatPrototypeFormat,                                       \
1349       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                 \
1350   /* ecma402 #sec-intl-list-format.prototype.formattoparts */          \
1351   TFJ(ListFormatPrototypeFormatToParts,                                \
1352       SharedFunctionInfo::kDontAdaptArgumentsSentinel)                 \
1353   /* ecma402 #sec-intl-locale-constructor */                           \
1354   CPP(LocaleConstructor)                                               \
1355   CPP(LocalePrototypeLanguage)                                         \
1356   CPP(LocalePrototypeScript)                                           \
1357   CPP(LocalePrototypeRegion)                                           \
1358   CPP(LocalePrototypeBaseName)                                         \
1359   CPP(LocalePrototypeCalendar)                                         \
1360   CPP(LocalePrototypeCaseFirst)                                        \
1361   CPP(LocalePrototypeCollation)                                        \
1362   CPP(LocalePrototypeHourCycle)                                        \
1363   CPP(LocalePrototypeNumeric)                                          \
1364   CPP(LocalePrototypeNumberingSystem)                                  \
1365   CPP(LocalePrototypeToString)                                         \
1366   /* ecma402 #sec-Intl.Locale.prototype.maximize */                    \
1367   CPP(LocalePrototypeMaximize)                                         \
1368   /* ecma402 #sec-Intl.Locale.prototype.minimize */                    \
1369   CPP(LocalePrototypeMinimize)                                         \
1370   /* ecma402 #sec-number-format-functions */                           \
1371   CPP(NumberFormatInternalFormatNumber)                                \
1372   /* ecma402 #sec-intl.numberformat.prototype.format */                \
1373   CPP(NumberFormatPrototypeFormatNumber)                               \
1374   /* ecma402 #sec-datetime-format-functions */                         \
1375   CPP(DateTimeFormatInternalFormat)                                    \
1376   /* ecma402 #sec-intl.datetimeformat.prototype.format */              \
1377   CPP(DateTimeFormatPrototypeFormat)                                   \
1378   /* ecma402 #sec-intl.pluralrules */                                  \
1379   CPP(PluralRulesConstructor)                                          \
1380   /* ecma402 #sec-intl.RelativeTimeFormat.constructor */               \
1381   CPP(RelativeTimeFormatConstructor)                                   \
1382   /* ecma402 #sec-intl.RelativeTimeFormat.prototype.resolvedOptions */ \
1383   CPP(RelativeTimeFormatPrototypeResolvedOptions)                      \
1384   /* ecma402 #sec-intl.RelativeTimeFormat.prototype.format */          \
1385   CPP(RelativeTimeFormatPrototypeFormat)                               \
1386   /* ecma402 #sec-intl.RelativeTimeFormat.prototype.formatToParts */   \
1387   CPP(RelativeTimeFormatPrototypeFormatToParts)                        \
1388   /* ecma402 #sup-string.prototype.tolocalelowercase */                \
1389   CPP(StringPrototypeToLocaleLowerCase)                                \
1390   /* ecma402 #sup-string.prototype.tolocaleuppercase */                \
1391   CPP(StringPrototypeToLocaleUpperCase)                                \
1392   /* ecma402 #sec-intl.collator.prototype.compare */                   \
1393   CPP(CollatorPrototypeCompare)                                        \
1394   /* ecma 402 #sec-collator-compare-functions*/                        \
1395   CPP(CollatorInternalCompare)                                         \
1396   CPP(BreakIteratorInternalAdoptText)                                  \
1397   CPP(BreakIteratorPrototypeAdoptText)
1398 #else
1399 #define BUILTIN_LIST_INTL(CPP, TFJ, TFS)      \
1400   /* no-op fallback version */                \
1401   CPP(StringPrototypeNormalize)               \
1402   /* same as toLowercase; fallback version */ \
1403   CPP(StringPrototypeToLocaleLowerCase)       \
1404   /* same as toUppercase; fallback version */ \
1405   CPP(StringPrototypeToLocaleUpperCase)       \
1406   /* (obsolete) Unibrow version */            \
1407   CPP(StringPrototypeToLowerCase)             \
1408   /* (obsolete) Unibrow version */            \
1409   CPP(StringPrototypeToUpperCase)
1410 #endif  // V8_INTL_SUPPORT
1411 
1412 #ifdef V8_EMBEDDED_BYTECODE_HANDLERS
1413 #define BUILTIN_LIST_BYTECODE_HANDLERS(BCH) BYTECODE_LIST(BCH)
1414 #else
1415 #define BUILTIN_LIST_BYTECODE_HANDLERS(BCH)
1416 #endif  // V8_EMBEDDED_BYTECODE_HANDLERS
1417 
1418 #define BUILTIN_LIST(CPP, API, TFJ, TFC, TFS, TFH, BCH, ASM) \
1419   BUILTIN_LIST_BASE(CPP, API, TFJ, TFC, TFS, TFH, ASM)       \
1420   BUILTIN_LIST_FROM_DSL(CPP, API, TFJ, TFC, TFS, TFH, ASM)   \
1421   BUILTIN_LIST_INTL(CPP, TFJ, TFS)                           \
1422   BUILTIN_LIST_BYTECODE_HANDLERS(BCH)
1423 
1424 // The exception thrown in the following builtins are caught
1425 // internally and result in a promise rejection.
1426 #define BUILTIN_PROMISE_REJECTION_PREDICTION_LIST(V) \
1427   V(AsyncFromSyncIteratorPrototypeNext)              \
1428   V(AsyncFromSyncIteratorPrototypeReturn)            \
1429   V(AsyncFromSyncIteratorPrototypeNextOptimized)     \
1430   V(AsyncFromSyncIteratorPrototypeThrowOptimized)    \
1431   V(AsyncFromSyncIteratorPrototypeReturnOptimized)   \
1432   V(AsyncFromSyncIteratorPrototypeThrow)             \
1433   V(AsyncFunctionAwaitCaught)                        \
1434   V(AsyncFunctionAwaitCaughtOptimized)               \
1435   V(AsyncFunctionAwaitUncaught)                      \
1436   V(AsyncFunctionAwaitUncaughtOptimized)             \
1437   V(AsyncGeneratorResolve)                           \
1438   V(AsyncGeneratorAwaitCaught)                       \
1439   V(AsyncGeneratorAwaitUncaught)                     \
1440   V(PromiseAll)                                      \
1441   V(PromiseConstructor)                              \
1442   V(PromiseConstructorLazyDeoptContinuation)         \
1443   V(PromiseFulfillReactionJob)                       \
1444   V(PromiseRace)                                     \
1445   V(ResolvePromise)
1446 
1447 // Convenience macro listing all wasm runtime stubs. Note that the first few
1448 // elements of the list coincide with {compiler::TrapId}, order matters.
1449 #define WASM_RUNTIME_STUB_LIST(V, VTRAP) \
1450   FOREACH_WASM_TRAPREASON(VTRAP)         \
1451   V(WasmAllocateHeapNumber)              \
1452   V(WasmArgumentsAdaptor)                \
1453   V(WasmCallJavaScript)                  \
1454   V(WasmGrowMemory)                      \
1455   V(WasmStackGuard)                      \
1456   V(WasmToNumber)                        \
1457   V(DoubleToI)
1458 
1459 // The exception thrown in the following builtins are caught internally and will
1460 // not be propagated further or re-thrown
1461 #define BUILTIN_EXCEPTION_CAUGHT_PREDICTION_LIST(V) V(PromiseRejectReactionJob)
1462 
1463 #define IGNORE_BUILTIN(...)
1464 
1465 #define BUILTIN_LIST_C(V)                                            \
1466   BUILTIN_LIST(V, V, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \
1467                IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
1468 
1469 #define BUILTIN_LIST_A(V)                                                      \
1470   BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \
1471                IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, V)
1472 
1473 #define BUILTIN_LIST_TFS(V)                                                    \
1474   BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \
1475                V, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
1476 
1477 #define BUILTIN_LIST_TFJ(V)                                       \
1478   BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, V, IGNORE_BUILTIN, \
1479                IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
1480 
1481 #define BUILTIN_LIST_TFC(V)                                       \
1482   BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, V, \
1483                IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
1484 
1485 }  // namespace internal
1486 }  // namespace v8
1487 
1488 #endif  // V8_BUILTINS_BUILTINS_DEFINITIONS_H_
1489