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