Commit 094cb0e9 authored by Leszek Swirski's avatar Leszek Swirski Committed by Commit Bot

[ignition] Use jump table for "finally" deferred commands

Bug: v8:6218
Change-Id: I5d245ea485c93fcc03fcd95c82ae0474f31ffa5e
Reviewed-on: https://chromium-review.googlesource.com/505491
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#45341}
parent bb90a2e8
......@@ -191,22 +191,20 @@ class BytecodeGenerator::ControlScope::DeferredCommands final {
// Applies all recorded control-flow commands after the finally-block again.
// This generates a dynamic dispatch on the token from the entry point.
void ApplyDeferredCommands() {
// The fall-through path is covered by the default case, hence +1 here.
SwitchBuilder dispatch(builder(), static_cast<int>(deferred_.size() + 1));
for (size_t i = 0; i < deferred_.size(); ++i) {
Entry& entry = deferred_[i];
builder()->LoadLiteral(Smi::FromInt(entry.token));
builder()->CompareOperation(Token::EQ_STRICT, token_register_);
dispatch.Case(ToBooleanMode::kAlreadyBoolean, static_cast<int>(i));
}
dispatch.DefaultAt(static_cast<int>(deferred_.size()));
for (size_t i = 0; i < deferred_.size(); ++i) {
Entry& entry = deferred_[i];
dispatch.SetCaseTarget(static_cast<int>(i));
builder()->LoadAccumulatorWithRegister(result_register_);
BytecodeJumpTable* jump_table =
builder()->AllocateJumpTable(static_cast<int>(deferred_.size()), 0);
BytecodeLabel fall_through;
builder()
->LoadAccumulatorWithRegister(token_register_)
.SwitchOnSmiNoFeedback(jump_table)
.Jump(&fall_through);
for (const Entry& entry : deferred_) {
builder()
->Bind(jump_table, entry.token)
.LoadAccumulatorWithRegister(result_register_);
execution_control()->PerformCommand(entry.command, entry.statement);
}
dispatch.SetCaseTarget(static_cast<int>(deferred_.size()));
builder()->Bind(&fall_through);
}
BytecodeArrayBuilder* builder() { return generator_->builder(); }
......
......@@ -16,7 +16,7 @@ snippet: "
"
frame size: 19
parameter count: 1
bytecode array length: 1003
bytecode array length: 969
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -256,7 +256,7 @@ bytecodes: [
B(Star), R(6),
B(LdaZero),
B(Star), R(5),
B(JumpConstant), U8(20),
B(JumpConstant), U8(22),
B(Ldar), R(15),
B(ReThrow),
B(Ldar), R(15),
......@@ -317,7 +317,7 @@ bytecodes: [
B(Star), R(6),
B(LdaSmi), I8(1),
B(Star), R(5),
B(Jump), U8(168),
B(Jump), U8(163),
B(Ldar), R(14),
B(ReThrow),
B(Ldar), R(14),
......@@ -332,12 +332,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
B(Ldar), R(11),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(10),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(21),
B(Ldar), R(9),
B(SwitchOnSmiNoFeedback), U8(19), U8(2), I8(0),
B(Jump), U8(26),
B(PopContext), R(1),
B(PopContext), R(1),
......@@ -367,7 +363,7 @@ bytecodes: [
B(Jump), U8(54),
B(Star), R(9),
B(Ldar), R(closure),
B(CreateCatchContext), R(9), U8(12), U8(19),
B(CreateCatchContext), R(9), U8(12), U8(21),
B(Star), R(8),
B(LdaTheHole),
B(SetPendingMessage),
......@@ -405,24 +401,8 @@ bytecodes: [
B(CallJSRuntime), U8(%async_function_promise_release), R(8), U8(2),
B(Ldar), R(7),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(34),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(31),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(3),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(25),
B(LdaSmi), I8(4),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(5),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(19),
B(Ldar), R(5),
B(SwitchOnSmiNoFeedback), U8(23), U8(6), I8(0),
B(Jump), U8(20),
B(Ldar), R(6),
/* 57 S> */ B(Return),
......@@ -459,12 +439,20 @@ constant pool: [
FIXED_ARRAY_TYPE,
Smi [344],
Smi [367],
Smi [6],
Smi [23],
FIXED_ARRAY_TYPE,
Smi [315],
Smi [310],
Smi [6],
Smi [9],
Smi [12],
Smi [15],
Smi [18],
Smi [21],
]
handlers: [
[61, 916, 922],
[64, 862, 864],
[61, 911, 917],
[64, 857, 859],
[81, 403, 409],
[84, 355, 357],
[496, 620, 622],
......@@ -479,7 +467,7 @@ snippet: "
"
frame size: 19
parameter count: 1
bytecode array length: 1061
bytecode array length: 1015
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -726,7 +714,7 @@ bytecodes: [
B(Star), R(6),
B(LdaZero),
B(Star), R(5),
B(JumpConstant), U8(20),
B(JumpConstant), U8(23),
B(Ldar), R(15),
B(ReThrow),
B(Ldar), R(15),
......@@ -787,7 +775,7 @@ bytecodes: [
B(Star), R(6),
B(LdaSmi), I8(1),
B(Star), R(5),
B(Jump), U8(191),
B(Jump), U8(180),
B(Ldar), R(14),
B(ReThrow),
B(Ldar), R(14),
......@@ -802,15 +790,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
B(Ldar), R(11),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(16),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(27),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(38),
B(Ldar), R(9),
B(SwitchOnSmiNoFeedback), U8(19), U8(3), I8(0),
B(Jump), U8(43),
B(PopContext), R(1),
B(PopContext), R(1),
......@@ -848,7 +829,7 @@ bytecodes: [
B(Jump), U8(54),
B(Star), R(9),
B(Ldar), R(closure),
B(CreateCatchContext), R(9), U8(12), U8(19),
B(CreateCatchContext), R(9), U8(12), U8(22),
B(Star), R(8),
B(LdaTheHole),
B(SetPendingMessage),
......@@ -886,27 +867,8 @@ bytecodes: [
B(CallJSRuntime), U8(%async_function_promise_release), R(8), U8(2),
B(Ldar), R(7),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(40),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(37),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(34),
B(LdaSmi), I8(3),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(31),
B(LdaSmi), I8(4),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(42),
B(LdaSmi), I8(5),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(39),
B(LdaSmi), I8(6),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(36),
B(Ldar), R(5),
B(SwitchOnSmiNoFeedback), U8(24), U8(7), I8(0),
B(Jump), U8(37),
B(Ldar), R(6),
/* 68 S> */ B(Return),
......@@ -951,12 +913,22 @@ constant pool: [
FIXED_ARRAY_TYPE,
Smi [344],
Smi [367],
Smi [6],
Smi [23],
Smi [40],
FIXED_ARRAY_TYPE,
Smi [338],
Smi [327],
Smi [6],
Smi [9],
Smi [12],
Smi [15],
Smi [32],
Smi [35],
Smi [38],
]
handlers: [
[61, 951, 957],
[64, 897, 899],
[61, 940, 946],
[64, 886, 888],
[81, 415, 421],
[84, 367, 369],
[508, 632, 634],
......@@ -974,7 +946,7 @@ snippet: "
"
frame size: 19
parameter count: 1
bytecode array length: 1037
bytecode array length: 1003
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -1230,7 +1202,7 @@ bytecodes: [
B(Star), R(6),
B(LdaZero),
B(Star), R(5),
B(JumpConstant), U8(20),
B(JumpConstant), U8(22),
B(Ldar), R(15),
B(ReThrow),
B(Ldar), R(15),
......@@ -1291,7 +1263,7 @@ bytecodes: [
B(Star), R(6),
B(LdaSmi), I8(1),
B(Star), R(5),
B(Jump), U8(168),
B(Jump), U8(163),
B(Ldar), R(14),
B(ReThrow),
B(Ldar), R(14),
......@@ -1306,12 +1278,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
B(Ldar), R(11),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(10),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(21),
B(Ldar), R(9),
B(SwitchOnSmiNoFeedback), U8(19), U8(2), I8(0),
B(Jump), U8(26),
B(PopContext), R(1),
B(PopContext), R(1),
......@@ -1341,7 +1309,7 @@ bytecodes: [
B(Jump), U8(54),
B(Star), R(9),
B(Ldar), R(closure),
B(CreateCatchContext), R(9), U8(12), U8(19),
B(CreateCatchContext), R(9), U8(12), U8(21),
B(Star), R(8),
B(LdaTheHole),
B(SetPendingMessage),
......@@ -1379,24 +1347,8 @@ bytecodes: [
B(CallJSRuntime), U8(%async_function_promise_release), R(8), U8(2),
B(Ldar), R(7),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(34),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(31),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(3),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(25),
B(LdaSmi), I8(4),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(5),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(19),
B(Ldar), R(5),
B(SwitchOnSmiNoFeedback), U8(23), U8(6), I8(0),
B(Jump), U8(20),
B(Ldar), R(6),
/* 114 S> */ B(Return),
......@@ -1433,12 +1385,20 @@ constant pool: [
FIXED_ARRAY_TYPE,
Smi [344],
Smi [367],
Smi [6],
Smi [23],
FIXED_ARRAY_TYPE,
Smi [315],
Smi [310],
Smi [6],
Smi [9],
Smi [12],
Smi [15],
Smi [18],
Smi [21],
]
handlers: [
[61, 950, 956],
[64, 896, 898],
[61, 945, 951],
[64, 891, 893],
[81, 437, 443],
[84, 389, 391],
[530, 654, 656],
......@@ -1454,7 +1414,7 @@ snippet: "
"
frame size: 12
parameter count: 1
bytecode array length: 533
bytecode array length: 511
bytecodes: [
B(CreateFunctionContext), U8(9),
B(PushContext), R(0),
......@@ -1605,12 +1565,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(9), U8(1),
B(Ldar), R(8),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(10),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(12),
B(Ldar), R(6),
B(SwitchOnSmiNoFeedback), U8(12), U8(2), I8(0),
B(Jump), U8(13),
B(LdaZero),
B(Star), R(2),
......@@ -1633,7 +1589,7 @@ bytecodes: [
B(Jump), U8(54),
B(Star), R(6),
B(Ldar), R(closure),
B(CreateCatchContext), R(6), U8(7), U8(12),
B(CreateCatchContext), R(6), U8(7), U8(14),
B(Star), R(5),
B(LdaTheHole),
B(SetPendingMessage),
......@@ -1671,18 +1627,8 @@ bytecodes: [
B(CallJSRuntime), U8(%async_function_promise_release), R(5), U8(2),
B(Ldar), R(4),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(2),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(2),
B(JumpIfTrue), U8(33),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(2),
B(JumpIfTrue), U8(30),
B(LdaSmi), I8(3),
B(TestEqualStrictNoFeedback), R(2),
B(JumpIfTrue), U8(27),
B(Ldar), R(2),
B(SwitchOnSmiNoFeedback), U8(15), U8(4), I8(0),
B(Jump), U8(28),
B(LdaCurrentContextSlot), U8(12),
B(Star), R(6),
......@@ -1714,11 +1660,17 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [14],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [23],
Smi [26],
Smi [29],
]
handlers: [
[17, 450, 456],
[20, 396, 398],
[17, 445, 451],
[20, 391, 393],
[35, 195, 201],
[38, 147, 149],
[276, 288, 290],
......
......@@ -11,7 +11,7 @@ snippet: "
"
frame size: 15
parameter count: 1
bytecode array length: 262
bytecode array length: 263
bytecodes: [
/* 30 E> */ B(StackCheck),
B(LdaZero),
......@@ -116,9 +116,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(7), U8(1),
B(Ldar), R(11),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(4),
B(Ldar), R(9),
B(SwitchOnSmiNoFeedback), U8(10), U8(1), I8(0),
B(Jump), U8(5),
B(Ldar), R(10),
B(ReThrow),
......@@ -136,6 +135,7 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [6],
]
handlers: [
[7, 124, 130],
......@@ -150,7 +150,7 @@ snippet: "
"
frame size: 16
parameter count: 1
bytecode array length: 275
bytecode array length: 270
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaConstant), U8(0),
......@@ -257,12 +257,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(8), U8(1),
B(Ldar), R(12),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(10),
B(JumpIfTrue), U8(10),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(10),
B(JumpIfTrue), U8(7),
B(Ldar), R(10),
B(SwitchOnSmiNoFeedback), U8(10), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(11),
/* 85 S> */ B(Return),
......@@ -282,6 +278,8 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [9],
]
handlers: [
[11, 127, 133],
......@@ -298,7 +296,7 @@ snippet: "
"
frame size: 15
parameter count: 1
bytecode array length: 280
bytecode array length: 281
bytecodes: [
/* 30 E> */ B(StackCheck),
B(LdaZero),
......@@ -411,9 +409,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(7), U8(1),
B(Ldar), R(11),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(4),
B(Ldar), R(9),
B(SwitchOnSmiNoFeedback), U8(10), U8(1), I8(0),
B(Jump), U8(5),
B(Ldar), R(10),
B(ReThrow),
......@@ -431,6 +428,7 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [6],
]
handlers: [
[7, 142, 148],
......@@ -445,7 +443,7 @@ snippet: "
"
frame size: 14
parameter count: 1
bytecode array length: 286
bytecode array length: 281
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(3), U8(1), R(8),
......@@ -555,12 +553,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(6), U8(1),
B(Ldar), R(10),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(10),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(7),
B(Ldar), R(8),
B(SwitchOnSmiNoFeedback), U8(12), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(9),
/* 105 S> */ B(Return),
......@@ -582,6 +576,8 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [9],
]
handlers: [
[15, 138, 144],
......
......@@ -15,7 +15,7 @@ snippet: "
"
frame size: 17
parameter count: 2
bytecode array length: 262
bytecode array length: 263
bytecodes: [
/* 10 E> */ B(StackCheck),
B(LdaZero),
......@@ -120,9 +120,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(9), U8(1),
B(Ldar), R(13),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(11),
B(JumpIfTrue), U8(4),
B(Ldar), R(11),
B(SwitchOnSmiNoFeedback), U8(9), U8(1), I8(0),
B(Jump), U8(5),
B(Ldar), R(12),
B(ReThrow),
......@@ -139,6 +138,7 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [6],
]
handlers: [
[7, 124, 130],
......@@ -155,7 +155,7 @@ snippet: "
"
frame size: 22
parameter count: 2
bytecode array length: 347
bytecode array length: 348
bytecodes: [
B(CreateFunctionContext), U8(4),
B(PushContext), R(7),
......@@ -298,9 +298,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(6), U8(1),
B(Ldar), R(12),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(10),
B(JumpIfTrue), U8(4),
B(Ldar), R(10),
B(SwitchOnSmiNoFeedback), U8(13), U8(1), I8(0),
B(Jump), U8(7),
B(PopContext), R(7),
B(Ldar), R(11),
......@@ -323,6 +322,7 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [6],
]
handlers: [
[35, 205, 211],
......@@ -339,7 +339,7 @@ snippet: "
"
frame size: 15
parameter count: 2
bytecode array length: 280
bytecode array length: 281
bytecodes: [
/* 10 E> */ B(StackCheck),
B(LdaZero),
......@@ -453,9 +453,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(7), U8(1),
B(Ldar), R(11),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(4),
B(Ldar), R(9),
B(SwitchOnSmiNoFeedback), U8(11), U8(1), I8(0),
B(Jump), U8(5),
B(Ldar), R(10),
B(ReThrow),
......@@ -474,6 +473,7 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [6],
]
handlers: [
[7, 142, 148],
......@@ -490,7 +490,7 @@ snippet: "
"
frame size: 20
parameter count: 2
bytecode array length: 300
bytecode array length: 301
bytecodes: [
/* 10 E> */ B(StackCheck),
B(LdaZero),
......@@ -611,9 +611,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
B(Ldar), R(16),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(14),
B(JumpIfTrue), U8(4),
B(Ldar), R(14),
B(SwitchOnSmiNoFeedback), U8(11), U8(1), I8(0),
B(Jump), U8(5),
B(Ldar), R(15),
B(ReThrow),
......@@ -632,6 +631,7 @@ constant pool: [
FIXED_ARRAY_TYPE,
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
FIXED_ARRAY_TYPE,
Smi [6],
]
handlers: [
[7, 162, 168],
......@@ -648,7 +648,7 @@ snippet: "
"
frame size: 15
parameter count: 2
bytecode array length: 619
bytecode array length: 603
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -699,7 +699,7 @@ bytecodes: [
B(Star), R(7),
B(LdaZero),
B(Star), R(6),
B(JumpConstant), U8(13),
B(JumpConstant), U8(14),
B(Ldar), R(11),
/* 11 E> */ B(Throw),
B(Ldar), R(closure),
......@@ -851,9 +851,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
B(Ldar), R(11),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(4),
B(Ldar), R(9),
B(SwitchOnSmiNoFeedback), U8(13), U8(1), I8(0),
B(Jump), U8(15),
B(PopContext), R(1),
B(PopContext), R(1),
......@@ -885,18 +884,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(9), U8(1),
B(Ldar), R(8),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(19),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(16),
B(LdaSmi), I8(3),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(Ldar), R(6),
B(SwitchOnSmiNoFeedback), U8(15), U8(4), I8(0),
B(Jump), U8(14),
B(Ldar), R(7),
/* 55 S> */ B(Return),
......@@ -923,10 +912,15 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [449],
Smi [6],
Smi [450],
Smi [6],
Smi [9],
Smi [12],
Smi [15],
]
handlers: [
[56, 552, 558],
[56, 553, 559],
[137, 334, 340],
[140, 290, 292],
[426, 442, 444],
......@@ -941,7 +935,7 @@ snippet: "
"
frame size: 18
parameter count: 2
bytecode array length: 740
bytecode array length: 712
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -992,7 +986,7 @@ bytecodes: [
B(Star), R(6),
B(LdaZero),
B(Star), R(5),
B(JumpConstant), U8(14),
B(JumpConstant), U8(16),
B(Ldar), R(10),
/* 11 E> */ B(Throw),
B(Ldar), R(closure),
......@@ -1184,12 +1178,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(11), U8(1),
B(Ldar), R(10),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(10),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(17),
B(Ldar), R(8),
B(SwitchOnSmiNoFeedback), U8(14), U8(2), I8(0),
B(Jump), U8(28),
B(PopContext), R(1),
B(PopContext), R(1),
......@@ -1227,21 +1217,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(8), U8(1),
B(Ldar), R(7),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(25),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(3),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(19),
B(LdaSmi), I8(4),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(16),
B(Ldar), R(5),
B(SwitchOnSmiNoFeedback), U8(17), U8(5), I8(0),
B(Jump), U8(17),
B(Ldar), R(6),
/* 49 S> */ B(Return),
......@@ -1271,10 +1248,17 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [561],
Smi [6],
Smi [19],
Smi [556],
Smi [6],
Smi [9],
Smi [12],
Smi [15],
Smi [18],
]
handlers: [
[56, 664, 670],
[56, 659, 665],
[137, 426, 432],
[140, 382, 384],
[519, 535, 537],
......@@ -1289,7 +1273,7 @@ snippet: "
"
frame size: 14
parameter count: 2
bytecode array length: 573
bytecode array length: 563
bytecodes: [
B(CreateFunctionContext), U8(10),
B(PushContext), R(0),
......@@ -1454,9 +1438,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(11), U8(1),
B(Ldar), R(10),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(4),
B(Ldar), R(8),
B(SwitchOnSmiNoFeedback), U8(12), U8(1), I8(0),
B(Jump), U8(9),
B(PopContext), R(1),
B(PopContext), R(1),
......@@ -1478,7 +1461,7 @@ bytecodes: [
B(Jump), U8(54),
B(Star), R(8),
B(Ldar), R(closure),
B(CreateCatchContext), R(8), U8(7), U8(12),
B(CreateCatchContext), R(8), U8(7), U8(13),
B(Star), R(7),
B(LdaTheHole),
B(SetPendingMessage),
......@@ -1516,15 +1499,8 @@ bytecodes: [
B(CallJSRuntime), U8(%async_function_promise_release), R(7), U8(2),
B(Ldar), R(6),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(4),
B(JumpIfTrue), U8(16),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(4),
B(JumpIfTrue), U8(13),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(4),
B(JumpIfTrue), U8(10),
B(Ldar), R(4),
B(SwitchOnSmiNoFeedback), U8(14), U8(3), I8(0),
B(Jump), U8(11),
B(Ldar), R(5),
/* 60 S> */ B(Return),
......@@ -1548,11 +1524,15 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [6],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [9],
Smi [12],
]
handlers: [
[21, 513, 519],
[24, 459, 461],
[21, 514, 520],
[24, 460, 462],
[41, 242, 248],
[44, 194, 196],
[334, 350, 352],
......@@ -1567,7 +1547,7 @@ snippet: "
"
frame size: 19
parameter count: 2
bytecode array length: 765
bytecode array length: 743
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -1795,12 +1775,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
B(Ldar), R(11),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(10),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(20),
B(Ldar), R(9),
B(SwitchOnSmiNoFeedback), U8(13), U8(2), I8(0),
B(Jump), U8(25),
B(PopContext), R(1),
B(PopContext), R(1),
......@@ -1830,7 +1806,7 @@ bytecodes: [
B(Jump), U8(54),
B(Star), R(9),
B(Ldar), R(closure),
B(CreateCatchContext), R(9), U8(8), U8(13),
B(CreateCatchContext), R(9), U8(8), U8(15),
B(Star), R(8),
B(LdaTheHole),
B(SetPendingMessage),
......@@ -1868,18 +1844,8 @@ bytecodes: [
B(CallJSRuntime), U8(%async_function_promise_release), R(8), U8(2),
B(Ldar), R(7),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(19),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(16),
B(LdaSmi), I8(3),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(13),
B(Ldar), R(5),
B(SwitchOnSmiNoFeedback), U8(16), U8(4), I8(0),
B(Jump), U8(14),
B(Ldar), R(6),
/* 54 S> */ B(Return),
......@@ -1906,11 +1872,17 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [22],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [9],
Smi [12],
Smi [15],
]
handlers: [
[65, 696, 702],
[68, 642, 644],
[65, 691, 697],
[68, 637, 639],
[85, 401, 407],
[88, 353, 355],
[494, 510, 512],
......
......@@ -13,7 +13,7 @@ snippet: "
"
frame size: 12
parameter count: 1
bytecode array length: 192
bytecode array length: 181
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -88,15 +88,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(6), U8(1),
B(Ldar), R(5),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(16),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(13),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(10),
B(Ldar), R(3),
B(SwitchOnSmiNoFeedback), U8(1), U8(3), I8(0),
B(Jump), U8(11),
B(Ldar), R(4),
/* 16 S> */ B(Return),
......@@ -109,6 +102,9 @@ bytecodes: [
]
constant pool: [
Smi [52],
Smi [6],
Smi [9],
Smi [12],
]
handlers: [
[52, 134, 140],
......@@ -121,7 +117,7 @@ snippet: "
"
frame size: 12
parameter count: 1
bytecode array length: 276
bytecode array length: 259
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -230,18 +226,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(6), U8(1),
B(Ldar), R(5),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(19),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(16),
B(LdaSmi), I8(3),
B(TestEqualStrictNoFeedback), R(3),
B(JumpIfTrue), U8(13),
B(Ldar), R(3),
B(SwitchOnSmiNoFeedback), U8(2), U8(4), I8(0),
B(Jump), U8(14),
B(Ldar), R(4),
/* 25 S> */ B(Return),
......@@ -257,6 +243,10 @@ bytecodes: [
constant pool: [
Smi [52],
Smi [126],
Smi [6],
Smi [9],
Smi [12],
Smi [15],
]
handlers: [
[52, 209, 215],
......@@ -269,7 +259,7 @@ snippet: "
"
frame size: 18
parameter count: 1
bytecode array length: 736
bytecode array length: 708
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -318,7 +308,7 @@ bytecodes: [
B(Star), R(6),
B(LdaZero),
B(Star), R(5),
B(JumpConstant), U8(15),
B(JumpConstant), U8(17),
B(Ldar), R(10),
/* 11 E> */ B(Throw),
B(Ldar), R(closure),
......@@ -510,12 +500,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(11), U8(1),
B(Ldar), R(10),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(10),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(17),
B(Ldar), R(8),
B(SwitchOnSmiNoFeedback), U8(15), U8(2), I8(0),
B(Jump), U8(28),
B(PopContext), R(1),
B(PopContext), R(1),
......@@ -553,21 +539,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(8), U8(1),
B(Ldar), R(7),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(25),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(3),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(19),
B(LdaSmi), I8(4),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(16),
B(Ldar), R(5),
B(SwitchOnSmiNoFeedback), U8(18), U8(5), I8(0),
B(Jump), U8(17),
B(Ldar), R(6),
/* 44 S> */ B(Return),
......@@ -598,10 +571,17 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [561],
Smi [6],
Smi [19],
Smi [556],
Smi [6],
Smi [9],
Smi [12],
Smi [15],
Smi [18],
]
handlers: [
[52, 660, 666],
[52, 655, 661],
[133, 422, 428],
[136, 378, 380],
[515, 531, 533],
......
......@@ -273,7 +273,7 @@ snippet: "
"
frame size: 15
parameter count: 1
bytecode array length: 350
bytecode array length: 339
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -417,15 +417,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(9), U8(1),
B(Ldar), R(8),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(16),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(10),
B(Ldar), R(6),
B(SwitchOnSmiNoFeedback), U8(4), U8(3), I8(0),
B(Jump), U8(11),
B(Ldar), R(7),
/* 62 S> */ B(Return),
......@@ -441,6 +434,9 @@ constant pool: [
FIXED_ARRAY_TYPE,
FIXED_ARRAY_TYPE,
FIXED_ARRAY_TYPE,
Smi [6],
Smi [9],
Smi [12],
]
handlers: [
[52, 292, 298],
......@@ -455,7 +451,7 @@ snippet: "
"
frame size: 14
parameter count: 1
bytecode array length: 469
bytecode array length: 452
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -645,18 +641,8 @@ bytecodes: [
B(CallRuntime), U16(Runtime::k_GeneratorClose), R(8), U8(1),
B(Ldar), R(7),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(19),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(16),
B(LdaSmi), I8(3),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(13),
B(Ldar), R(5),
B(SwitchOnSmiNoFeedback), U8(7), U8(4), I8(0),
B(Jump), U8(14),
B(Ldar), R(6),
/* 56 S> */ B(Return),
......@@ -677,6 +663,10 @@ constant pool: [
FIXED_ARRAY_TYPE,
Smi [60],
Smi [303],
Smi [6],
Smi [9],
Smi [12],
Smi [15],
]
handlers: [
[52, 402, 408],
......@@ -691,7 +681,7 @@ snippet: "
"
frame size: 12
parameter count: 1
bytecode array length: 315
bytecode array length: 304
bytecodes: [
B(CreateFunctionContext), U8(5),
B(PushContext), R(0),
......@@ -824,15 +814,8 @@ bytecodes: [
B(CallJSRuntime), U8(%async_function_promise_release), R(7), U8(2),
B(Ldar), R(6),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(4),
B(JumpIfTrue), U8(16),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(4),
B(JumpIfTrue), U8(13),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(4),
B(JumpIfTrue), U8(10),
B(Ldar), R(4),
B(SwitchOnSmiNoFeedback), U8(5), U8(3), I8(0),
B(Jump), U8(11),
B(Ldar), R(5),
/* 67 S> */ B(Return),
......@@ -849,6 +832,9 @@ constant pool: [
FIXED_ARRAY_TYPE,
ONE_BYTE_INTERNALIZED_STRING_TYPE [".catch"],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [9],
Smi [12],
]
handlers: [
[17, 255, 261],
......@@ -864,7 +850,7 @@ snippet: "
"
frame size: 15
parameter count: 1
bytecode array length: 508
bytecode array length: 491
bytecodes: [
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(26),
......@@ -1068,18 +1054,8 @@ bytecodes: [
B(CallJSRuntime), U8(%async_function_promise_release), R(8), U8(2),
B(Ldar), R(7),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(19),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(16),
B(LdaSmi), I8(3),
B(TestEqualStrictNoFeedback), R(5),
B(JumpIfTrue), U8(13),
B(Ldar), R(5),
B(SwitchOnSmiNoFeedback), U8(7), U8(4), I8(0),
B(Jump), U8(14),
B(Ldar), R(6),
/* 61 S> */ B(Return),
......@@ -1100,6 +1076,10 @@ constant pool: [
Smi [83],
ONE_BYTE_INTERNALIZED_STRING_TYPE [".catch"],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [9],
Smi [12],
Smi [15],
]
handlers: [
[61, 439, 445],
......
......@@ -12,7 +12,7 @@ snippet: "
"
frame size: 4
parameter count: 1
bytecode array length: 46
bytecode array length: 47
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
......@@ -33,9 +33,8 @@ bytecodes: [
B(Star), R(0),
B(Ldar), R(3),
/* 72 E> */ B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(1),
B(JumpIfTrue), U8(4),
B(Ldar), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(Jump), U8(5),
B(Ldar), R(2),
B(ReThrow),
......@@ -43,6 +42,7 @@ bytecodes: [
/* 79 S> */ B(Return),
]
constant pool: [
Smi [6],
]
handlers: [
[8, 12, 18],
......@@ -55,7 +55,7 @@ snippet: "
"
frame size: 7
parameter count: 1
bytecode array length: 73
bytecode array length: 74
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
......@@ -89,9 +89,8 @@ bytecodes: [
B(Star), R(0),
B(Ldar), R(4),
/* 92 E> */ B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(2),
B(JumpIfTrue), U8(4),
B(Ldar), R(2),
B(SwitchOnSmiNoFeedback), U8(2), U8(1), I8(0),
B(Jump), U8(5),
B(Ldar), R(3),
B(ReThrow),
......@@ -101,6 +100,7 @@ bytecodes: [
constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["e"],
FIXED_ARRAY_TYPE,
Smi [6],
]
handlers: [
[8, 39, 45],
......@@ -115,7 +115,7 @@ snippet: "
"
frame size: 8
parameter count: 1
bytecode array length: 96
bytecode array length: 97
bytecodes: [
/* 30 E> */ B(StackCheck),
B(Mov), R(context), R(4),
......@@ -160,9 +160,8 @@ bytecodes: [
B(Star), R(0),
B(Ldar), R(4),
/* 116 E> */ B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(2),
B(JumpIfTrue), U8(4),
B(Ldar), R(2),
B(SwitchOnSmiNoFeedback), U8(3), U8(1), I8(0),
B(Jump), U8(5),
B(Ldar), R(3),
B(ReThrow),
......@@ -173,6 +172,7 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["e"],
FIXED_ARRAY_TYPE,
FIXED_ARRAY_TYPE,
Smi [6],
]
handlers: [
[4, 62, 68],
......
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