[ignition] Optimize JSGenerator creation

As a first step towards improving generator creation, create a builtin
that can do it without a call to the runtime. Thread that builtin
into the interpreter via an intrinsic.

BUG=v8:6352
R=bmeurer@chromium.org

Review-Url: https://codereview.chromium.org/2861983002
Cr-Commit-Position: refs/heads/master@{#45145}
This commit is contained in:
mvstanton 2017-05-05 11:33:00 -07:00 committed by Commit bot
parent 1b064d9cd0
commit c3f0e2a5b0
15 changed files with 277 additions and 210 deletions

View File

@ -282,76 +282,8 @@ Node* ConstructorBuiltinsAssembler::EmitFastNewObject(Node* context,
Node* object = AllocateJSObjectFromMap(initial_map, properties.value());
Node* instance_size_words = ChangeUint32ToWord(LoadObjectField(
initial_map, Map::kInstanceSizeOffset, MachineType::Uint8()));
Node* instance_size =
WordShl(instance_size_words, IntPtrConstant(kPointerSizeLog2));
// Perform in-object slack tracking if requested.
Node* bit_field3 = LoadMapBitField3(initial_map);
Label slack_tracking(this), finalize(this, Label::kDeferred), done(this);
GotoIf(IsSetWord32<Map::ConstructionCounter>(bit_field3), &slack_tracking);
// Initialize remaining fields.
{
Comment("no slack tracking");
InitializeFieldsWithRoot(object, IntPtrConstant(JSObject::kHeaderSize),
instance_size, Heap::kUndefinedValueRootIndex);
Goto(&end);
}
{
BIND(&slack_tracking);
// Decrease generous allocation count.
STATIC_ASSERT(Map::ConstructionCounter::kNext == 32);
Comment("update allocation count");
Node* new_bit_field3 = Int32Sub(
bit_field3, Int32Constant(1 << Map::ConstructionCounter::kShift));
StoreObjectFieldNoWriteBarrier(initial_map, Map::kBitField3Offset,
new_bit_field3,
MachineRepresentation::kWord32);
GotoIf(IsClearWord32<Map::ConstructionCounter>(new_bit_field3), &finalize);
Node* unused_fields = LoadObjectField(
initial_map, Map::kUnusedPropertyFieldsOffset, MachineType::Uint8());
Node* used_size =
IntPtrSub(instance_size, WordShl(ChangeUint32ToWord(unused_fields),
IntPtrConstant(kPointerSizeLog2)));
Comment("initialize filler fields (no finalize)");
InitializeFieldsWithRoot(object, used_size, instance_size,
Heap::kOnePointerFillerMapRootIndex);
Comment("initialize undefined fields (no finalize)");
InitializeFieldsWithRoot(object, IntPtrConstant(JSObject::kHeaderSize),
used_size, Heap::kUndefinedValueRootIndex);
Goto(&end);
}
{
// Finalize the instance size.
BIND(&finalize);
Node* unused_fields = LoadObjectField(
initial_map, Map::kUnusedPropertyFieldsOffset, MachineType::Uint8());
Node* used_size =
IntPtrSub(instance_size, WordShl(ChangeUint32ToWord(unused_fields),
IntPtrConstant(kPointerSizeLog2)));
Comment("initialize filler fields (finalize)");
InitializeFieldsWithRoot(object, used_size, instance_size,
Heap::kOnePointerFillerMapRootIndex);
Comment("initialize undefined fields (finalize)");
InitializeFieldsWithRoot(object, IntPtrConstant(JSObject::kHeaderSize),
used_size, Heap::kUndefinedValueRootIndex);
CallRuntime(Runtime::kFinalizeInstanceSize, context, initial_map);
Goto(&end);
}
BIND(&end);
HandleSlackTracking(context, object, initial_map, JSObject::kHeaderSize);
return object;
}

View File

@ -494,6 +494,7 @@ namespace internal {
TFS(CreateIterResultObject, kValue, kDone) \
\
/* Generator and Async */ \
TFS(CreateGeneratorObject, kClosure, kReceiver) \
CPP(GeneratorFunctionConstructor) \
/* ES6 #sec-generator.prototype.next */ \
TFJ(GeneratorPrototypeNext, 1, kValue) \

View File

@ -412,5 +412,51 @@ TF_BUILTIN(GetSuperConstructor, ObjectBuiltinsAssembler) {
Return(GetSuperConstructor(object, context));
}
TF_BUILTIN(CreateGeneratorObject, ObjectBuiltinsAssembler) {
Node* closure = Parameter(Descriptor::kClosure);
Node* receiver = Parameter(Descriptor::kReceiver);
Node* context = Parameter(Descriptor::kContext);
// Get the initial map from the function, jumping to the runtime if we don't
// have one.
Node* maybe_map =
LoadObjectField(closure, JSFunction::kPrototypeOrInitialMapOffset);
Label runtime(this);
GotoIf(DoesntHaveInstanceType(maybe_map, MAP_TYPE), &runtime);
Node* shared =
LoadObjectField(closure, JSFunction::kSharedFunctionInfoOffset);
Node* bytecode_array =
LoadObjectField(shared, SharedFunctionInfo::kFunctionDataOffset);
Node* frame_size = ChangeInt32ToIntPtr(LoadObjectField(
bytecode_array, BytecodeArray::kFrameSizeOffset, MachineType::Int32()));
Node* size = WordSar(frame_size, IntPtrConstant(kPointerSizeLog2));
Node* register_file = AllocateFixedArray(FAST_HOLEY_ELEMENTS, size);
FillFixedArrayWithValue(FAST_HOLEY_ELEMENTS, register_file, IntPtrConstant(0),
size, Heap::kUndefinedValueRootIndex);
Node* const result = AllocateJSObjectFromMap(maybe_map);
StoreObjectFieldNoWriteBarrier(result, JSGeneratorObject::kFunctionOffset,
closure);
StoreObjectFieldNoWriteBarrier(result, JSGeneratorObject::kContextOffset,
context);
StoreObjectFieldNoWriteBarrier(result, JSGeneratorObject::kReceiverOffset,
receiver);
StoreObjectFieldNoWriteBarrier(result, JSGeneratorObject::kRegisterFileOffset,
register_file);
Node* executing = SmiConstant(JSGeneratorObject::kGeneratorExecuting);
StoreObjectFieldNoWriteBarrier(result, JSGeneratorObject::kContinuationOffset,
executing);
HandleSlackTracking(context, result, maybe_map, JSGeneratorObject::kSize);
Return(result);
BIND(&runtime);
{
Return(CallRuntime(Runtime::kCreateJSGeneratorObject, context, closure,
receiver));
}
}
} // namespace internal
} // namespace v8

