MIPS[64]: Port: [async] Introduce dedicated JSAsyncFunctionObject.
Port commit a63987a41a
Original message:
>This JSAsyncFunctionObject represents the implicit generator object
>inside of async functions, and also holds the outer promise for the
>async functions. This in turn allows us to get rid of the .promise
>in the Parser / BytecodeGenerator completely, and will make it
>possible to build zero-cost async stack traces independent of the
>concrete synchronous part of the stack frame (which currently breaks
>in Node.js).
>
>In the bytecode all the async function operations now take this new
>JSAsyncFunctionObject instead of passing both the .generator_object
>and the .promise, which further simplifies and shrinks the bytecode.
>It also reduces the size of async function frames, potentially making
>the suspend/resume cheaper.
>
>This also changes `await` to use intrinsics instead of calling to
>special JSFunctions on the native context, and thus reduces the size of
>the native contexts.
>
>Drive-by-fix: Introduce a dedicated JSCreateAsyncFunctionObject operator
>to TurboFan.
>
>Bug: v8:7253, v8:7522
>Change-Id: I2305302285156aa1f71328ecac70377abdd92c80
>Ref: nodejs/node#11865
>Design-Document: http://bit.ly/v8-zero-cost-async-stack-traces
>Reviewed-on: https://chromium-review.googlesource.com/c/1273049
>Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
>Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org>
>Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
>Reviewed-by: Maya Lekova <mslekova@chromium.org>
>Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
>Cr-Commit-Position: refs/heads/master@{#56554}
Change-Id: I5a11bd31bf2aac2e2b94779fa03b85ee88d7dbc4
Reviewed-on: https://chromium-review.googlesource.com/c/1288811
Reviewed-by: Ivica Bogosavljevic <ibogosavljevic@wavecomp.com>
Commit-Queue: Ivica Bogosavljevic <ibogosavljevic@wavecomp.com>
Cr-Commit-Position: refs/heads/master@{#56818}
This commit is contained in:
parent
1dc1d1ae4e
commit
441425302f
@ -5054,6 +5054,9 @@ void MacroAssembler::AssertGeneratorObject(Register object) {
|
||||
// Check if JSGeneratorObject
|
||||
Branch(&done, eq, t8, Operand(JS_GENERATOR_OBJECT_TYPE));
|
||||
|
||||
// Check if JSAsyncFunctionObject (See MacroAssembler::CompareInstanceType)
|
||||
Branch(&done, eq, t8, Operand(JS_ASYNC_FUNCTION_OBJECT_TYPE));
|
||||
|
||||
// Check if JSAsyncGeneratorObject
|
||||
Branch(&done, eq, t8, Operand(JS_ASYNC_GENERATOR_OBJECT_TYPE));
|
||||
|
||||
|
@ -5422,6 +5422,9 @@ void MacroAssembler::AssertGeneratorObject(Register object) {
|
||||
// Check if JSGeneratorObject
|
||||
Branch(&done, eq, t8, Operand(JS_GENERATOR_OBJECT_TYPE));
|
||||
|
||||
// Check if JSAsyncFunctionObject (See MacroAssembler::CompareInstanceType)
|
||||
Branch(&done, eq, t8, Operand(JS_ASYNC_FUNCTION_OBJECT_TYPE));
|
||||
|
||||
// Check if JSAsyncGeneratorObject
|
||||
Branch(&done, eq, t8, Operand(JS_ASYNC_GENERATOR_OBJECT_TYPE));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user