| Index: src/builtins/builtins-definitions.h
|
| diff --git a/src/builtins/builtins-definitions.h b/src/builtins/builtins-definitions.h
|
| index 18d1ac11cb8c5df6540e00101d4eb1bb3510c3ac..f4cb7eb77b8f08b38ee13b749cae755cc01bf882 100644
|
| --- a/src/builtins/builtins-definitions.h
|
| +++ b/src/builtins/builtins-definitions.h
|
| @@ -162,6 +162,30 @@ namespace internal {
|
| ASM(NotifyLazyDeoptimized) \
|
| ASM(NotifyStubFailure) \
|
| ASM(NotifyStubFailureSaveDoubles) \
|
| + ASM(NotifyBuiltinContinuation) \
|
| + \
|
| + /* Trampolines called when returning from a deoptimization that expects */ \
|
| + /* to continue in a JavaScript builtin to finish the functionality of a */ \
|
| + /* an TF-inlined version of builtin that has side-effects. */ \
|
| + /* Each restores input register values that the builtin expects from a */ \
|
| + /* BuiltinContinuationFrame, tear down that frame, and then jump to the */ \
|
| + /* stashed-away builtin's address. After the trampoline completes, */ \
|
| + /* it appears to the called JavaScript builtin that it had been directly */ \
|
| + /* invoked by the frame above it. When the builtin returns, execution */ \
|
| + /* resumes normally in the calling frame, processing any return result */ \
|
| + /* from the JavaScript builtin, again as if it had called the builtin */ \
|
| + /* directly. */ \
|
| + /* There are two variants of the stub that differ in their handling of a */ \
|
| + /* value returned by the next frame deeper on the stack. For LAZY deopts, */ \
|
| + /* the return value (e.g. rax on x64) is explicitly passed as an extra */ \
|
| + /* stack parameter to the JavaScript builtin by the "WithResult" */ \
|
| + /* trampoline variant. The plain variant is used in EAGER deopt contexts */ \
|
| + /* and has no such special handling. */ \
|
| + ASM(ContinueToCodeStubBuiltin) \
|
| + ASM(ContinueToCodeStubBuiltinWithResult) \
|
| + ASM(ContinueToJavaScriptBuiltin) \
|
| + ASM(ContinueToJavaScriptBuiltinWithResult) \
|
| + \
|
| ASM(OnStackReplacement) \
|
| \
|
| /* API callback handling */ \
|
| @@ -203,6 +227,9 @@ namespace internal {
|
| TFC(Typeof, Typeof, 1) \
|
| TFC(GetSuperConstructor, Typeof, 1) \
|
| \
|
| + /* Type conversions continuations */ \
|
| + TFC(ToBooleanLazyDeoptContinuation, TypeConversionStackParameter, 1) \
|
| + \
|
| /* Handlers */ \
|
| TFH(LoadICProtoArray, BUILTIN, kNoExtraICState, LoadICProtoArray) \
|
| TFH(LoadICProtoArrayThrowIfNonexistent, BUILTIN, kNoExtraICState, \
|
| @@ -271,6 +298,10 @@ namespace internal {
|
| /* ES6 #sec-array.prototype.foreach */ \
|
| TFS(ArrayForEachLoopContinuation, kReceiver, kCallbackFn, kThisArg, kArray, \
|
| kObject, kInitialK, kLength, kTo) \
|
| + TFJ(ArrayForEachLoopEagerDeoptContinuation, 4, kCallbackFn, kThisArg, \
|
| + kInitialK, kLength) \
|
| + TFJ(ArrayForEachLoopLazyDeoptContinuation, 5, kCallbackFn, kThisArg, \
|
| + kInitialK, kLength, kResult) \
|
| TFJ(ArrayForEach, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \
|
| /* ES6 #sec-array.prototype.every */ \
|
| TFS(ArrayEveryLoopContinuation, kReceiver, kCallbackFn, kThisArg, kArray, \
|
| @@ -1056,6 +1087,14 @@ namespace internal {
|
| BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \
|
| V, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
|
|
|
| +#define BUILTIN_LIST_TFJ(V) \
|
| + BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, V, IGNORE_BUILTIN, \
|
| + IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
|
| +
|
| +#define BUILTIN_LIST_TFC(V) \
|
| + BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, V, \
|
| + IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
|
| +
|
| #define BUILTINS_WITH_UNTAGGED_PARAMS(V) V(WasmCompileLazy)
|
|
|
| } // namespace internal
|
|
|