View File

@ -6639,6 +6639,81 @@ Node* CodeStubAssembler::CreateWeakCellInFeedbackVector(Node* feedback_vector,
return cell;
}
void CodeStubAssembler::HandleSlackTracking(Node* context, Node* object,
Node* initial_map,
int start_offset) {
Node* instance_size_words = ChangeUint32ToWord(LoadObjectField(
initial_map, Map::kInstanceSizeOffset, MachineType::Uint8()));
Node* instance_size =
WordShl(instance_size_words, IntPtrConstant(kPointerSizeLog2));
// Perform in-object slack tracking if requested.
Node* bit_field3 = LoadMapBitField3(initial_map);
Label end(this), slack_tracking(this), finalize(this, Label::kDeferred);
GotoIf(IsSetWord32<Map::ConstructionCounter>(bit_field3), &slack_tracking);
// Initialize remaining fields.
{
Comment("no slack tracking");
InitializeFieldsWithRoot(object, IntPtrConstant(start_offset),
instance_size, Heap::kUndefinedValueRootIndex);
Goto(&end);
}
{
BIND(&slack_tracking);
// Decrease generous allocation count.
STATIC_ASSERT(Map::ConstructionCounter::kNext == 32);
Comment("update allocation count");
Node* new_bit_field3 = Int32Sub(
bit_field3, Int32Constant(1 << Map::ConstructionCounter::kShift));
StoreObjectFieldNoWriteBarrier(initial_map, Map::kBitField3Offset,
new_bit_field3,
MachineRepresentation::kWord32);
GotoIf(IsClearWord32<Map::ConstructionCounter>(new_bit_field3), &finalize);
Node* unused_fields = LoadObjectField(
initial_map, Map::kUnusedPropertyFieldsOffset, MachineType::Uint8());
Node* used_size =
IntPtrSub(instance_size, WordShl(ChangeUint32ToWord(unused_fields),
IntPtrConstant(kPointerSizeLog2)));
Comment("initialize filler fields (no finalize)");
InitializeFieldsWithRoot(object, used_size, instance_size,
Heap::kOnePointerFillerMapRootIndex);
Comment("initialize undefined fields (no finalize)");
InitializeFieldsWithRoot(object, IntPtrConstant(start_offset), used_size,
Heap::kUndefinedValueRootIndex);
Goto(&end);
}
{
// Finalize the instance size.
BIND(&finalize);
Node* unused_fields = LoadObjectField(
initial_map, Map::kUnusedPropertyFieldsOffset, MachineType::Uint8());
Node* used_size =
IntPtrSub(instance_size, WordShl(ChangeUint32ToWord(unused_fields),
IntPtrConstant(kPointerSizeLog2)));
Comment("initialize filler fields (finalize)");
InitializeFieldsWithRoot(object, used_size, instance_size,
Heap::kOnePointerFillerMapRootIndex);
Comment("initialize undefined fields (finalize)");
InitializeFieldsWithRoot(object, IntPtrConstant(start_offset), used_size,
Heap::kUndefinedValueRootIndex);
CallRuntime(Runtime::kFinalizeInstanceSize, context, initial_map);
Goto(&end);
}
BIND(&end);
}
Node* CodeStubAssembler::BuildFastLoop(
const CodeStubAssembler::VariableList& vars, Node* start_index,
Node* end_index, const FastLoopBody& body, int increment,

View File

@ -1271,6 +1271,11 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
// Create a new AllocationSite and install it into a feedback vector.
Node* CreateAllocationSiteInFeedbackVector(Node* feedback_vector, Node* slot);
// Given a recently allocated object {object}, with map {initial_map},
// initialize remaining fields appropriately to comply with slack tracking.
void HandleSlackTracking(Node* context, Node* object, Node* initial_map,
int start_offset);
enum class IndexAdvanceMode { kPre, kPost };
typedef std::function<void(Node* index)> FastLoopBody;

View File

@ -640,7 +640,6 @@ class V8_EXPORT_PRIVATE Bytecodes final {
bytecode == Bytecode::kConstruct ||
bytecode == Bytecode::kCallWithSpread ||
bytecode == Bytecode::kConstructWithSpread ||
bytecode == Bytecode::kInvokeIntrinsic ||
bytecode == Bytecode::kCallJSRuntime;
}
@ -752,7 +751,8 @@ class V8_EXPORT_PRIVATE Bytecodes final {
// Returns the receiver mode of the given call bytecode.
static ConvertReceiverMode GetReceiverMode(Bytecode bytecode) {
DCHECK(IsCallOrConstruct(bytecode));
DCHECK(IsCallOrConstruct(bytecode) ||
bytecode == Bytecode::kInvokeIntrinsic);
switch (bytecode) {
case Bytecode::kCallProperty:
case Bytecode::kCallProperty0:

View File

@ -748,7 +748,8 @@ Node* InterpreterAssembler::CallJS(Node* function, Node* context,
ConvertReceiverMode receiver_mode,
TailCallMode tail_call_mode) {
DCHECK(Bytecodes::MakesCallAlongCriticalPath(bytecode_));
DCHECK(Bytecodes::IsCallOrConstruct(bytecode_));
DCHECK(Bytecodes::IsCallOrConstruct(bytecode_) ||
bytecode_ == Bytecode::kInvokeIntrinsic);
DCHECK_EQ(Bytecodes::GetReceiverMode(bytecode_), receiver_mode);
Callable callable = CodeFactory::InterpreterPushArgsThenCall(
isolate(), receiver_mode, tail_call_mode,

View File

@ -369,6 +369,12 @@ Node* IntrinsicsGenerator::AsyncGeneratorGetAwaitInputOrDebugPos(
return value;
}
Node* IntrinsicsGenerator::CreateJSGeneratorObject(Node* input, Node* arg_count,
Node* context) {
return IntrinsicAsBuiltinCall(input, context,
Builtins::kCreateGeneratorObject);
}
Node* IntrinsicsGenerator::AsyncGeneratorReject(Node* input, Node* arg_count,
Node* context) {
return IntrinsicAsBuiltinCall(input, context,

View File

@ -18,6 +18,7 @@ namespace interpreter {
async_generator_get_await_input_or_debug_pos, 1) \
V(AsyncGeneratorReject, async_generator_reject, 2) \
V(AsyncGeneratorResolve, async_generator_resolve, 3) \
V(CreateJSGeneratorObject, create_js_generator_object, 2) \
V(Call, call, -1) \
V(ClassOf, class_of, 1) \
V(CreateIterResultObject, create_iter_result_object, 2) \

View File

@ -3145,15 +3145,15 @@ Block* Parser::BuildRejectPromiseOnException(Block* inner_block) {
}
Assignment* Parser::BuildCreateJSGeneratorObject(int pos, FunctionKind kind) {
// .generator = %CreateJSGeneratorObject(...);
// .generator = %_CreateJSGeneratorObject(...);
DCHECK_NOT_NULL(function_state_->generator_object_variable());
ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(2, zone());
args->Add(factory()->NewThisFunction(pos), zone());
args->Add(IsArrowFunction(kind) ? GetLiteralUndefined(pos)
: ThisExpression(kNoSourcePosition),
zone());
Expression* allocation =
factory()->NewCallRuntime(Runtime::kCreateJSGeneratorObject, args, pos);
Expression* allocation = factory()->NewCallRuntime(
Runtime::kInlineCreateJSGeneratorObject, args, pos);
VariableProxy* proxy =
factory()->NewVariableProxy(function_state_->generator_object_variable());
return factory()->NewAssignment(Token::INIT, proxy, allocation,

View File

@ -16,7 +16,7 @@ snippet: "
"
frame size: 19
parameter count: 1
bytecode array length: 1027
bytecode array length: 1026
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(39),
@ -26,7 +26,7 @@ bytecodes: [
B(Star), R(3),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(132),
B(JumpIfTrue), U8(131),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrueConstant), U8(12),
@ -46,7 +46,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(6),
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(5), U8(2),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(5), U8(2),
B(StaCurrentContextSlot), U8(5),
B(LdaUndefined),
B(Star), R(5),
@ -467,20 +467,20 @@ constant pool: [
FIXED_ARRAY_TYPE,
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
Smi [557],
Smi [556],
FIXED_ARRAY_TYPE,
Smi [699],
Smi [698],
Smi [348],
Smi [371],
FIXED_ARRAY_TYPE,
Smi [317],
]
handlers: [
[80, 940, 946],
[83, 886, 888],
[100, 423, 429],
[103, 375, 377],
[516, 642, 644],
[79, 939, 945],
[82, 885, 887],
[99, 422, 428],
[102, 374, 376],
[515, 641, 643],
]
---
@ -492,7 +492,7 @@ snippet: "
"
frame size: 19
parameter count: 1
bytecode array length: 1085
bytecode array length: 1084
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(39),
@ -502,7 +502,7 @@ bytecodes: [
B(Star), R(3),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(132),
B(JumpIfTrue), U8(131),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrueConstant), U8(12),
@ -522,7 +522,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(6),
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(5), U8(2),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(5), U8(2),
B(StaCurrentContextSlot), U8(5),
B(LdaUndefined),
B(Star), R(5),
@ -972,20 +972,20 @@ constant pool: [
FIXED_ARRAY_TYPE,
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
Smi [569],
Smi [568],
FIXED_ARRAY_TYPE,
Smi [711],
Smi [710],
Smi [348],
Smi [371],
FIXED_ARRAY_TYPE,
Smi [340],
]
handlers: [
[80, 975, 981],
[83, 921, 923],
[100, 435, 441],
[103, 387, 389],
[528, 654, 656],
[79, 974, 980],
[82, 920, 922],
[99, 434, 440],
[102, 386, 388],
[527, 653, 655],
]
---
@ -1000,7 +1000,7 @@ snippet: "
"
frame size: 19
parameter count: 1
bytecode array length: 1064
bytecode array length: 1063
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(39),
@ -1010,7 +1010,7 @@ bytecodes: [
B(Star), R(3),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(132),
B(JumpIfTrue), U8(131),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrueConstant), U8(12),
@ -1030,7 +1030,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(6),
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(5), U8(2),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(5), U8(2),
B(StaCurrentContextSlot), U8(5),
B(LdaUndefined),
B(Star), R(5),
@ -1467,20 +1467,20 @@ constant pool: [
FIXED_ARRAY_TYPE,
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
Smi [594],
Smi [593],
FIXED_ARRAY_TYPE,
Smi [736],
Smi [735],
Smi [348],
Smi [371],
FIXED_ARRAY_TYPE,
Smi [317],
]
handlers: [
[80, 977, 983],
[83, 923, 925],
[100, 460, 466],
[103, 412, 414],
[553, 679, 681],
[79, 976, 982],
[82, 922, 924],
[99, 459, 465],
[102, 411, 413],
[552, 678, 680],
]
---
@ -1493,7 +1493,7 @@ snippet: "
"
frame size: 14
parameter count: 1
bytecode array length: 579
bytecode array length: 578
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(22),
@ -1514,7 +1514,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(4), U8(2),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(5),
B(LdaUndefined),
B(Star), R(4),
@ -1774,10 +1774,10 @@ constant pool: [
FIXED_ARRAY_TYPE,
]
handlers: [
[63, 496, 502],
[66, 442, 444],
[81, 241, 247],
[84, 193, 195],
[322, 334, 336],
[62, 495, 501],
[65, 441, 443],
[80, 240, 246],
[83, 192, 194],
[321, 333, 335],
]

View File

@ -666,7 +666,7 @@ snippet: "
"
frame size: 15
parameter count: 2
bytecode array length: 626
bytecode array length: 625
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -676,7 +676,7 @@ bytecodes: [
B(Star), R(4),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(4),
B(JumpIfTrue), U8(58),
B(JumpIfTrue), U8(57),
B(LdaSmi), I8(79),
B(Star), R(6),
B(CallRuntime), U16(Runtime::kAbort), R(6), U8(1),
@ -693,7 +693,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(5),
B(Star), R(10),
B(Mov), R(closure), R(9),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(9), U8(2),
/* 11 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(9), U8(2),
B(StaCurrentContextSlot), U8(6),
B(Star), R(9),
B(LdaImmutableCurrentContextSlot), U8(6),
@ -948,10 +948,10 @@ constant pool: [
Smi [449],
]
handlers: [
[49, 559, 565],
[144, 341, 347],
[147, 297, 299],
[433, 449, 451],
[49, 558, 564],
[143, 340, 346],
[146, 296, 298],
[432, 448, 450],
]
---
@ -963,7 +963,7 @@ snippet: "
"
frame size: 18
parameter count: 2
bytecode array length: 755
bytecode array length: 754
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(33),
@ -973,10 +973,10 @@ bytecodes: [
B(Star), R(3),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(64),
B(JumpIfTrue), U8(63),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(156),
B(JumpIfTrue), U8(155),
B(LdaSmi), I8(79),
B(Star), R(5),
B(CallRuntime), U16(Runtime::kAbort), R(5), U8(1),
@ -993,7 +993,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(5),
B(Star), R(9),
B(Mov), R(closure), R(8),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(8), U8(2),
/* 11 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(8), U8(2),
B(StaCurrentContextSlot), U8(6),
B(Star), R(8),
B(LdaImmutableCurrentContextSlot), U8(6),
@ -1303,10 +1303,10 @@ constant pool: [
Smi [563],
]
handlers: [
[55, 679, 685],
[150, 441, 447],
[153, 397, 399],
[534, 550, 552],
[55, 678, 684],
[149, 440, 446],
[152, 396, 398],
[533, 549, 551],
]
---
@ -1318,7 +1318,7 @@ snippet: "
"
frame size: 16
parameter count: 2
bytecode array length: 619
bytecode array length: 618
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(22),
@ -1341,7 +1341,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(5),
B(Star), R(7),
B(Mov), R(closure), R(6),
B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(6), U8(2),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(6), U8(2),
B(StaCurrentContextSlot), U8(6),
B(LdaUndefined),
B(Star), R(6),
@ -1598,11 +1598,11 @@ constant pool: [
FIXED_ARRAY_TYPE,
]
handlers: [
[67, 559, 565],
[70, 505, 507],
[87, 288, 294],
[90, 240, 242],
[380, 396, 398],
[66, 558, 564],
[69, 504, 506],
[86, 287, 293],
[89, 239, 241],
[379, 395, 397],
]
---
@ -1614,7 +1614,7 @@ snippet: "
"
frame size: 19
parameter count: 2
bytecode array length: 773
bytecode array length: 772
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -1624,7 +1624,7 @@ bytecodes: [
B(Star), R(3),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(104),
B(JumpIfTrue), U8(103),
B(LdaSmi), I8(79),
B(Star), R(5),
B(CallRuntime), U16(Runtime::kAbort), R(5), U8(1),
@ -1640,7 +1640,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(5),
B(Star), R(6),
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(5), U8(2),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(5), U8(2),
B(StaCurrentContextSlot), U8(6),
B(LdaUndefined),
B(Star), R(5),
@ -1961,10 +1961,10 @@ constant pool: [
FIXED_ARRAY_TYPE,
]
handlers: [
[72, 704, 710],
[75, 650, 652],
[92, 409, 415],
[95, 361, 363],
[502, 518, 520],
[71, 703, 709],
[74, 649, 651],
[91, 408, 414],
[94, 360, 362],
[501, 517, 519],
]

View File

@ -13,7 +13,7 @@ snippet: "
"
frame size: 12
parameter count: 1
bytecode array length: 199
bytecode array length: 198
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -23,7 +23,7 @@ bytecodes: [
B(Star), R(1),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(1),
B(JumpIfTrue), U8(54),
B(JumpIfTrue), U8(53),
B(LdaSmi), I8(79),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
@ -38,7 +38,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(7),
B(Mov), R(closure), R(6),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(6), U8(2),
/* 11 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(6), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(6),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -115,7 +115,7 @@ bytecodes: [
constant pool: [
]
handlers: [
[45, 141, 147],
[45, 140, 146],
]
---
@ -125,7 +125,7 @@ snippet: "
"
frame size: 12
parameter count: 1
bytecode array length: 291
bytecode array length: 290
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(33),
@ -135,10 +135,10 @@ bytecodes: [
B(Star), R(1),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(1),
B(JumpIfTrue), U8(60),
B(JumpIfTrue), U8(59),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(1),
B(JumpIfTrue), U8(130),
B(JumpIfTrue), U8(129),
B(LdaSmi), I8(79),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
@ -153,7 +153,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(7),
B(Mov), R(closure), R(6),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(6), U8(2),
/* 11 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(6), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(6),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -270,7 +270,7 @@ bytecodes: [
constant pool: [
]
handlers: [
[51, 224, 230],
[51, 223, 229],
]
---
@ -280,7 +280,7 @@ snippet: "
"
frame size: 18
parameter count: 1
bytecode array length: 751
bytecode array length: 750
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(33),
@ -290,10 +290,10 @@ bytecodes: [
B(Star), R(3),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(60),
B(JumpIfTrue), U8(59),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(152),
B(JumpIfTrue), U8(151),
B(LdaSmi), I8(79),
B(Star), R(5),
B(CallRuntime), U16(Runtime::kAbort), R(5), U8(1),
@ -308,7 +308,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(9),
B(Mov), R(closure), R(8),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(8), U8(2),
/* 11 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(8), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(8),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -619,9 +619,9 @@ constant pool: [
Smi [563],
]
handlers: [
[51, 675, 681],
[146, 437, 443],
[149, 393, 395],
[530, 546, 548],
[51, 674, 680],
[145, 436, 442],
[148, 392, 394],
[529, 545, 547],
]

View File

@ -13,7 +13,7 @@ snippet: "
"
frame size: 9
parameter count: 2
bytecode array length: 143
bytecode array length: 142
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -23,7 +23,7 @@ bytecodes: [
B(Star), R(1),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(1),
B(JumpIfTrue), U8(64),
B(JumpIfTrue), U8(63),
B(LdaSmi), I8(79),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
@ -41,7 +41,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
/* 0 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -91,7 +91,7 @@ snippet: "
"
frame size: 9
parameter count: 2
bytecode array length: 143
bytecode array length: 142
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -101,7 +101,7 @@ bytecodes: [
B(Star), R(1),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(1),
B(JumpIfTrue), U8(64),
B(JumpIfTrue), U8(63),
B(LdaSmi), I8(79),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
@ -119,7 +119,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
/* 0 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -171,7 +171,7 @@ snippet: "
"
frame size: 10
parameter count: 2
bytecode array length: 205
bytecode array length: 204
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -181,7 +181,7 @@ bytecodes: [
B(Star), R(2),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(2),
B(JumpIfTrue), U8(64),
B(JumpIfTrue), U8(63),
B(LdaSmi), I8(79),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
@ -199,7 +199,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(Mov), R(closure), R(4),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(4), U8(2),
/* 0 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -278,7 +278,7 @@ snippet: "
"
frame size: 10
parameter count: 2
bytecode array length: 185
bytecode array length: 184
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -288,7 +288,7 @@ bytecodes: [
B(Star), R(2),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(2),
B(JumpIfTrue), U8(64),
B(JumpIfTrue), U8(63),
B(LdaSmi), I8(79),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
@ -306,7 +306,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(Mov), R(closure), R(4),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(4), U8(2),
/* 0 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -377,7 +377,7 @@ snippet: "
"
frame size: 10
parameter count: 2
bytecode array length: 189
bytecode array length: 188
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -387,7 +387,7 @@ bytecodes: [
B(Star), R(2),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(2),
B(JumpIfTrue), U8(68),
B(JumpIfTrue), U8(67),
B(LdaSmi), I8(79),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
@ -407,7 +407,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(Mov), R(closure), R(4),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(4), U8(2),
/* 0 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -478,7 +478,7 @@ snippet: "
"
frame size: 10
parameter count: 2
bytecode array length: 193
bytecode array length: 192
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -488,7 +488,7 @@ bytecodes: [
B(Star), R(2),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(2),
B(JumpIfTrue), U8(68),
B(JumpIfTrue), U8(67),
B(LdaSmi), I8(79),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
@ -508,7 +508,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(Mov), R(closure), R(4),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(4), U8(2),
/* 0 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -577,7 +577,7 @@ snippet: "
"
frame size: 9
parameter count: 2
bytecode array length: 154
bytecode array length: 153
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -587,7 +587,7 @@ bytecodes: [
B(Star), R(1),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(1),
B(JumpIfTrue), U8(68),
B(JumpIfTrue), U8(67),
B(LdaSmi), I8(79),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
@ -607,7 +607,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
/* 0 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -660,7 +660,7 @@ snippet: "
"
frame size: 9
parameter count: 2
bytecode array length: 187
bytecode array length: 186
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -670,7 +670,7 @@ bytecodes: [
B(Star), R(1),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(1),
B(JumpIfTrue), U8(68),
B(JumpIfTrue), U8(67),
B(LdaSmi), I8(79),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
@ -690,7 +690,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
/* 0 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -755,7 +755,7 @@ snippet: "
"
frame size: 9
parameter count: 2
bytecode array length: 143
bytecode array length: 142
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -765,7 +765,7 @@ bytecodes: [
B(Star), R(1),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(1),
B(JumpIfTrue), U8(64),
B(JumpIfTrue), U8(63),
B(LdaSmi), I8(79),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
@ -783,7 +783,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
/* 0 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -833,7 +833,7 @@ snippet: "
"
frame size: 9
parameter count: 2
bytecode array length: 143
bytecode array length: 142
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -843,7 +843,7 @@ bytecodes: [
B(Star), R(1),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(1),
B(JumpIfTrue), U8(64),
B(JumpIfTrue), U8(63),
B(LdaSmi), I8(79),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
@ -861,7 +861,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
/* 0 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -912,7 +912,7 @@ snippet: "
"
frame size: 9
parameter count: 2
bytecode array length: 181
bytecode array length: 180
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -922,7 +922,7 @@ bytecodes: [
B(Star), R(1),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(1),
B(JumpIfTrue), U8(74),
B(JumpIfTrue), U8(73),
B(LdaSmi), I8(79),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
@ -944,7 +944,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(Mov), R(closure), R(3),
/* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2),
/* 0 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(5),

View File

@ -285,7 +285,7 @@ snippet: "
"
frame size: 15
parameter count: 1
bytecode array length: 357
bytecode array length: 356
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -295,7 +295,7 @@ bytecodes: [
B(Star), R(4),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(4),
B(JumpIfTrue), U8(54),
B(JumpIfTrue), U8(53),
B(LdaSmi), I8(79),
B(Star), R(6),
B(CallRuntime), U16(Runtime::kAbort), R(6), U8(1),
@ -310,7 +310,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(10),
B(Mov), R(closure), R(9),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(9), U8(2),
/* 11 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(9), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(9),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -459,7 +459,7 @@ constant pool: [
FIXED_ARRAY_TYPE,
]
handlers: [
[45, 299, 305],
[45, 298, 304],
]
---
@ -471,7 +471,7 @@ snippet: "
"
frame size: 14
parameter count: 1
bytecode array length: 484
bytecode array length: 483
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(33),
@ -481,10 +481,10 @@ bytecodes: [
B(Star), R(3),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(60),
B(JumpIfTrue), U8(59),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(129),
B(JumpIfTrue), U8(128),
B(LdaSmi), I8(79),
B(Star), R(5),
B(CallRuntime), U16(Runtime::kAbort), R(5), U8(1),
@ -499,7 +499,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(9),
B(Mov), R(closure), R(8),
/* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(8), U8(2),
/* 11 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(8), U8(2),
B(StaCurrentContextSlot), U8(5),
B(Star), R(8),
B(LdaImmutableCurrentContextSlot), U8(5),
@ -702,7 +702,7 @@ constant pool: [
Smi [305],
]
handlers: [
[51, 417, 423],
[51, 416, 422],
]
---
@ -714,7 +714,7 @@ snippet: "
"
frame size: 14
parameter count: 1
bytecode array length: 361
bytecode array length: 360
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(22),
@ -735,7 +735,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(7),
B(Mov), R(closure), R(6),
B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(6), U8(2),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(6), U8(2),
B(StaCurrentContextSlot), U8(5),
B(LdaUndefined),
B(Star), R(6),
@ -892,8 +892,8 @@ constant pool: [
FIXED_ARRAY_TYPE,
]
handlers: [
[63, 301, 307],
[66, 247, 249],
[62, 300, 306],
[65, 246, 248],
]
---
@ -905,7 +905,7 @@ snippet: "
"
frame size: 15
parameter count: 1
bytecode array length: 515
bytecode array length: 514
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(27),
@ -915,7 +915,7 @@ bytecodes: [
B(Star), R(3),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(77),
B(JumpIfTrue), U8(76),
B(LdaSmi), I8(79),
B(Star), R(5),
B(CallRuntime), U16(Runtime::kAbort), R(5), U8(1),
@ -929,7 +929,7 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(6),
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(5), U8(2),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(5), U8(2),
B(StaCurrentContextSlot), U8(5),
B(LdaUndefined),
B(Star), R(5),
@ -1148,7 +1148,7 @@ constant pool: [
FIXED_ARRAY_TYPE,
]
handlers: [
[68, 446, 452],
[71, 392, 394],
[67, 445, 451],
[70, 391, 393],
]