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