Commit 4fe1d715 authored by Caitlin Potter's avatar Caitlin Potter Committed by Commit Bot

[interpreter] make `suspend_id` an immediate operand to SuspendGenerator

Remove need for shuffling of accumulator and operand registers when
suspending a generator

BUG=v8:6351
TBR=bmeurer@chromium.org

Change-Id: I372509adc03b9781716412b809639554fe16e372
Reviewed-on: https://chromium-review.googlesource.com/578377
Commit-Queue: Caitlin Potter <caitp@igalia.com>
Reviewed-by: 's avatarCaitlin Potter <caitp@igalia.com>
Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#46883}
parent 832e5b9f
......@@ -2355,7 +2355,6 @@ void BytecodeGraphBuilder::VisitForInStep() {
}
void BytecodeGraphBuilder::VisitSuspendGenerator() {
Node* state = environment()->LookupAccumulator();
Node* generator = environment()->LookupRegister(
bytecode_iterator().GetRegisterOperand(0));
interpreter::Register first_reg = bytecode_iterator().GetRegisterOperand(1);
......@@ -2363,6 +2362,8 @@ void BytecodeGraphBuilder::VisitSuspendGenerator() {
CHECK_EQ(0, first_reg.index());
int register_count =
static_cast<int>(bytecode_iterator().GetRegisterCountOperand(2));
Node* suspend_id = jsgraph()->SmiConstant(
bytecode_iterator().GetUnsignedImmediateOperand(3));
// The offsets used by the bytecode iterator are relative to a different base
// than what is used in the interpreter, hence the addition.
......@@ -2374,7 +2375,7 @@ void BytecodeGraphBuilder::VisitSuspendGenerator() {
Node** value_inputs = local_zone()->NewArray<Node*>(value_input_count);
value_inputs[0] = generator;
value_inputs[1] = state;
value_inputs[1] = suspend_id;
value_inputs[2] = offset;
for (int i = 0; i < register_count; ++i) {
value_inputs[3 + i] =
......
......@@ -1245,8 +1245,9 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadModuleVariable(int cell_index,
}
BytecodeArrayBuilder& BytecodeArrayBuilder::SuspendGenerator(
Register generator, RegisterList registers) {
OutputSuspendGenerator(generator, registers, registers.register_count());
Register generator, RegisterList registers, int suspend_id) {
OutputSuspendGenerator(generator, registers, registers.register_count(),
suspend_id);
return *this;
}
......
......@@ -404,7 +404,8 @@ class V8_EXPORT_PRIVATE BytecodeArrayBuilder final
// Generators.
BytecodeArrayBuilder& SuspendGenerator(Register generator,
RegisterList registers);
RegisterList registers,
int suspend_id);
BytecodeArrayBuilder& RestoreGeneratorState(Register generator);
BytecodeArrayBuilder& RestoreGeneratorRegisters(Register generator,
RegisterList registers);
......
......@@ -2564,17 +2564,9 @@ void BytecodeGenerator::VisitAssignment(Assignment* expr) {
// accumulator.
void BytecodeGenerator::BuildSuspendPoint(int suspend_id) {
RegisterList registers(0, register_allocator()->next_register_index());
RegisterAllocationScope reg_scope(this);
// TODO(caitp): eliminate register to hold output by making SuspendGenerator
// take an immediate input.
Register output = register_allocator()->NewRegister();
// Save context, registers, and state. Then return.
builder()
->StoreAccumulatorInRegister(output)
.LoadLiteral(Smi::FromInt(suspend_id))
.SuspendGenerator(generator_object_, registers)
.LoadAccumulatorWithRegister(output);
builder()->SuspendGenerator(generator_object_, registers, suspend_id);
builder()->SetReturnPosition(kNoSourcePosition, info()->literal());
builder()->Return(); // Hard return (ignore any finally blocks).
......
......@@ -310,8 +310,8 @@ namespace interpreter {
\
/* Generators */ \
V(RestoreGeneratorState, AccumulatorUse::kWrite, OperandType::kReg) \
V(SuspendGenerator, AccumulatorUse::kRead, OperandType::kReg, \
OperandType::kRegList, OperandType::kRegCount) \
V(SuspendGenerator, AccumulatorUse::kNone, OperandType::kReg, \
OperandType::kRegList, OperandType::kRegCount, OperandType::kUImm) \
V(RestoreGeneratorRegisters, AccumulatorUse::kNone, OperandType::kReg, \
OperandType::kRegOutList, OperandType::kRegCount) \
\
......
......@@ -440,6 +440,10 @@ Node* InterpreterAssembler::BytecodeOperandUImmWord(int operand_index) {
return ChangeUint32ToWord(BytecodeOperandUImm(operand_index));
}
Node* InterpreterAssembler::BytecodeOperandUImmSmi(int operand_index) {
return SmiFromWord32(BytecodeOperandUImm(operand_index));
}
Node* InterpreterAssembler::BytecodeOperandImm(int operand_index) {
DCHECK_EQ(OperandType::kImm,
Bytecodes::GetOperandType(bytecode_, operand_index));
......
......@@ -45,6 +45,9 @@ class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler {
// Returns the word-size unsigned immediate for bytecode operand
// |operand_index| in the current bytecode.
compiler::Node* BytecodeOperandUImmWord(int operand_index);
// Returns the unsigned smi immediate for bytecode operand |operand_index| in
// the current bytecode.
compiler::Node* BytecodeOperandUImmSmi(int operand_index);
// Returns the 32-bit signed immediate for bytecode operand |operand_index|
// in the current bytecode.
compiler::Node* BytecodeOperandImm(int operand_index);
......
......@@ -3223,10 +3223,11 @@ IGNITION_HANDLER(ExtraWide, InterpreterAssembler) {
IGNITION_HANDLER(Illegal, InterpreterAssembler) { Abort(kInvalidBytecode); }
// SuspendGenerator <generator> <first input register> <register count>
// <suspend_id>
//
// Exports the register file and stores it into the generator. Also stores the
// current context, the state given in the accumulator, and the current bytecode
// offset (for debugging purposes) into the generator.
// current context, |suspend_id|, and the current bytecode offset (for debugging
// purposes) into the generator.
IGNITION_HANDLER(SuspendGenerator, InterpreterAssembler) {
Node* generator_reg = BytecodeOperandReg(0);
......@@ -3245,7 +3246,7 @@ IGNITION_HANDLER(SuspendGenerator, InterpreterAssembler) {
Node* array =
LoadObjectField(generator, JSGeneratorObject::kRegisterFileOffset);
Node* context = GetContext();
Node* state = GetAccumulator();
Node* suspend_id = BytecodeOperandUImmSmi(3);
// Bytecode operand 1 should be always 0 (we are always store registers
// from the beginning).
......@@ -3255,7 +3256,8 @@ IGNITION_HANDLER(SuspendGenerator, InterpreterAssembler) {
Node* register_count = ChangeUint32ToWord(BytecodeOperandCount(2));
ExportRegisterFile(array, register_count);
StoreObjectField(generator, JSGeneratorObject::kContextOffset, context);
StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, state);
StoreObjectField(generator, JSGeneratorObject::kContinuationOffset,
suspend_id);
// Store the bytecode offset in the [input_or_debug_pos] field, to be used by
// the inspector.
......
......@@ -651,7 +651,7 @@ snippet: "
"
frame size: 20
parameter count: 2
bytecode array length: 360
bytecode array length: 354
bytecodes: [
B(Mov), R(new_target), R(11),
B(Ldar), R(new_target),
......@@ -675,11 +675,8 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(14), U8(2),
B(Star), R(3),
/* 11 E> */ B(StackCheck),
B(LdaZero),
B(Mov), R(3), R(11),
B(Mov), R(3), R(14),
/* 11 E> */ B(SuspendGenerator), R(11), R(0), U8(14),
B(Ldar), R(14),
B(Star), R(11),
/* 11 E> */ B(SuspendGenerator), R(11), R(0), U8(14), U8(0),
/* 55 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(14),
B(LdaSmi), I8(-2),
......@@ -806,7 +803,7 @@ bytecodes: [
/* 55 S> */ B(Return),
]
constant pool: [
Smi [52],
Smi [46],
Smi [10],
Smi [7],
SYMBOL_TYPE,
......@@ -820,9 +817,9 @@ constant pool: [
FIXED_ARRAY_TYPE,
]
handlers: [
[106, 224, 230],
[109, 188, 190],
[290, 300, 302],
[100, 218, 224],
[103, 182, 184],
[284, 294, 296],
]
---
......@@ -834,7 +831,7 @@ snippet: "
"
frame size: 19
parameter count: 2
bytecode array length: 439
bytecode array length: 428
bytecodes: [
B(Mov), R(new_target), R(10),
B(Ldar), R(new_target),
......@@ -858,11 +855,8 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(13), U8(2),
B(Star), R(2),
/* 11 E> */ B(StackCheck),
B(LdaZero),
B(Mov), R(2), R(10),
B(Mov), R(2), R(13),
/* 11 E> */ B(SuspendGenerator), R(10), R(0), U8(13),
B(Ldar), R(13),
B(Star), R(10),
/* 11 E> */ B(SuspendGenerator), R(10), R(0), U8(13), U8(0),
/* 49 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(13),
B(LdaSmi), I8(-2),
......@@ -906,7 +900,7 @@ bytecodes: [
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(7), U8(12),
B(JumpIfToBooleanTrue), U8(79),
B(JumpIfToBooleanTrue), U8(74),
B(LdaNamedProperty), R(5), U8(8), U8(14),
B(Star), R(7),
B(LdaSmi), I8(2),
......@@ -918,10 +912,7 @@ bytecodes: [
B(Star), R(18),
B(Mov), R(0), R(17),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(17), U8(2),
B(Star), R(17),
B(LdaSmi), I8(1),
B(SuspendGenerator), R(10), R(0), U8(17),
B(Ldar), R(17),
B(SuspendGenerator), R(10), R(0), U8(17), U8(1),
/* 49 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(17),
B(LdaSmi), I8(-2),
......@@ -938,7 +929,7 @@ bytecodes: [
B(Jump), U8(56),
B(LdaZero),
B(Star), R(6),
B(JumpLoop), U8(125), I8(0),
B(JumpLoop), U8(120), I8(0),
B(Jump), U8(36),
B(Star), R(17),
B(Ldar), R(closure),
......@@ -1020,12 +1011,12 @@ bytecodes: [
/* 49 S> */ B(Return),
]
constant pool: [
Smi [52],
Smi [115],
Smi [46],
Smi [109],
Smi [10],
Smi [7],
SYMBOL_TYPE,
Smi [87],
Smi [82],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
......@@ -1040,9 +1031,9 @@ constant pool: [
Smi [9],
]
handlers: [
[106, 296, 302],
[109, 260, 262],
[363, 373, 375],
[100, 285, 291],
[103, 249, 251],
[352, 362, 364],
]
---
......@@ -1268,7 +1259,7 @@ snippet: "
"
frame size: 25
parameter count: 2
bytecode array length: 518
bytecode array length: 514
bytecodes: [
B(Mov), R(new_target), R(11),
B(Ldar), R(new_target),
......@@ -1330,7 +1321,7 @@ bytecodes: [
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(4), U8(12),
B(JumpIfToBooleanTrue), U8(76),
B(JumpIfToBooleanTrue), U8(72),
B(LdaNamedProperty), R(5), U8(5), U8(14),
B(Star), R(7),
B(LdaSmi), I8(2),
......@@ -1342,10 +1333,7 @@ bytecodes: [
B(Mov), R(0), R(23),
B(Mov), R(10), R(24),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(22), U8(3),
B(Star), R(22),
B(LdaZero),
B(SuspendGenerator), R(11), R(0), U8(22),
B(Ldar), R(22),
B(SuspendGenerator), R(11), R(0), U8(22), U8(0),
/* 54 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(22),
B(LdaSmi), I8(-2),
......@@ -1361,7 +1349,7 @@ bytecodes: [
/* 45 E> */ B(ReThrow),
B(LdaZero),
B(Star), R(6),
B(JumpLoop), U8(122), I8(0),
B(JumpLoop), U8(118), I8(0),
B(Jump), U8(40),
B(Star), R(22),
B(Ldar), R(closure),
......@@ -1500,7 +1488,7 @@ bytecodes: [
constant pool: [
Smi [91],
SYMBOL_TYPE,
Smi [89],
Smi [85],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
......@@ -1514,10 +1502,10 @@ constant pool: [
Smi [9],
]
handlers: [
[70, 473, 479],
[73, 428, 430],
[82, 273, 279],
[85, 233, 235],
[339, 349, 351],
[70, 469, 475],
[73, 424, 426],
[82, 269, 275],
[85, 229, 231],
[335, 345, 347],
]
......@@ -13,7 +13,7 @@ snippet: "
"
frame size: 5
parameter count: 1
bytecode array length: 91
bytecode array length: 85
bytecodes: [
B(Mov), R(new_target), R(1),
B(Ldar), R(new_target),
......@@ -33,11 +33,8 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(0),
/* 11 E> */ B(StackCheck),
B(LdaZero),
B(Mov), R(0), R(1),
B(Mov), R(0), R(3),
/* 11 E> */ B(SuspendGenerator), R(1), R(0), U8(3),
B(Ldar), R(3),
B(Star), R(1),
/* 11 E> */ B(SuspendGenerator), R(1), R(0), U8(3), U8(0),
/* 16 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -54,7 +51,7 @@ bytecodes: [
/* 16 S> */ B(Return),
]
constant pool: [
Smi [44],
Smi [38],
Smi [10],
Smi [7],
]
......@@ -68,7 +65,7 @@ snippet: "
"
frame size: 5
parameter count: 1
bytecode array length: 141
bytecode array length: 130
bytecodes: [
B(Mov), R(new_target), R(1),
B(Ldar), R(new_target),
......@@ -88,11 +85,8 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(0),
/* 11 E> */ B(StackCheck),
B(LdaZero),
B(Mov), R(0), R(1),
B(Mov), R(0), R(3),
/* 11 E> */ B(SuspendGenerator), R(1), R(0), U8(3),
B(Ldar), R(3),
B(Star), R(1),
/* 11 E> */ B(SuspendGenerator), R(1), R(0), U8(3), U8(0),
/* 25 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -110,10 +104,7 @@ bytecodes: [
B(LdaFalse),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(Star), R(3),
B(LdaSmi), I8(1),
B(SuspendGenerator), R(1), R(0), U8(3),
B(Ldar), R(3),
B(SuspendGenerator), R(1), R(0), U8(3), U8(1),
/* 25 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -130,8 +121,8 @@ bytecodes: [
/* 25 S> */ B(Return),
]
constant pool: [
Smi [44],
Smi [94],
Smi [38],
Smi [83],
Smi [10],
Smi [7],
Smi [10],
......@@ -147,7 +138,7 @@ snippet: "
"
frame size: 18
parameter count: 1
bytecode array length: 433
bytecode array length: 422
bytecodes: [
B(Mov), R(new_target), R(10),
B(Ldar), R(new_target),
......@@ -167,11 +158,8 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(12), U8(2),
B(Star), R(2),
/* 11 E> */ B(StackCheck),
B(LdaZero),
B(Mov), R(2), R(10),
B(Mov), R(2), R(12),
/* 11 E> */ B(SuspendGenerator), R(10), R(0), U8(12),
B(Ldar), R(12),
B(Star), R(10),
/* 11 E> */ B(SuspendGenerator), R(10), R(0), U8(12), U8(0),
/* 44 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(12),
B(LdaSmi), I8(-2),
......@@ -215,7 +203,7 @@ bytecodes: [
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(8), U8(13),
B(JumpIfToBooleanTrue), U8(79),
B(JumpIfToBooleanTrue), U8(74),
B(LdaNamedProperty), R(5), U8(9), U8(15),
B(Star), R(7),
B(LdaSmi), I8(2),
......@@ -227,10 +215,7 @@ bytecodes: [
B(Star), R(17),
B(Mov), R(0), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(16), U8(2),
B(Star), R(16),
B(LdaSmi), I8(1),
B(SuspendGenerator), R(10), R(0), U8(16),
B(Ldar), R(16),
B(SuspendGenerator), R(10), R(0), U8(16), U8(1),
/* 44 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(16),
B(LdaSmi), I8(-2),
......@@ -247,7 +232,7 @@ bytecodes: [
B(Jump), U8(56),
B(LdaZero),
B(Star), R(6),
B(JumpLoop), U8(125), I8(0),
B(JumpLoop), U8(120), I8(0),
B(Jump), U8(36),
B(Star), R(16),
B(Ldar), R(closure),
......@@ -329,13 +314,13 @@ bytecodes: [
/* 44 S> */ B(Return),
]
constant pool: [
Smi [44],
Smi [109],
Smi [38],
Smi [103],
Smi [10],
Smi [7],
TUPLE2_TYPE,
SYMBOL_TYPE,
Smi [87],
Smi [82],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
......@@ -350,9 +335,9 @@ constant pool: [
Smi [9],
]
handlers: [
[98, 290, 296],
[101, 254, 256],
[357, 367, 369],
[92, 279, 285],
[95, 243, 245],
[346, 356, 358],
]
---
......@@ -363,7 +348,7 @@ snippet: "
"
frame size: 10
parameter count: 1
bytecode array length: 294
bytecode array length: 284
bytecodes: [
B(Mov), R(new_target), R(1),
B(Ldar), R(new_target),
......@@ -383,11 +368,8 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(0),
/* 38 E> */ B(StackCheck),
B(LdaZero),
B(Mov), R(0), R(1),
B(Mov), R(0), R(3),
/* 38 E> */ B(SuspendGenerator), R(1), R(0), U8(3),
B(Ldar), R(3),
B(Star), R(1),
/* 38 E> */ B(SuspendGenerator), R(1), R(0), U8(3), U8(0),
/* 54 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -454,11 +436,9 @@ bytecodes: [
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(LdaNamedProperty), R(3), U8(12), U8(16),
B(JumpIfToBooleanTrue), U8(37),
B(LdaSmi), I8(1),
B(Mov), R(3), R(9),
B(SuspendGenerator), R(1), R(0), U8(9),
B(Ldar), R(9),
B(JumpIfToBooleanTrue), U8(33),
B(Ldar), R(3),
B(SuspendGenerator), R(1), R(0), U8(9), U8(1),
/* 54 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(9),
B(LdaSmi), I8(-2),
......@@ -467,7 +447,7 @@ bytecodes: [
B(Star), R(6),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(Star), R(4),
B(JumpLoop), U8(150), I8(0),
B(JumpLoop), U8(146), I8(0),
B(LdaNamedProperty), R(3), U8(13), U8(18),
B(Star), R(5),
B(LdaSmi), I8(1),
......@@ -479,13 +459,13 @@ bytecodes: [
/* 54 S> */ B(Return),
]
constant pool: [
Smi [44],
Smi [107],
Smi [38],
Smi [101],
Smi [10],
Smi [7],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["g"],
SYMBOL_TYPE,
Smi [128],
Smi [124],
Smi [17],
Smi [37],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
......
......@@ -13,7 +13,7 @@ snippet: "
"
frame size: 5
parameter count: 2
bytecode array length: 110
bytecode array length: 106
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
......@@ -40,10 +40,7 @@ bytecodes: [
/* 0 E> */ B(StackCheck),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3),
B(Ldar), R(3),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3), U8(0),
/* 13 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -62,7 +59,7 @@ bytecodes: [
/* 13 S> */ B(Return),
]
constant pool: [
Smi [58],
Smi [54],
FIXED_ARRAY_TYPE,
Smi [10],
Smi [7],
......@@ -76,7 +73,7 @@ snippet: "
"
frame size: 5
parameter count: 2
bytecode array length: 110
bytecode array length: 106
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
......@@ -103,10 +100,7 @@ bytecodes: [
/* 0 E> */ B(StackCheck),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3),
B(Ldar), R(3),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3), U8(0),
/* 24 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -125,7 +119,7 @@ bytecodes: [
/* 24 S> */ B(Return),
]
constant pool: [
Smi [58],
Smi [54],
FIXED_ARRAY_TYPE,
Smi [10],
Smi [7],
......@@ -141,7 +135,7 @@ snippet: "
"
frame size: 6
parameter count: 2
bytecode array length: 154
bytecode array length: 150
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
......@@ -168,10 +162,7 @@ bytecodes: [
/* 0 E> */ B(StackCheck),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3),
B(Ldar), R(3),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3), U8(0),
/* 64 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -209,7 +200,7 @@ bytecodes: [
/* 64 S> */ B(Return),
]
constant pool: [
Smi [58],
Smi [54],
FIXED_ARRAY_TYPE,
Smi [10],
Smi [7],
......@@ -227,7 +218,7 @@ snippet: "
"
frame size: 5
parameter count: 2
bytecode array length: 152
bytecode array length: 148
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
......@@ -254,10 +245,7 @@ bytecodes: [
/* 0 E> */ B(StackCheck),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3),
B(Ldar), R(3),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3), U8(0),
/* 49 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -294,7 +282,7 @@ bytecodes: [
/* 49 S> */ B(Return),
]
constant pool: [
Smi [58],
Smi [54],
FIXED_ARRAY_TYPE,
Smi [10],
Smi [7],
......@@ -311,7 +299,7 @@ snippet: "
"
frame size: 5
parameter count: 2
bytecode array length: 156
bytecode array length: 152
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
......@@ -340,10 +328,7 @@ bytecodes: [
B(StaModuleVariable), I8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3),
B(Ldar), R(3),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3), U8(0),
/* 49 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -380,7 +365,7 @@ bytecodes: [
/* 49 S> */ B(Return),
]
constant pool: [
Smi [62],
Smi [58],
FIXED_ARRAY_TYPE,
Smi [10],
Smi [7],
......@@ -397,7 +382,7 @@ snippet: "
"
frame size: 5
parameter count: 2
bytecode array length: 160
bytecode array length: 156
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
......@@ -426,10 +411,7 @@ bytecodes: [
B(StaModuleVariable), I8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3),
B(Ldar), R(3),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3), U8(0),
/* 51 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -466,7 +448,7 @@ bytecodes: [
/* 51 S> */ B(Return),
]
constant pool: [
Smi [62],
Smi [58],
FIXED_ARRAY_TYPE,
Smi [10],
Smi [7],
......@@ -481,7 +463,7 @@ snippet: "
"
frame size: 5
parameter count: 2
bytecode array length: 121
bytecode array length: 117
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
......@@ -510,10 +492,7 @@ bytecodes: [
B(StaModuleVariable), I8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3),
B(Ldar), R(3),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3), U8(0),
/* 32 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -534,7 +513,7 @@ bytecodes: [
/* 32 S> */ B(Return),
]
constant pool: [
Smi [62],
Smi [58],
FIXED_ARRAY_TYPE,
Smi [10],
Smi [7],
......@@ -549,7 +528,7 @@ snippet: "
"
frame size: 8
parameter count: 2
bytecode array length: 154
bytecode array length: 150
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
......@@ -578,10 +557,7 @@ bytecodes: [
B(StaModuleVariable), I8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3),
B(Ldar), R(3),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3), U8(0),
/* 26 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -614,7 +590,7 @@ bytecodes: [
/* 26 S> */ B(Return),
]
constant pool: [
Smi [62],
Smi [58],
FIXED_ARRAY_TYPE,
Smi [10],
Smi [7],
......@@ -629,7 +605,7 @@ snippet: "
"
frame size: 5
parameter count: 2
bytecode array length: 110
bytecode array length: 106
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
......@@ -656,10 +632,7 @@ bytecodes: [
/* 0 E> */ B(StackCheck),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3),
B(Ldar), R(3),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3), U8(0),
/* 30 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -678,7 +651,7 @@ bytecodes: [
/* 30 S> */ B(Return),
]
constant pool: [
Smi [58],
Smi [54],
FIXED_ARRAY_TYPE,
Smi [10],
Smi [7],
......@@ -692,7 +665,7 @@ snippet: "
"
frame size: 5
parameter count: 2
bytecode array length: 110
bytecode array length: 106
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
......@@ -719,10 +692,7 @@ bytecodes: [
/* 0 E> */ B(StackCheck),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3),
B(Ldar), R(3),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3), U8(0),
/* 19 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -741,7 +711,7 @@ bytecodes: [
/* 19 S> */ B(Return),
]
constant pool: [
Smi [58],
Smi [54],
FIXED_ARRAY_TYPE,
Smi [10],
Smi [7],
......@@ -756,7 +726,7 @@ snippet: "
"
frame size: 7
parameter count: 2
bytecode array length: 148
bytecode array length: 144
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
......@@ -787,10 +757,7 @@ bytecodes: [
B(StaCurrentContextSlot), U8(5),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3),
B(Ldar), R(3),
/* 0 E> */ B(SuspendGenerator), R(0), R(0), U8(3), U8(0),
/* 45 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(3),
B(LdaSmi), I8(-2),
......@@ -819,7 +786,7 @@ bytecodes: [
/* 45 S> */ B(Return),
]
constant pool: [
Smi [68],
Smi [64],
FIXED_ARRAY_TYPE,
Smi [10],
Smi [7],
......
......@@ -272,7 +272,7 @@ snippet: "
"
frame size: 7
parameter count: 1
bytecode array length: 114
bytecode array length: 108
bytecodes: [
B(Mov), R(new_target), R(3),
B(Ldar), R(new_target),
......@@ -292,11 +292,8 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(5), U8(2),
B(Star), R(2),
/* 11 E> */ B(StackCheck),
B(LdaZero),
B(Mov), R(2), R(3),
B(Mov), R(2), R(5),
/* 11 E> */ B(SuspendGenerator), R(3), R(0), U8(5),
B(Ldar), R(5),
B(Star), R(3),
/* 11 E> */ B(SuspendGenerator), R(3), R(0), U8(5), U8(0),
/* 62 S> */ B(Return),
B(RestoreGeneratorRegisters), R(3), R(0), U8(5),
B(LdaSmi), I8(-2),
......@@ -324,7 +321,7 @@ bytecodes: [
/* 62 S> */ B(Return),
]
constant pool: [
Smi [44],
Smi [38],
Smi [10],
Smi [7],
]
......@@ -340,7 +337,7 @@ snippet: "
"
frame size: 6
parameter count: 1
bytecode array length: 181
bytecode array length: 170
bytecodes: [
B(Mov), R(new_target), R(2),
B(Ldar), R(new_target),
......@@ -360,11 +357,8 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(Star), R(1),
/* 11 E> */ B(StackCheck),
B(LdaZero),
B(Mov), R(1), R(2),
B(Mov), R(1), R(4),
/* 11 E> */ B(SuspendGenerator), R(2), R(0), U8(4),
B(Ldar), R(4),
B(Star), R(2),
/* 11 E> */ B(SuspendGenerator), R(2), R(0), U8(4), U8(0),
/* 56 S> */ B(Return),
B(RestoreGeneratorRegisters), R(2), R(0), U8(4),
B(LdaSmi), I8(-2),
......@@ -389,16 +383,13 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
/* 36 S> */ B(LdaSmi), I8(10),
/* 36 E> */ B(TestLessThan), R(0), U8(4),
B(JumpIfFalse), U8(61),
B(JumpIfFalse), U8(56),
/* 18 E> */ B(StackCheck),
/* 47 S> */ B(LdaFalse),
B(Star), R(5),
B(Mov), R(0), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
B(Star), R(4),
B(LdaSmi), I8(1),
B(SuspendGenerator), R(2), R(0), U8(4),
B(Ldar), R(4),
B(SuspendGenerator), R(2), R(0), U8(4), U8(1),
/* 56 S> */ B(Return),
B(RestoreGeneratorRegisters), R(2), R(0), U8(4),
B(LdaSmi), I8(-2),
......@@ -414,16 +405,16 @@ bytecodes: [
/* 44 S> */ B(Ldar), R(0),
B(Inc), U8(5),
B(Star), R(0),
B(JumpLoop), U8(84), I8(0),
B(JumpLoop), U8(79), I8(0),
B(LdaUndefined),
/* 56 S> */ B(Return),
]
constant pool: [
Smi [44],
Smi [75],
Smi [38],
Smi [69],
Smi [10],
Smi [7],
Smi [48],
Smi [43],
Smi [10],
Smi [7],
]
......@@ -536,7 +527,7 @@ snippet: "
"
frame size: 14
parameter count: 1
bytecode array length: 268
bytecode array length: 264
bytecodes: [
B(Mov), R(new_target), R(3),
B(Ldar), R(new_target),
......@@ -575,16 +566,13 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kAbort), R(9), U8(1),
/* 41 S> */ B(LdaSmi), I8(10),
/* 41 E> */ B(TestLessThan), R(0), U8(4),
B(JumpIfFalse), U8(63),
B(JumpIfFalse), U8(59),
/* 23 E> */ B(StackCheck),
/* 52 S> */ B(Mov), R(3), R(9),
B(Mov), R(0), R(10),
B(Mov), R(2), R(11),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(9), U8(3),
B(Star), R(9),
B(LdaZero),
B(SuspendGenerator), R(3), R(0), U8(9),
B(Ldar), R(9),
B(SuspendGenerator), R(3), R(0), U8(9), U8(0),
/* 61 S> */ B(Return),
B(RestoreGeneratorRegisters), R(3), R(0), U8(9),
B(LdaSmi), I8(-2),
......@@ -601,7 +589,7 @@ bytecodes: [
/* 49 S> */ B(Ldar), R(0),
B(Inc), U8(5),
B(Star), R(0),
B(JumpLoop), U8(86), I8(0),
B(JumpLoop), U8(82), I8(0),
B(LdaUndefined),
B(Star), R(9),
B(LdaUndefined),
......@@ -661,14 +649,14 @@ bytecodes: [
]
constant pool: [
Smi [51],
Smi [50],
Smi [46],
ONE_BYTE_INTERNALIZED_STRING_TYPE [".catch"],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [9],
]
handlers: [
[62, 223, 229],
[65, 178, 180],
[62, 219, 225],
[65, 174, 176],
]
......@@ -363,7 +363,7 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) {
.StoreModuleVariable(1, 42);
// Emit generator operations.
builder.SuspendGenerator(reg, reg_list)
builder.SuspendGenerator(reg, reg_list, 0)
.RestoreGeneratorState(reg)
.RestoreGeneratorRegisters(reg, reg_list);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment