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