Commit cf93071c authored by Seth Brenith's avatar Seth Brenith Committed by Commit Bot

[interpreter] Short Star bytecode

Design doc:
https://docs.google.com/document/d/1g_NExMT78II_KnIYNa9MvyPYIj23qAiFUEsyemY5KRk/edit

This change adds 16 new interpreter opcodes, kStar0 through kStar15, so
that we can use a single byte to represent the common operation of
storing to a low-numbered register. This generally reduces the quantity
of bytecode generated on web sites by 8-9%.

In order to not degrade speed, a couple of other changes are required:

The existing lookahead logic to check for Star after certain other
bytecode handlers is updated to check for these new short Star codes
instead. Furthermore, that lookahead logic is updated to contain its own
copy of the dispatch jump rather than merging control flow with the
lookahead-failed case, to improve branch prediction.

A bunch of constants use bytecode size in bytes as a proxy for the size
or complexity of a function, and are adjusted downward proportionally to
the decrease in generated bytecode size.

Other small drive-by fix: update generate-bytecode-expectations to emit
\n instead of \r\n on Windows.

Change-Id: I6307c2b0f5794a3a1088bb0fb94f6e1615441ed5
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2641180Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#72773}
parent 102b2624
...@@ -855,6 +855,15 @@ void BaselineCompiler::VisitStar() { ...@@ -855,6 +855,15 @@ void BaselineCompiler::VisitStar() {
StoreRegister(0, kInterpreterAccumulatorRegister); StoreRegister(0, kInterpreterAccumulatorRegister);
} }
#define SHORT_STAR_VISITOR(Name, ...) \
void BaselineCompiler::Visit##Name() { \
__ StoreRegister( \
interpreter::Register::FromShortStar(interpreter::Bytecode::k##Name), \
kInterpreterAccumulatorRegister); \
}
SHORT_STAR_BYTECODE_LIST(SHORT_STAR_VISITOR)
#undef SHORT_STAR_VISITOR
void BaselineCompiler::VisitMov() { void BaselineCompiler::VisitMov() {
BaselineAssembler::ScratchRegisterScope scratch_scope(&basm_); BaselineAssembler::ScratchRegisterScope scratch_scope(&basm_);
Register scratch = scratch_scope.AcquireScratch(); Register scratch = scratch_scope.AcquireScratch();
......
...@@ -19,9 +19,18 @@ void WriteBytecode(std::ofstream& out, Bytecode bytecode, ...@@ -19,9 +19,18 @@ void WriteBytecode(std::ofstream& out, Bytecode bytecode,
int table_index) { int table_index) {
DCHECK_NOT_NULL(count); DCHECK_NOT_NULL(count);
if (Bytecodes::BytecodeHasHandler(bytecode, operand_scale)) { if (Bytecodes::BytecodeHasHandler(bytecode, operand_scale)) {
out << " \\\n V(" << Bytecodes::ToString(bytecode, operand_scale, "") std::string name = Bytecodes::ToString(bytecode, operand_scale, "");
<< "Handler, interpreter::OperandScale::k" << operand_scale
<< ", interpreter::Bytecode::k" << Bytecodes::ToString(bytecode) << ")"; // The handler for Star0 is used for all short star codes. Rename it to
// something more generic.
if (bytecode == Bytecode::kStar0) {
DCHECK_EQ(operand_scale, OperandScale::kSingle);
name = "ShortStar";
}
out << " \\\n V(" << name << "Handler, interpreter::OperandScale::k"
<< operand_scale << ", interpreter::Bytecode::k"
<< Bytecodes::ToString(bytecode) << ")";
offset_table[table_index] = *count; offset_table[table_index] = *count;
(*count)++; (*count)++;
} else { } else {
...@@ -62,7 +71,8 @@ void WriteHeader(const char* header_filename) { ...@@ -62,7 +71,8 @@ void WriteHeader(const char* header_filename) {
#undef ADD_BYTECODES #undef ADD_BYTECODES
int extra_wide_count = count - wide_count - single_count; int extra_wide_count = count - wide_count - single_count;
CHECK_GT(single_count, wide_count); CHECK_GT(single_count, wide_count);
CHECK_EQ(single_count, Bytecodes::kBytecodeCount); CHECK_EQ(single_count,
Bytecodes::kBytecodeCount - Bytecodes::kShortStarCount + 1);
CHECK_EQ(wide_count, extra_wide_count); CHECK_EQ(wide_count, extra_wide_count);
out << "\n\nconstexpr int kNumberOfBytecodeHandlers = " << single_count out << "\n\nconstexpr int kNumberOfBytecodeHandlers = " << single_count
<< ";\n" << ";\n"
...@@ -73,9 +83,10 @@ void WriteHeader(const char* header_filename) { ...@@ -73,9 +83,10 @@ void WriteHeader(const char* header_filename) {
<< "// Mapping from Bytecode to a dense form with all the illegal\n" << "// Mapping from Bytecode to a dense form with all the illegal\n"
<< "// wide Bytecodes removed. Used to index into the builtins table.\n" << "// wide Bytecodes removed. Used to index into the builtins table.\n"
<< "constexpr uint8_t kWideBytecodeToBuiltinsMapping[" << "constexpr uint8_t kWideBytecodeToBuiltinsMapping["
<< "kNumberOfBytecodeHandlers] = { \n"; << Bytecodes::kBytecodeCount << "] = { \n";
for (int i = single_count; i < 2 * single_count; ++i) { for (int i = Bytecodes::kBytecodeCount; i < 2 * Bytecodes::kBytecodeCount;
++i) {
int offset = offset_table[i]; int offset = offset_table[i];
if (offset == kIllegalBytecodeHandler) { if (offset == kIllegalBytecodeHandler) {
offset = kIllegalBytecodeHandlerEncoding; offset = kIllegalBytecodeHandlerEncoding;
......
...@@ -166,6 +166,11 @@ void UpdateInLiveness(Bytecode bytecode, BytecodeLivenessState* in_liveness, ...@@ -166,6 +166,11 @@ void UpdateInLiveness(Bytecode bytecode, BytecodeLivenessState* in_liveness,
} }
} }
if (Bytecodes::WritesImplicitRegister(bytecode)) {
in_liveness->MarkRegisterDead(
interpreter::Register::FromShortStar(bytecode).index());
}
if (Bytecodes::ReadsAccumulator(bytecode)) { if (Bytecodes::ReadsAccumulator(bytecode)) {
in_liveness->MarkAccumulatorLive(); in_liveness->MarkAccumulatorLive();
} }
...@@ -308,6 +313,10 @@ void UpdateAssignments(Bytecode bytecode, BytecodeLoopAssignments* assignments, ...@@ -308,6 +313,10 @@ void UpdateAssignments(Bytecode bytecode, BytecodeLoopAssignments* assignments,
break; break;
} }
} }
if (Bytecodes::WritesImplicitRegister(bytecode)) {
assignments->Add(interpreter::Register::FromShortStar(bytecode));
}
} }
} // namespace } // namespace
......
...@@ -1620,6 +1620,16 @@ void BytecodeGraphBuilder::VisitStar() { ...@@ -1620,6 +1620,16 @@ void BytecodeGraphBuilder::VisitStar() {
environment()->BindRegister(bytecode_iterator().GetRegisterOperand(0), value); environment()->BindRegister(bytecode_iterator().GetRegisterOperand(0), value);
} }
#define SHORT_STAR_VISITOR(Name, ...) \
void BytecodeGraphBuilder::Visit##Name() { \
Node* value = environment()->LookupAccumulator(); \
environment()->BindRegister( \
interpreter::Register::FromShortStar(interpreter::Bytecode::k##Name), \
value); \
}
SHORT_STAR_BYTECODE_LIST(SHORT_STAR_VISITOR)
#undef SHORT_STAR_VISITOR
void BytecodeGraphBuilder::VisitMov() { void BytecodeGraphBuilder::VisitMov() {
Node* value = Node* value =
environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
......
...@@ -405,6 +405,8 @@ class SerializerForBackgroundCompilation { ...@@ -405,6 +405,8 @@ class SerializerForBackgroundCompilation {
SUPPORTED_BYTECODE_LIST(DECLARE_VISIT_BYTECODE) SUPPORTED_BYTECODE_LIST(DECLARE_VISIT_BYTECODE)
#undef DECLARE_VISIT_BYTECODE #undef DECLARE_VISIT_BYTECODE
void VisitShortStar(interpreter::Register reg);
Hints& register_hints(interpreter::Register reg); Hints& register_hints(interpreter::Register reg);
// Return a vector containing the hints for the given register range (in // Return a vector containing the hints for the given register range (in
...@@ -1311,13 +1313,20 @@ void SerializerForBackgroundCompilation::TraverseBytecode() { ...@@ -1311,13 +1313,20 @@ void SerializerForBackgroundCompilation::TraverseBytecode() {
} }
} }
switch (iterator.current_bytecode()) { interpreter::Bytecode current_bytecode = iterator.current_bytecode();
switch (current_bytecode) {
#define DEFINE_BYTECODE_CASE(name) \ #define DEFINE_BYTECODE_CASE(name) \
case interpreter::Bytecode::k##name: \ case interpreter::Bytecode::k##name: \
Visit##name(&iterator); \ Visit##name(&iterator); \
break; break;
SUPPORTED_BYTECODE_LIST(DEFINE_BYTECODE_CASE) SUPPORTED_BYTECODE_LIST(DEFINE_BYTECODE_CASE)
#undef DEFINE_BYTECODE_CASE #undef DEFINE_BYTECODE_CASE
#define DEFINE_SHORT_STAR_CASE(Name, ...) case interpreter::Bytecode::k##Name:
SHORT_STAR_BYTECODE_LIST(DEFINE_SHORT_STAR_CASE)
#undef DEFINE_SHORT_STAR_CASE
VisitShortStar(interpreter::Register::FromShortStar(current_bytecode));
break;
} }
} }
...@@ -1698,6 +1707,11 @@ void SerializerForBackgroundCompilation::VisitStar( ...@@ -1698,6 +1707,11 @@ void SerializerForBackgroundCompilation::VisitStar(
register_hints(reg).Reset(&environment()->accumulator_hints(), zone()); register_hints(reg).Reset(&environment()->accumulator_hints(), zone());
} }
void SerializerForBackgroundCompilation::VisitShortStar(
interpreter::Register reg) {
register_hints(reg).Reset(&environment()->accumulator_hints(), zone());
}
void SerializerForBackgroundCompilation::VisitMov( void SerializerForBackgroundCompilation::VisitMov(
BytecodeArrayIterator* iterator) { BytecodeArrayIterator* iterator) {
interpreter::Register src = iterator->GetRegisterOperand(0); interpreter::Register src = iterator->GetRegisterOperand(0);
......
...@@ -27,16 +27,16 @@ static const int kProfilerTicksBeforeOptimization = 3; ...@@ -27,16 +27,16 @@ static const int kProfilerTicksBeforeOptimization = 3;
// The number of ticks required for optimizing a function increases with // The number of ticks required for optimizing a function increases with
// the size of the bytecode. This is in addition to the // the size of the bytecode. This is in addition to the
// kProfilerTicksBeforeOptimization required for any function. // kProfilerTicksBeforeOptimization required for any function.
static const int kBytecodeSizeAllowancePerTick = 1200; static const int kBytecodeSizeAllowancePerTick = 1100;
// Maximum size in bytes of generate code for a function to allow OSR. // Maximum size in bytes of generate code for a function to allow OSR.
static const int kOSRBytecodeSizeAllowanceBase = 132; static const int kOSRBytecodeSizeAllowanceBase = 119;
static const int kOSRBytecodeSizeAllowancePerTick = 48; static const int kOSRBytecodeSizeAllowancePerTick = 43;
// Maximum size in bytes of generated code for a function to be optimized // Maximum size in bytes of generated code for a function to be optimized
// the very first time it is seen on the stack. // the very first time it is seen on the stack.
static const int kMaxBytecodeSizeForEarlyOpt = 90; static const int kMaxBytecodeSizeForEarlyOpt = 81;
// Number of times a function has to be seen on the stack before it is // Number of times a function has to be seen on the stack before it is
// OSRed in TurboProp // OSRed in TurboProp
......
...@@ -499,12 +499,12 @@ DEFINE_BOOL_READONLY(enable_sealed_frozen_elements_kind, true, ...@@ -499,12 +499,12 @@ DEFINE_BOOL_READONLY(enable_sealed_frozen_elements_kind, true,
DEFINE_BOOL(unbox_double_arrays, true, "automatically unbox arrays of doubles") DEFINE_BOOL(unbox_double_arrays, true, "automatically unbox arrays of doubles")
DEFINE_BOOL_READONLY(string_slices, true, "use string slices") DEFINE_BOOL_READONLY(string_slices, true, "use string slices")
DEFINE_INT(interrupt_budget, 144 * KB, DEFINE_INT(interrupt_budget, 132 * KB,
"interrupt budget which should be used for the profiler counter") "interrupt budget which should be used for the profiler counter")
// Flags for inline caching and feedback vectors. // Flags for inline caching and feedback vectors.
DEFINE_BOOL(use_ic, true, "use inline caching") DEFINE_BOOL(use_ic, true, "use inline caching")
DEFINE_INT(budget_for_feedback_vector_allocation, 1 * KB, DEFINE_INT(budget_for_feedback_vector_allocation, 940,
"The budget in amount of bytecode executed by a function before we " "The budget in amount of bytecode executed by a function before we "
"decide to allocate feedback vectors") "decide to allocate feedback vectors")
DEFINE_INT(scale_factor_for_feedback_allocation, 4, DEFINE_INT(scale_factor_for_feedback_allocation, 4,
...@@ -571,7 +571,7 @@ DEFINE_BOOL( ...@@ -571,7 +571,7 @@ DEFINE_BOOL(
turboprop_as_toptier, false, turboprop_as_toptier, false,
"enable experimental turboprop compiler without further tierup to turbofan") "enable experimental turboprop compiler without further tierup to turbofan")
DEFINE_IMPLICATION(turboprop_as_toptier, turboprop) DEFINE_IMPLICATION(turboprop_as_toptier, turboprop)
DEFINE_VALUE_IMPLICATION(turboprop, interrupt_budget, 15 * KB) DEFINE_VALUE_IMPLICATION(turboprop, interrupt_budget, 14 * KB)
DEFINE_VALUE_IMPLICATION(turboprop, reuse_opt_code_count, 2) DEFINE_VALUE_IMPLICATION(turboprop, reuse_opt_code_count, 2)
DEFINE_UINT_READONLY(max_minimorphic_map_checks, 4, DEFINE_UINT_READONLY(max_minimorphic_map_checks, 4,
"max number of map checks to perform in minimorphic state") "max number of map checks to perform in minimorphic state")
...@@ -686,16 +686,16 @@ DEFINE_BOOL(turbo_splitting, true, "split nodes during scheduling in TurboFan") ...@@ -686,16 +686,16 @@ DEFINE_BOOL(turbo_splitting, true, "split nodes during scheduling in TurboFan")
DEFINE_BOOL(function_context_specialization, false, DEFINE_BOOL(function_context_specialization, false,
"enable function context specialization in TurboFan") "enable function context specialization in TurboFan")
DEFINE_BOOL(turbo_inlining, true, "enable inlining in TurboFan") DEFINE_BOOL(turbo_inlining, true, "enable inlining in TurboFan")
DEFINE_INT(max_inlined_bytecode_size, 500, DEFINE_INT(max_inlined_bytecode_size, 460,
"maximum size of bytecode for a single inlining") "maximum size of bytecode for a single inlining")
DEFINE_INT(max_inlined_bytecode_size_cumulative, 1000, DEFINE_INT(max_inlined_bytecode_size_cumulative, 920,
"maximum cumulative size of bytecode considered for inlining") "maximum cumulative size of bytecode considered for inlining")
DEFINE_INT(max_inlined_bytecode_size_absolute, 5000, DEFINE_INT(max_inlined_bytecode_size_absolute, 4600,
"maximum absolute size of bytecode considered for inlining") "maximum absolute size of bytecode considered for inlining")
DEFINE_FLOAT( DEFINE_FLOAT(
reserve_inline_budget_scale_factor, 1.2, reserve_inline_budget_scale_factor, 1.2,
"scale factor of bytecode size used to calculate the inlining budget") "scale factor of bytecode size used to calculate the inlining budget")
DEFINE_INT(max_inlined_bytecode_size_small, 30, DEFINE_INT(max_inlined_bytecode_size_small, 27,
"maximum size of bytecode considered for small function inlining") "maximum size of bytecode considered for small function inlining")
DEFINE_INT(max_optimized_bytecode_size, 60 * KB, DEFINE_INT(max_optimized_bytecode_size, 60 * KB,
"maximum bytecode size to " "maximum bytecode size to "
......
...@@ -197,7 +197,10 @@ void BytecodeArrayBuilder::OutputLdarRaw(Register reg) { ...@@ -197,7 +197,10 @@ void BytecodeArrayBuilder::OutputLdarRaw(Register reg) {
void BytecodeArrayBuilder::OutputStarRaw(Register reg) { void BytecodeArrayBuilder::OutputStarRaw(Register reg) {
uint32_t operand = static_cast<uint32_t>(reg.ToOperand()); uint32_t operand = static_cast<uint32_t>(reg.ToOperand());
BytecodeNode node(BytecodeNode::Star(BytecodeSourceInfo(), operand)); base::Optional<Bytecode> short_code = reg.TryToShortStar();
BytecodeNode node = short_code
? BytecodeNode(*short_code)
: BytecodeNode::Star(BytecodeSourceInfo(), operand);
Write(&node); Write(&node);
} }
...@@ -696,7 +699,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister( ...@@ -696,7 +699,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreAccumulatorInRegister(
SetDeferredSourceInfo(CurrentSourcePosition(Bytecode::kStar)); SetDeferredSourceInfo(CurrentSourcePosition(Bytecode::kStar));
register_optimizer_->DoStar(reg); register_optimizer_->DoStar(reg);
} else { } else {
OutputStar(reg); OutputStarRaw(reg);
} }
return *this; return *this;
} }
......
...@@ -18,11 +18,15 @@ const char* ImplicitRegisterUseToString( ...@@ -18,11 +18,15 @@ const char* ImplicitRegisterUseToString(
case ImplicitRegisterUse::kNone: case ImplicitRegisterUse::kNone:
return "None"; return "None";
case ImplicitRegisterUse::kReadAccumulator: case ImplicitRegisterUse::kReadAccumulator:
return "Read"; return "ReadAccumulator";
case ImplicitRegisterUse::kWriteAccumulator: case ImplicitRegisterUse::kWriteAccumulator:
return "Write"; return "WriteAccumulator";
case ImplicitRegisterUse::kWriteShortStar:
return "WriteShortStar";
case ImplicitRegisterUse::kReadWriteAccumulator: case ImplicitRegisterUse::kReadWriteAccumulator:
return "ReadWrite"; return "ReadWriteAccumulator";
case ImplicitRegisterUse::kReadAccumulatorWriteShortStar:
return "ReadAccumulatorWriteShortStar";
} }
UNREACHABLE(); UNREACHABLE();
} }
......
...@@ -113,7 +113,9 @@ enum class ImplicitRegisterUse : uint8_t { ...@@ -113,7 +113,9 @@ enum class ImplicitRegisterUse : uint8_t {
kNone = 0, kNone = 0,
kReadAccumulator = 1 << 0, kReadAccumulator = 1 << 0,
kWriteAccumulator = 1 << 1, kWriteAccumulator = 1 << 1,
kReadWriteAccumulator = kReadAccumulator | kWriteAccumulator kWriteShortStar = 1 << 2,
kReadWriteAccumulator = kReadAccumulator | kWriteAccumulator,
kReadAccumulatorWriteShortStar = kReadAccumulator | kWriteShortStar
}; };
constexpr inline ImplicitRegisterUse operator&(ImplicitRegisterUse lhs, constexpr inline ImplicitRegisterUse operator&(ImplicitRegisterUse lhs,
...@@ -186,6 +188,14 @@ class BytecodeOperands : public AllStatic { ...@@ -186,6 +188,14 @@ class BytecodeOperands : public AllStatic {
ImplicitRegisterUse::kWriteAccumulator; ImplicitRegisterUse::kWriteAccumulator;
} }
// Returns true if |implicit_register_use| writes to a
// register not specified by an operand.
static constexpr bool WritesImplicitRegister(
ImplicitRegisterUse implicit_register_use) {
return (implicit_register_use & ImplicitRegisterUse::kWriteShortStar) ==
ImplicitRegisterUse::kWriteShortStar;
}
// Returns true if |operand_type| is a scalable signed byte. // Returns true if |operand_type| is a scalable signed byte.
static constexpr bool IsScalableSignedByte(OperandType operand_type) { static constexpr bool IsScalableSignedByte(OperandType operand_type) {
return base::IsInRange(operand_type, OperandType::kImm, return base::IsInRange(operand_type, OperandType::kImm,
......
...@@ -20,7 +20,7 @@ namespace interpreter { ...@@ -20,7 +20,7 @@ namespace interpreter {
// in its stack-frame. Register hold parameters, this, and expression values. // in its stack-frame. Register hold parameters, this, and expression values.
class V8_EXPORT_PRIVATE Register final { class V8_EXPORT_PRIVATE Register final {
public: public:
explicit Register(int index = kInvalidIndex) : index_(index) {} constexpr explicit Register(int index = kInvalidIndex) : index_(index) {}
int index() const { return index_; } int index() const { return index_; }
bool is_parameter() const { return index() < 0; } bool is_parameter() const { return index() < 0; }
...@@ -58,11 +58,30 @@ class V8_EXPORT_PRIVATE Register final { ...@@ -58,11 +58,30 @@ class V8_EXPORT_PRIVATE Register final {
OperandSize SizeOfOperand() const; OperandSize SizeOfOperand() const;
int32_t ToOperand() const { return kRegisterFileStartOffset - index_; } constexpr int32_t ToOperand() const {
return kRegisterFileStartOffset - index_;
}
static Register FromOperand(int32_t operand) { static Register FromOperand(int32_t operand) {
return Register(kRegisterFileStartOffset - operand); return Register(kRegisterFileStartOffset - operand);
} }
static Register FromShortStar(Bytecode bytecode) {
DCHECK(Bytecodes::IsShortStar(bytecode));
return Register(static_cast<int>(Bytecode::kStar0) -
static_cast<int>(bytecode));
}
const base::Optional<Bytecode> TryToShortStar() const {
if (index() >= 0 && index() < Bytecodes::kShortStarCount) {
Bytecode bytecode =
static_cast<Bytecode>(static_cast<int>(Bytecode::kStar0) - index());
DCHECK_GE(bytecode, Bytecode::kFirstShortStar);
DCHECK_LE(bytecode, Bytecode::kLastShortStar);
return bytecode;
}
return {};
}
static bool AreContiguous(Register reg1, Register reg2, static bool AreContiguous(Register reg1, Register reg2,
Register reg3 = invalid_value(), Register reg3 = invalid_value(),
Register reg4 = invalid_value(), Register reg4 = invalid_value(),
......
...@@ -94,6 +94,13 @@ Bytecodes::kOperandKindSizes[3][BytecodeOperands::kOperandTypeCount] = { ...@@ -94,6 +94,13 @@ Bytecodes::kOperandKindSizes[3][BytecodeOperands::kOperandTypeCount] = {
}; };
// clang-format on // clang-format on
// Make sure kFirstShortStar and kLastShortStar are set correctly.
#define ASSERT_SHORT_STAR_RANGE(Name, ...) \
STATIC_ASSERT(Bytecode::k##Name >= Bytecode::kFirstShortStar && \
Bytecode::k##Name <= Bytecode::kLastShortStar);
SHORT_STAR_BYTECODE_LIST(ASSERT_SHORT_STAR_RANGE)
#undef ASSERT_SHORT_STAR_RANGE
// static // static
const char* Bytecodes::ToString(Bytecode bytecode) { const char* Bytecodes::ToString(Bytecode bytecode) {
switch (bytecode) { switch (bytecode) {
...@@ -264,6 +271,11 @@ bool Bytecodes::IsRegisterOutputOperandType(OperandType operand_type) { ...@@ -264,6 +271,11 @@ bool Bytecodes::IsRegisterOutputOperandType(OperandType operand_type) {
bool Bytecodes::IsStarLookahead(Bytecode bytecode, OperandScale operand_scale) { bool Bytecodes::IsStarLookahead(Bytecode bytecode, OperandScale operand_scale) {
if (operand_scale == OperandScale::kSingle) { if (operand_scale == OperandScale::kSingle) {
switch (bytecode) { switch (bytecode) {
// Short-star lookahead is required for correctness on kDebugBreak0. The
// handler for all short-star codes re-reads the opcode from the bytecode
// array and would not work correctly if it instead read kDebugBreak0.
case Bytecode::kDebugBreak0:
case Bytecode::kLdaZero: case Bytecode::kLdaZero:
case Bytecode::kLdaSmi: case Bytecode::kLdaSmi:
case Bytecode::kLdaNull: case Bytecode::kLdaNull:
...@@ -332,7 +344,8 @@ bool Bytecodes::IsUnsignedOperandType(OperandType operand_type) { ...@@ -332,7 +344,8 @@ bool Bytecodes::IsUnsignedOperandType(OperandType operand_type) {
// static // static
bool Bytecodes::BytecodeHasHandler(Bytecode bytecode, bool Bytecodes::BytecodeHasHandler(Bytecode bytecode,
OperandScale operand_scale) { OperandScale operand_scale) {
return operand_scale == OperandScale::kSingle || return (operand_scale == OperandScale::kSingle &&
(!IsShortStar(bytecode) || bytecode == Bytecode::kStar0)) ||
Bytecodes::IsBytecodeWithScalableOperands(bytecode); Bytecodes::IsBytecodeWithScalableOperands(bytecode);
} }
......
...@@ -21,9 +21,29 @@ namespace v8 { ...@@ -21,9 +21,29 @@ namespace v8 {
namespace internal { namespace internal {
namespace interpreter { namespace interpreter {
// The list of bytecodes which are interpreted by the interpreter. // The list of single-byte Star variants, in the format of BYTECODE_LIST.
#define SHORT_STAR_BYTECODE_LIST(V) \
V(Star15, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star14, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star13, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star12, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star11, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star10, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star9, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star8, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star7, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star6, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star5, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star4, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star3, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star2, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star1, ImplicitRegisterUse::kReadAccumulatorWriteShortStar) \
V(Star0, ImplicitRegisterUse::kReadAccumulatorWriteShortStar)
// The list of bytecodes which have unique handlers (no other bytecode is
// executed using identical code).
// Format is V(<bytecode>, <implicit_register_use>, <operands>). // Format is V(<bytecode>, <implicit_register_use>, <operands>).
#define BYTECODE_LIST(V) \ #define BYTECODE_LIST_WITH_UNIQUE_HANDLERS(V) \
/* Extended width operands */ \ /* Extended width operands */ \
V(Wide, ImplicitRegisterUse::kNone) \ V(Wide, ImplicitRegisterUse::kNone) \
V(ExtraWide, ImplicitRegisterUse::kNone) \ V(ExtraWide, ImplicitRegisterUse::kNone) \
...@@ -421,9 +441,17 @@ namespace interpreter { ...@@ -421,9 +441,17 @@ namespace interpreter {
V(IncBlockCounter, ImplicitRegisterUse::kNone, OperandType::kIdx) \ V(IncBlockCounter, ImplicitRegisterUse::kNone, OperandType::kIdx) \
\ \
/* Execution Abort (internal error) */ \ /* Execution Abort (internal error) */ \
V(Abort, ImplicitRegisterUse::kNone, OperandType::kIdx) \ V(Abort, ImplicitRegisterUse::kNone, OperandType::kIdx)
\
/* Illegal bytecode */ \ // The list of bytecodes which are interpreted by the interpreter.
// Format is V(<bytecode>, <implicit_register_use>, <operands>).
#define BYTECODE_LIST(V) \
BYTECODE_LIST_WITH_UNIQUE_HANDLERS(V) \
\
/* Special-case Star for common register numbers, to save space */ \
SHORT_STAR_BYTECODE_LIST(V) \
\
/* Illegal bytecode */ \
V(Illegal, ImplicitRegisterUse::kNone) V(Illegal, ImplicitRegisterUse::kNone)
// List of debug break bytecodes. // List of debug break bytecodes.
...@@ -523,7 +551,9 @@ enum class Bytecode : uint8_t { ...@@ -523,7 +551,9 @@ enum class Bytecode : uint8_t {
#define COUNT_BYTECODE(x, ...) +1 #define COUNT_BYTECODE(x, ...) +1
// The COUNT_BYTECODE macro will turn this into kLast = -1 +1 +1... which will // The COUNT_BYTECODE macro will turn this into kLast = -1 +1 +1... which will
// evaluate to the same value as the last real bytecode. // evaluate to the same value as the last real bytecode.
kLast = -1 BYTECODE_LIST(COUNT_BYTECODE) kLast = -1 BYTECODE_LIST(COUNT_BYTECODE),
kFirstShortStar = kStar15,
kLastShortStar = kStar0
#undef COUNT_BYTECODE #undef COUNT_BYTECODE
}; };
...@@ -535,6 +565,10 @@ class V8_EXPORT_PRIVATE Bytecodes final : public AllStatic { ...@@ -535,6 +565,10 @@ class V8_EXPORT_PRIVATE Bytecodes final : public AllStatic {
// The total number of bytecodes used. // The total number of bytecodes used.
static const int kBytecodeCount = static_cast<int>(Bytecode::kLast) + 1; static const int kBytecodeCount = static_cast<int>(Bytecode::kLast) + 1;
static const int kShortStarCount =
static_cast<int>(Bytecode::kLastShortStar) -
static_cast<int>(Bytecode::kFirstShortStar) + 1;
// Returns string representation of |bytecode|. // Returns string representation of |bytecode|.
static const char* ToString(Bytecode bytecode); static const char* ToString(Bytecode bytecode);
...@@ -606,6 +640,13 @@ class V8_EXPORT_PRIVATE Bytecodes final : public AllStatic { ...@@ -606,6 +640,13 @@ class V8_EXPORT_PRIVATE Bytecodes final : public AllStatic {
GetImplicitRegisterUse(bytecode)); GetImplicitRegisterUse(bytecode));
} }
// Returns true if |bytecode| writes to a register not specified by an
// operand.
static bool WritesImplicitRegister(Bytecode bytecode) {
return BytecodeOperands::WritesImplicitRegister(
GetImplicitRegisterUse(bytecode));
}
// Return true if |bytecode| is an accumulator load without effects, // Return true if |bytecode| is an accumulator load without effects,
// e.g. LdaConstant, LdaTrue, Ldar. // e.g. LdaConstant, LdaTrue, Ldar.
static constexpr bool IsAccumulatorLoadWithoutEffects(Bytecode bytecode) { static constexpr bool IsAccumulatorLoadWithoutEffects(Bytecode bytecode) {
...@@ -630,11 +671,20 @@ class V8_EXPORT_PRIVATE Bytecodes final : public AllStatic { ...@@ -630,11 +671,20 @@ class V8_EXPORT_PRIVATE Bytecodes final : public AllStatic {
bytecode == Bytecode::kTestTypeOf; bytecode == Bytecode::kTestTypeOf;
} }
static constexpr bool IsShortStar(Bytecode bytecode) {
return bytecode >= Bytecode::kFirstShortStar &&
bytecode <= Bytecode::kLastShortStar;
}
static constexpr bool IsAnyStar(Bytecode bytecode) {
return bytecode == Bytecode::kStar || IsShortStar(bytecode);
}
// Return true if |bytecode| is a register load without effects, // Return true if |bytecode| is a register load without effects,
// e.g. Mov, Star. // e.g. Mov, Star.
static constexpr bool IsRegisterLoadWithoutEffects(Bytecode bytecode) { static constexpr bool IsRegisterLoadWithoutEffects(Bytecode bytecode) {
return bytecode == Bytecode::kMov || bytecode == Bytecode::kPopContext || return bytecode == Bytecode::kMov || bytecode == Bytecode::kPopContext ||
bytecode == Bytecode::kPushContext || bytecode == Bytecode::kStar; bytecode == Bytecode::kPushContext || IsAnyStar(bytecode);
} }
// Returns true if the bytecode is a conditional jump taking // Returns true if the bytecode is a conditional jump taking
...@@ -724,7 +774,7 @@ class V8_EXPORT_PRIVATE Bytecodes final : public AllStatic { ...@@ -724,7 +774,7 @@ class V8_EXPORT_PRIVATE Bytecodes final : public AllStatic {
// Returns true if the bytecode is Ldar or Star. // Returns true if the bytecode is Ldar or Star.
static constexpr bool IsLdarOrStar(Bytecode bytecode) { static constexpr bool IsLdarOrStar(Bytecode bytecode) {
return bytecode == Bytecode::kLdar || bytecode == Bytecode::kStar; return bytecode == Bytecode::kLdar || IsAnyStar(bytecode);
} }
// Returns true if the bytecode is a call or a constructor call. // Returns true if the bytecode is a call or a constructor call.
......
...@@ -298,6 +298,35 @@ void InterpreterAssembler::StoreRegister(TNode<Object> value, ...@@ -298,6 +298,35 @@ void InterpreterAssembler::StoreRegister(TNode<Object> value,
RegisterFrameOffset(reg_index), value); RegisterFrameOffset(reg_index), value);
} }
void InterpreterAssembler::StoreRegisterForShortStar(TNode<Object> value,
TNode<WordT> opcode) {
DCHECK(Bytecodes::IsShortStar(bytecode_));
implicit_register_use_ =
implicit_register_use_ | ImplicitRegisterUse::kWriteShortStar;
CSA_ASSERT(
this, UintPtrGreaterThanOrEqual(opcode, UintPtrConstant(static_cast<int>(
Bytecode::kFirstShortStar))));
CSA_ASSERT(
this,
UintPtrLessThanOrEqual(
opcode, UintPtrConstant(static_cast<int>(Bytecode::kLastShortStar))));
// Compute the constant that we can add to a Bytecode value to map the range
// [Bytecode::kStar15, Bytecode::kStar0] to the range
// [Register(15).ToOperand(), Register(0).ToOperand()].
constexpr int short_star_to_operand =
Register(0).ToOperand() - static_cast<int>(Bytecode::kStar0);
// Make sure the values count in the right direction.
STATIC_ASSERT(short_star_to_operand ==
Register(1).ToOperand() - static_cast<int>(Bytecode::kStar1));
TNode<IntPtrT> offset =
IntPtrAdd(RegisterFrameOffset(Signed(opcode)),
IntPtrConstant(short_star_to_operand * kSystemPointerSize));
StoreFullTaggedNoWriteBarrier(GetInterpretedFramePointer(), offset, value);
}
void InterpreterAssembler::StoreRegisterAtOperandIndex(TNode<Object> value, void InterpreterAssembler::StoreRegisterAtOperandIndex(TNode<Object> value,
int operand_index) { int operand_index) {
StoreRegister(value, StoreRegister(value,
...@@ -1105,40 +1134,51 @@ TNode<WordT> InterpreterAssembler::LoadBytecode( ...@@ -1105,40 +1134,51 @@ TNode<WordT> InterpreterAssembler::LoadBytecode(
return ChangeUint32ToWord(bytecode); return ChangeUint32ToWord(bytecode);
} }
TNode<WordT> InterpreterAssembler::StarDispatchLookahead( void InterpreterAssembler::StarDispatchLookahead(TNode<WordT> target_bytecode) {
TNode<WordT> target_bytecode) {
Label do_inline_star(this), done(this); Label do_inline_star(this), done(this);
TVARIABLE(WordT, var_bytecode, target_bytecode); // Check whether the following opcode is one of the short Star codes. All
// opcodes higher than the short Star variants are invalid, and invalid
TNode<Int32T> star_bytecode = // opcodes are never deliberately written, so we can use a one-sided check.
Int32Constant(static_cast<int>(Bytecode::kStar)); // This is no less secure than the normal-length Star handler, which performs
TNode<BoolT> is_star = // no validation on its operand.
Word32Equal(TruncateWordToInt32(target_bytecode), star_bytecode); STATIC_ASSERT(static_cast<int>(Bytecode::kLastShortStar) + 1 ==
static_cast<int>(Bytecode::kIllegal));
STATIC_ASSERT(Bytecode::kIllegal == Bytecode::kLast);
TNode<Int32T> first_short_star_bytecode =
Int32Constant(static_cast<int>(Bytecode::kFirstShortStar));
TNode<BoolT> is_star = Uint32GreaterThanOrEqual(
TruncateWordToInt32(target_bytecode), first_short_star_bytecode);
Branch(is_star, &do_inline_star, &done); Branch(is_star, &do_inline_star, &done);
BIND(&do_inline_star); BIND(&do_inline_star);
{ {
InlineStar(); InlineShortStar(target_bytecode);
var_bytecode = LoadBytecode(BytecodeOffset());
Goto(&done); // Rather than merging control flow to a single indirect jump, we can get
// better branch prediction by duplicating it. This is because the
// instruction following a merged X + StarN is a bad predictor of the
// instruction following a non-merged X, and vice versa.
DispatchToBytecode(LoadBytecode(BytecodeOffset()), BytecodeOffset());
} }
BIND(&done); BIND(&done);
return var_bytecode.value();
} }
void InterpreterAssembler::InlineStar() { void InterpreterAssembler::InlineShortStar(TNode<WordT> target_bytecode) {
Bytecode previous_bytecode = bytecode_; Bytecode previous_bytecode = bytecode_;
ImplicitRegisterUse previous_acc_use = implicit_register_use_; ImplicitRegisterUse previous_acc_use = implicit_register_use_;
bytecode_ = Bytecode::kStar; // At this point we don't know statically what bytecode we're executing, but
// kStar0 has the right attributes (namely, no operands) for any of the short
// Star codes.
bytecode_ = Bytecode::kStar0;
implicit_register_use_ = ImplicitRegisterUse::kNone; implicit_register_use_ = ImplicitRegisterUse::kNone;
#ifdef V8_TRACE_UNOPTIMIZED #ifdef V8_TRACE_UNOPTIMIZED
TraceBytecode(Runtime::kTraceUnoptimizedBytecodeEntry); TraceBytecode(Runtime::kTraceUnoptimizedBytecodeEntry);
#endif #endif
StoreRegister(GetAccumulator(),
BytecodeOperandReg(0, LoadSensitivity::kSafe)); StoreRegisterForShortStar(GetAccumulator(), target_bytecode);
DCHECK_EQ(implicit_register_use_, DCHECK_EQ(implicit_register_use_,
Bytecodes::GetImplicitRegisterUse(bytecode_)); Bytecodes::GetImplicitRegisterUse(bytecode_));
...@@ -1153,9 +1193,13 @@ void InterpreterAssembler::Dispatch() { ...@@ -1153,9 +1193,13 @@ void InterpreterAssembler::Dispatch() {
DCHECK_IMPLIES(Bytecodes::MakesCallAlongCriticalPath(bytecode_), made_call_); DCHECK_IMPLIES(Bytecodes::MakesCallAlongCriticalPath(bytecode_), made_call_);
TNode<IntPtrT> target_offset = Advance(); TNode<IntPtrT> target_offset = Advance();
TNode<WordT> target_bytecode = LoadBytecode(target_offset); TNode<WordT> target_bytecode = LoadBytecode(target_offset);
DispatchToBytecodeWithOptionalStarLookahead(target_bytecode);
}
void InterpreterAssembler::DispatchToBytecodeWithOptionalStarLookahead(
TNode<WordT> target_bytecode) {
if (Bytecodes::IsStarLookahead(bytecode_, operand_scale_)) { if (Bytecodes::IsStarLookahead(bytecode_, operand_scale_)) {
target_bytecode = StarDispatchLookahead(target_bytecode); StarDispatchLookahead(target_bytecode);
} }
DispatchToBytecode(target_bytecode, BytecodeOffset()); DispatchToBytecode(target_bytecode, BytecodeOffset());
} }
......
...@@ -226,6 +226,12 @@ class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler { ...@@ -226,6 +226,12 @@ class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler {
void DispatchToBytecode(TNode<WordT> target_bytecode, void DispatchToBytecode(TNode<WordT> target_bytecode,
TNode<IntPtrT> new_bytecode_offset); TNode<IntPtrT> new_bytecode_offset);
// Dispatches to |target_bytecode| at BytecodeOffset(). Includes short-star
// lookahead if the current bytecode_ is likely followed by a short-star
// instruction.
void DispatchToBytecodeWithOptionalStarLookahead(
TNode<WordT> target_bytecode);
// Abort with the given abort reason. // Abort with the given abort reason.
void Abort(AbortReason abort_reason); void Abort(AbortReason abort_reason);
void AbortIfWordNotEqual(TNode<WordT> lhs, TNode<WordT> rhs, void AbortIfWordNotEqual(TNode<WordT> lhs, TNode<WordT> rhs,
...@@ -247,6 +253,11 @@ class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler { ...@@ -247,6 +253,11 @@ class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler {
void ToNumberOrNumeric(Object::Conversion mode); void ToNumberOrNumeric(Object::Conversion mode);
void StoreRegisterForShortStar(TNode<Object> value, TNode<WordT> opcode);
// Load the bytecode at |bytecode_offset|.
TNode<WordT> LoadBytecode(TNode<IntPtrT> bytecode_offset);
private: private:
// Returns a pointer to the current function's BytecodeArray object. // Returns a pointer to the current function's BytecodeArray object.
TNode<BytecodeArray> BytecodeArrayTaggedPointer(); TNode<BytecodeArray> BytecodeArrayTaggedPointer();
...@@ -367,16 +378,14 @@ class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler { ...@@ -367,16 +378,14 @@ class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler {
TNode<IntPtrT> Advance(int delta); TNode<IntPtrT> Advance(int delta);
TNode<IntPtrT> Advance(TNode<IntPtrT> delta, bool backward = false); TNode<IntPtrT> Advance(TNode<IntPtrT> delta, bool backward = false);
// Load the bytecode at |bytecode_offset|. // Look ahead for short Star and inline it in a branch, including subsequent
TNode<WordT> LoadBytecode(TNode<IntPtrT> bytecode_offset); // dispatch. Anything after this point can assume that the following
// instruction was not a short Star.
// Look ahead for Star and inline it in a branch. Returns a new target void StarDispatchLookahead(TNode<WordT> target_bytecode);
// bytecode node for dispatch.
TNode<WordT> StarDispatchLookahead(TNode<WordT> target_bytecode);
// Build code for Star at the current BytecodeOffset() and Advance() to the // Build code for short Star at the current BytecodeOffset() and Advance() to
// next dispatch offset. // the next dispatch offset.
void InlineStar(); void InlineShortStar(TNode<WordT> target_bytecode);
// Dispatch to the bytecode handler with code entry point |handler_entry|. // Dispatch to the bytecode handler with code entry point |handler_entry|.
void DispatchToBytecodeHandlerEntry(TNode<RawPtrT> handler_entry, void DispatchToBytecodeHandlerEntry(TNode<RawPtrT> handler_entry,
......
...@@ -145,6 +145,20 @@ IGNITION_HANDLER(Star, InterpreterAssembler) { ...@@ -145,6 +145,20 @@ IGNITION_HANDLER(Star, InterpreterAssembler) {
Dispatch(); Dispatch();
} }
// Star0 - StarN
//
// Store accumulator to one of a special batch of registers, without using a
// second byte to specify the destination.
//
// Even though this handler is declared as Star0, multiple entries in
// the jump table point to this handler.
IGNITION_HANDLER(Star0, InterpreterAssembler) {
TNode<Object> accumulator = GetAccumulator();
TNode<WordT> opcode = LoadBytecode(BytecodeOffset());
StoreRegisterForShortStar(accumulator, opcode);
Dispatch();
}
// Mov <src> <dst> // Mov <src> <dst>
// //
// Stores the value of register <src> to register <dst>. // Stores the value of register <src> to register <dst>.
...@@ -2783,7 +2797,7 @@ IGNITION_HANDLER(Debugger, InterpreterAssembler) { ...@@ -2783,7 +2797,7 @@ IGNITION_HANDLER(Debugger, InterpreterAssembler) {
TNode<IntPtrT> original_bytecode = SmiUntag(Projection<1>(result_pair)); \ TNode<IntPtrT> original_bytecode = SmiUntag(Projection<1>(result_pair)); \
MaybeDropFrames(context); \ MaybeDropFrames(context); \
SetAccumulator(return_value); \ SetAccumulator(return_value); \
DispatchToBytecode(original_bytecode, BytecodeOffset()); \ DispatchToBytecodeWithOptionalStarLookahead(original_bytecode); \
} }
DEBUG_BREAK_BYTECODE_LIST(DEBUG_BREAK) DEBUG_BREAK_BYTECODE_LIST(DEBUG_BREAK)
#undef DEBUG_BREAK #undef DEBUG_BREAK
...@@ -3103,8 +3117,19 @@ Handle<Code> GenerateBytecodeHandler(Isolate* isolate, const char* debug_name, ...@@ -3103,8 +3117,19 @@ Handle<Code> GenerateBytecodeHandler(Isolate* isolate, const char* debug_name,
case Bytecode::k##Name: \ case Bytecode::k##Name: \
Name##Assembler::Generate(&state, operand_scale); \ Name##Assembler::Generate(&state, operand_scale); \
break; break;
BYTECODE_LIST(CALL_GENERATOR); BYTECODE_LIST_WITH_UNIQUE_HANDLERS(CALL_GENERATOR);
#undef CALL_GENERATOR #undef CALL_GENERATOR
case Bytecode::kIllegal:
IllegalAssembler::Generate(&state, operand_scale);
break;
case Bytecode::kStar0:
Star0Assembler::Generate(&state, operand_scale);
break;
default:
// Others (the rest of the short stars, and the rest of the illegal range)
// must not get their own handler generated. Rather, multiple entries in
// the jump table point to those handlers.
UNREACHABLE();
} }
Handle<Code> code = compiler::CodeAssembler::GenerateCode( Handle<Code> code = compiler::CodeAssembler::GenerateCode(
......
...@@ -83,7 +83,14 @@ namespace { ...@@ -83,7 +83,14 @@ namespace {
int BuiltinIndexFromBytecode(Bytecode bytecode, OperandScale operand_scale) { int BuiltinIndexFromBytecode(Bytecode bytecode, OperandScale operand_scale) {
int index = static_cast<int>(bytecode); int index = static_cast<int>(bytecode);
if (operand_scale != OperandScale::kSingle) { if (operand_scale == OperandScale::kSingle) {
if (Bytecodes::IsShortStar(bytecode)) {
index = static_cast<int>(Bytecode::kFirstShortStar);
} else if (bytecode > Bytecode::kLastShortStar) {
// Adjust the index due to repeated handlers.
index -= Bytecodes::kShortStarCount - 1;
}
} else {
// The table contains uint8_t offsets starting at 0 with // The table contains uint8_t offsets starting at 0 with
// kIllegalBytecodeHandlerEncoding for illegal bytecode/scale combinations. // kIllegalBytecodeHandlerEncoding for illegal bytecode/scale combinations.
uint8_t offset = kWideBytecodeToBuiltinsMapping[index]; uint8_t offset = kWideBytecodeToBuiltinsMapping[index];
...@@ -277,6 +284,7 @@ InterpreterCompilationJob::Status InterpreterCompilationJob::DoFinalizeJobImpl( ...@@ -277,6 +284,7 @@ InterpreterCompilationJob::Status InterpreterCompilationJob::DoFinalizeJobImpl(
compilation_info()->literal()->GetDebugName(); compilation_info()->literal()->GetDebugName();
os << "[generated bytecode for function: " << name.get() << " (" os << "[generated bytecode for function: " << name.get() << " ("
<< shared_info << ")]" << std::endl; << shared_info << ")]" << std::endl;
os << "Bytecode length: " << bytecodes->length() << std::endl;
bytecodes->Disassemble(os); bytecodes->Disassemble(os);
os << std::flush; os << std::flush;
} }
...@@ -336,23 +344,23 @@ void Interpreter::Initialize() { ...@@ -336,23 +344,23 @@ void Interpreter::Initialize() {
interpreter_entry_trampoline_instruction_start_ = code->InstructionStart(); interpreter_entry_trampoline_instruction_start_ = code->InstructionStart();
// Initialize the dispatch table. // Initialize the dispatch table.
Code illegal = builtins->builtin(Builtins::kIllegalHandler); ForEachBytecode([=](Bytecode bytecode, OperandScale operand_scale) {
int builtin_id = Builtins::kFirstBytecodeHandler; int builtin_id = BuiltinIndexFromBytecode(bytecode, operand_scale);
ForEachBytecode([=, &builtin_id](Bytecode bytecode, Code handler = builtins->builtin(builtin_id);
OperandScale operand_scale) {
Code handler = illegal;
if (Bytecodes::BytecodeHasHandler(bytecode, operand_scale)) { if (Bytecodes::BytecodeHasHandler(bytecode, operand_scale)) {
#ifdef DEBUG #ifdef DEBUG
std::string builtin_name(Builtins::name(builtin_id)); std::string builtin_name(Builtins::name(builtin_id));
std::string expected_name = std::string expected_name =
Bytecodes::ToString(bytecode, operand_scale, "") + "Handler"; (Bytecodes::IsShortStar(bytecode)
? "ShortStar"
: Bytecodes::ToString(bytecode, operand_scale, "")) +
"Handler";
DCHECK_EQ(expected_name, builtin_name); DCHECK_EQ(expected_name, builtin_name);
#endif #endif
handler = builtins->builtin(builtin_id++);
} }
SetBytecodeHandler(bytecode, operand_scale, handler); SetBytecodeHandler(bytecode, operand_scale, handler);
}); });
DCHECK(builtin_id == Builtins::builtin_count);
DCHECK(IsDispatchTableInitialized()); DCHECK(IsDispatchTableInitialized());
} }
......
...@@ -28,18 +28,18 @@ snippet: " ...@@ -28,18 +28,18 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 35 bytecode array length: 31
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37), /* 45 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(Star), R(2), B(Star2),
B(LdaZero), B(LdaZero),
B(Star), R(1), B(Star1),
B(Ldar), R(0), B(Ldar), R(0),
/* 54 E> */ B(StaInArrayLiteral), R(2), R(1), U8(1), /* 54 E> */ B(StaInArrayLiteral), R(2), R(1), U8(1),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(Star), R(1), B(Star1),
B(Ldar), R(0), B(Ldar), R(0),
/* 59 E> */ B(AddSmi), I8(1), U8(3), /* 59 E> */ B(AddSmi), I8(1), U8(3),
B(StaInArrayLiteral), R(2), R(1), U8(1), B(StaInArrayLiteral), R(2), R(1), U8(1),
...@@ -75,28 +75,28 @@ snippet: " ...@@ -75,28 +75,28 @@ snippet: "
" "
frame size: 5 frame size: 5
parameter count: 1 parameter count: 1
bytecode array length: 65 bytecode array length: 57
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(4), /* 45 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(4),
B(Star), R(2), B(Star2),
B(LdaZero), B(LdaZero),
B(Star), R(1), B(Star1),
B(CreateArrayLiteral), U8(1), U8(1), U8(37), B(CreateArrayLiteral), U8(1), U8(1), U8(37),
B(Star), R(4), B(Star4),
B(LdaZero), B(LdaZero),
B(Star), R(3), B(Star3),
B(Ldar), R(0), B(Ldar), R(0),
/* 56 E> */ B(StaInArrayLiteral), R(4), R(3), U8(2), /* 56 E> */ B(StaInArrayLiteral), R(4), R(3), U8(2),
B(Ldar), R(4), B(Ldar), R(4),
B(StaInArrayLiteral), R(2), R(1), U8(4), B(StaInArrayLiteral), R(2), R(1), U8(4),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(Star), R(1), B(Star1),
B(CreateArrayLiteral), U8(2), U8(6), U8(37), B(CreateArrayLiteral), U8(2), U8(6), U8(37),
B(Star), R(4), B(Star4),
B(LdaZero), B(LdaZero),
B(Star), R(3), B(Star3),
B(Ldar), R(0), B(Ldar), R(0),
/* 68 E> */ B(AddSmi), I8(2), U8(7), /* 68 E> */ B(AddSmi), I8(2), U8(7),
B(StaInArrayLiteral), R(4), R(3), U8(8), B(StaInArrayLiteral), R(4), R(3), U8(8),
...@@ -119,10 +119,10 @@ snippet: " ...@@ -119,10 +119,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 8 bytecode array length: 7
bytecodes: [ bytecodes: [
/* 42 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37), /* 42 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(Star), R(0), B(Star0),
/* 64 S> */ B(CreateArrayFromIterable), /* 64 S> */ B(CreateArrayFromIterable),
/* 68 S> */ B(Return), /* 68 S> */ B(Return),
] ]
...@@ -138,32 +138,32 @@ snippet: " ...@@ -138,32 +138,32 @@ snippet: "
" "
frame size: 6 frame size: 6
parameter count: 1 parameter count: 1
bytecode array length: 74 bytecode array length: 67
bytecodes: [ bytecodes: [
/* 42 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37), /* 42 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(Star), R(0), B(Star0),
/* 52 S> */ B(CreateArrayLiteral), U8(1), U8(1), U8(37), /* 52 S> */ B(CreateArrayLiteral), U8(1), U8(1), U8(37),
B(Star), R(2), B(Star2),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
/* 67 S> */ B(Star), R(1), /* 67 S> */ B(Star1),
/* 67 E> */ B(GetIterator), R(0), U8(2), U8(4), /* 67 E> */ B(GetIterator), R(0), U8(2), U8(4),
B(JumpIfJSReceiver), U8(7), B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0), B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(4), B(Star4),
B(LdaNamedProperty), R(4), U8(2), U8(6), B(LdaNamedProperty), R(4), U8(2), U8(6),
B(Star), R(3), B(Star3),
B(CallProperty0), R(3), R(4), U8(15), B(CallProperty0), R(3), R(4), U8(15),
B(Star), R(5), B(Star5),
B(JumpIfJSReceiver), U8(7), B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1), B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(3), U8(17), B(LdaNamedProperty), R(5), U8(3), U8(17),
B(JumpIfToBooleanTrue), U8(19), B(JumpIfToBooleanTrue), U8(18),
B(LdaNamedProperty), R(5), U8(4), U8(8), B(LdaNamedProperty), R(5), U8(4), U8(8),
B(StaInArrayLiteral), R(2), R(1), U8(13), B(StaInArrayLiteral), R(2), R(1), U8(13),
B(Ldar), R(1), B(Ldar), R(1),
B(Inc), U8(12), B(Inc), U8(12),
B(Star), R(1), B(Star1),
B(JumpLoop), U8(33), I8(0), B(JumpLoop), U8(31), I8(0),
B(Ldar), R(2), B(Ldar), R(2),
/* 71 S> */ B(Return), /* 71 S> */ B(Return),
] ]
...@@ -183,14 +183,14 @@ snippet: " ...@@ -183,14 +183,14 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 24 bytecode array length: 21
bytecodes: [ bytecodes: [
/* 42 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37), /* 42 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(Star), R(0), B(Star0),
/* 64 S> */ B(CreateArrayFromIterable), /* 64 S> */ B(CreateArrayFromIterable),
B(Star), R(2), B(Star2),
B(LdaNamedProperty), R(2), U8(1), U8(1), B(LdaNamedProperty), R(2), U8(1), U8(1),
B(Star), R(1), B(Star1),
B(LdaSmi), I8(3), B(LdaSmi), I8(3),
B(StaInArrayLiteral), R(2), R(1), U8(3), B(StaInArrayLiteral), R(2), R(1), U8(3),
B(Ldar), R(2), B(Ldar), R(2),
......
...@@ -12,20 +12,20 @@ snippet: " ...@@ -12,20 +12,20 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 24 bytecode array length: 18
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaZero), /* 42 S> */ B(LdaZero),
B(Star), R(0), B(Star0),
/* 49 S> */ B(LdaSmi), I8(1), /* 49 S> */ B(LdaSmi), I8(1),
B(Star), R(1), B(Star1),
/* 52 S> */ B(LdaSmi), I8(2), /* 52 S> */ B(LdaSmi), I8(2),
B(Star), R(0), B(Star0),
B(LdaSmi), I8(3), B(LdaSmi), I8(3),
B(Star), R(1), B(Star1),
B(LdaSmi), I8(4), B(LdaSmi), I8(4),
B(Star), R(0), B(Star0),
B(LdaSmi), I8(5), B(LdaSmi), I8(5),
B(Star), R(1), B(Star1),
/* 88 S> */ B(Return), /* 88 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -41,13 +41,13 @@ snippet: " ...@@ -41,13 +41,13 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 11 bytecode array length: 8
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(55), /* 42 S> */ B(LdaSmi), I8(55),
B(Star), R(0), B(Star0),
/* 54 S> */ B(LdaSmi), I8(100), /* 54 S> */ B(LdaSmi), I8(100),
B(Star), R(0), B(Star0),
B(Star), R(1), B(Star1),
/* 74 S> */ B(Return), /* 74 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -63,19 +63,19 @@ snippet: " ...@@ -63,19 +63,19 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 26 bytecode array length: 21
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(55), /* 42 S> */ B(LdaSmi), I8(55),
B(Star), R(0), B(Star0),
/* 46 S> */ B(LdaSmi), I8(100), /* 46 S> */ B(LdaSmi), I8(100),
B(Mov), R(0), R(1), B(Mov), R(0), R(1),
B(Star), R(0), B(Star0),
/* 52 E> */ B(Add), R(1), U8(0), /* 52 E> */ B(Add), R(1), U8(0),
B(Star), R(1), B(Star1),
B(LdaSmi), I8(101), B(LdaSmi), I8(101),
B(Star), R(0), B(Star0),
/* 64 E> */ B(Add), R(1), U8(1), /* 64 E> */ B(Add), R(1), U8(1),
B(Star), R(0), B(Star0),
/* 86 S> */ B(Return), /* 86 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -92,20 +92,20 @@ snippet: " ...@@ -92,20 +92,20 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 27 bytecode array length: 21
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(55), /* 42 S> */ B(LdaSmi), I8(55),
B(Star), R(0), B(Star0),
/* 46 S> */ B(LdaSmi), I8(56), /* 46 S> */ B(LdaSmi), I8(56),
B(Star), R(0), B(Star0),
/* 59 E> */ B(Sub), R(0), U8(1), /* 59 E> */ B(Sub), R(0), U8(1),
B(Star), R(1), B(Star1),
B(LdaSmi), I8(57), B(LdaSmi), I8(57),
B(Star), R(0), B(Star0),
/* 63 E> */ B(Add), R(1), U8(0), /* 63 E> */ B(Add), R(1), U8(0),
B(Star), R(0), B(Star0),
/* 75 S> */ B(Inc), U8(2), /* 75 S> */ B(Inc), U8(2),
B(Star), R(0), B(Star0),
/* 89 S> */ B(Return), /* 89 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -121,23 +121,23 @@ snippet: " ...@@ -121,23 +121,23 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 35 bytecode array length: 28
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(55), /* 42 S> */ B(LdaSmi), I8(55),
B(Star), R(0), B(Star0),
/* 54 S> */ B(LdaSmi), I8(1), /* 54 S> */ B(LdaSmi), I8(1),
B(Mov), R(0), R(2), B(Mov), R(0), R(2),
B(Star), R(0), B(Star0),
/* 56 E> */ B(Add), R(2), U8(0), /* 56 E> */ B(Add), R(2), U8(0),
B(Star), R(2), B(Star2),
B(LdaSmi), I8(2), B(LdaSmi), I8(2),
B(Star), R(0), B(Star0),
/* 66 E> */ B(Add), R(2), U8(1), /* 66 E> */ B(Add), R(2), U8(1),
B(Star), R(2), B(Star2),
B(LdaSmi), I8(3), B(LdaSmi), I8(3),
B(Star), R(0), B(Star0),
/* 76 E> */ B(Add), R(2), U8(2), /* 76 E> */ B(Add), R(2), U8(2),
B(Star), R(1), B(Star1),
/* 96 S> */ B(Return), /* 96 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -153,23 +153,23 @@ snippet: " ...@@ -153,23 +153,23 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 35 bytecode array length: 28
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(55), /* 42 S> */ B(LdaSmi), I8(55),
B(Star), R(0), B(Star0),
/* 54 S> */ B(LdaSmi), I8(1), /* 54 S> */ B(LdaSmi), I8(1),
B(Mov), R(0), R(1), B(Mov), R(0), R(1),
B(Star), R(0), B(Star0),
/* 56 E> */ B(Add), R(1), U8(0), /* 56 E> */ B(Add), R(1), U8(0),
B(Star), R(1), B(Star1),
B(LdaSmi), I8(2), B(LdaSmi), I8(2),
B(Star), R(0), B(Star0),
/* 66 E> */ B(Add), R(1), U8(1), /* 66 E> */ B(Add), R(1), U8(1),
B(Star), R(1), B(Star1),
B(LdaSmi), I8(3), B(LdaSmi), I8(3),
B(Star), R(0), B(Star0),
/* 76 E> */ B(Add), R(1), U8(2), /* 76 E> */ B(Add), R(1), U8(2),
B(Star), R(0), B(Star0),
/* 96 S> */ B(Return), /* 96 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -184,37 +184,37 @@ snippet: " ...@@ -184,37 +184,37 @@ snippet: "
" "
frame size: 4 frame size: 4
parameter count: 1 parameter count: 1
bytecode array length: 72 bytecode array length: 59
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(10), /* 42 S> */ B(LdaSmi), I8(10),
B(Star), R(0), B(Star0),
/* 50 S> */ B(LdaSmi), I8(20), /* 50 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
/* 54 S> */ B(LdaSmi), I8(1), /* 54 S> */ B(LdaSmi), I8(1),
B(Mov), R(0), R(2), B(Mov), R(0), R(2),
B(Star), R(0), B(Star0),
/* 63 E> */ B(Add), R(2), U8(0), /* 63 E> */ B(Add), R(2), U8(0),
B(Star), R(2), B(Star2),
B(Ldar), R(0), B(Ldar), R(0),
/* 78 E> */ B(AddSmi), I8(1), U8(2), /* 78 E> */ B(AddSmi), I8(1), U8(2),
B(Star), R(3), B(Star3),
B(LdaSmi), I8(2), B(LdaSmi), I8(2),
B(Star), R(1), B(Star1),
/* 83 E> */ B(Mul), R(3), U8(1), /* 83 E> */ B(Mul), R(3), U8(1),
/* 73 E> */ B(Add), R(2), U8(3), /* 73 E> */ B(Add), R(2), U8(3),
B(Star), R(2), B(Star2),
B(LdaSmi), I8(3), B(LdaSmi), I8(3),
B(Star), R(1), B(Star1),
/* 93 E> */ B(Add), R(2), U8(4), /* 93 E> */ B(Add), R(2), U8(4),
B(Star), R(2), B(Star2),
B(LdaSmi), I8(4), B(LdaSmi), I8(4),
B(Star), R(0), B(Star0),
/* 103 E> */ B(Add), R(2), U8(5), /* 103 E> */ B(Add), R(2), U8(5),
B(Star), R(2), B(Star2),
B(LdaSmi), I8(5), B(LdaSmi), I8(5),
B(Star), R(1), B(Star1),
/* 113 E> */ B(Add), R(2), U8(6), /* 113 E> */ B(Add), R(2), U8(6),
B(Star), R(2), B(Star2),
B(Ldar), R(1), B(Ldar), R(1),
/* 123 E> */ B(Add), R(2), U8(7), /* 123 E> */ B(Add), R(2), U8(7),
/* 127 S> */ B(Return), /* 127 S> */ B(Return),
...@@ -231,26 +231,26 @@ snippet: " ...@@ -231,26 +231,26 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 42 bytecode array length: 35
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(17), /* 42 S> */ B(LdaSmi), I8(17),
B(Star), R(0), B(Star0),
/* 46 S> */ B(LdaSmi), I8(1), /* 46 S> */ B(LdaSmi), I8(1),
B(Star), R(1), B(Star1),
B(Ldar), R(0), B(Ldar), R(0),
/* 55 E> */ B(Add), R(1), U8(0), /* 55 E> */ B(Add), R(1), U8(0),
B(Star), R(1), B(Star1),
B(Ldar), R(0), B(Ldar), R(0),
B(ToNumeric), U8(1), B(ToNumeric), U8(1),
B(Star), R(2), B(Star2),
B(Inc), U8(1), B(Inc), U8(1),
B(Star), R(0), B(Star0),
B(Ldar), R(2), B(Ldar), R(2),
/* 59 E> */ B(Add), R(1), U8(2), /* 59 E> */ B(Add), R(1), U8(2),
B(Star), R(1), B(Star1),
B(Ldar), R(0), B(Ldar), R(0),
B(Inc), U8(3), B(Inc), U8(3),
B(Star), R(0), B(Star0),
/* 67 E> */ B(Add), R(1), U8(4), /* 67 E> */ B(Add), R(1), U8(4),
/* 75 S> */ B(Return), /* 75 S> */ B(Return),
] ]
......
...@@ -11,10 +11,10 @@ snippet: " ...@@ -11,10 +11,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 17 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(JumpIfToBooleanTrue), U8(8), /* 45 S> */ B(JumpIfToBooleanTrue), U8(8),
B(LdaZero), B(LdaZero),
/* 56 E> */ B(TestLessThan), R(0), U8(0), /* 56 E> */ B(TestLessThan), R(0), U8(0),
...@@ -35,10 +35,10 @@ snippet: " ...@@ -35,10 +35,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 17 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(JumpIfToBooleanFalse), U8(11), /* 45 S> */ B(JumpIfToBooleanFalse), U8(11),
B(LdaZero), B(LdaZero),
/* 56 E> */ B(TestLessThan), R(0), U8(0), /* 56 E> */ B(TestLessThan), R(0), U8(0),
...@@ -59,10 +59,10 @@ snippet: " ...@@ -59,10 +59,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 22 bytecode array length: 20
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(JumpIfToBooleanTrue), U8(8), /* 45 S> */ B(JumpIfToBooleanTrue), U8(8),
B(LdaZero), B(LdaZero),
/* 57 E> */ B(TestLessThan), R(0), U8(0), /* 57 E> */ B(TestLessThan), R(0), U8(0),
...@@ -70,7 +70,7 @@ bytecodes: [ ...@@ -70,7 +70,7 @@ bytecodes: [
B(LdaSmi), I8(2), B(LdaSmi), I8(2),
B(Jump), U8(4), B(Jump), U8(4),
B(LdaSmi), I8(3), B(LdaSmi), I8(3),
B(Star), R(0), B(Star0),
B(LdaUndefined), B(LdaUndefined),
/* 71 S> */ B(Return), /* 71 S> */ B(Return),
] ]
......
...@@ -17,12 +17,12 @@ snippet: " ...@@ -17,12 +17,12 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 13 bytecode array length: 11
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaZero), /* 42 S> */ B(LdaZero),
B(Star), R(0), B(Star0),
/* 62 S> */ B(AddSmi), I8(1), U8(0), /* 62 S> */ B(AddSmi), I8(1), U8(0),
B(Star), R(0), B(Star0),
/* 69 S> */ B(Jump), U8(2), /* 69 S> */ B(Jump), U8(2),
/* 97 S> */ B(Ldar), R(0), /* 97 S> */ B(Ldar), R(0),
/* 106 S> */ B(Return), /* 106 S> */ B(Return),
...@@ -47,38 +47,38 @@ snippet: " ...@@ -47,38 +47,38 @@ snippet: "
" "
frame size: 4 frame size: 4
parameter count: 1 parameter count: 1
bytecode array length: 66 bytecode array length: 59
bytecodes: [ bytecodes: [
/* 44 S> */ B(LdaZero), /* 44 S> */ B(LdaZero),
B(Star), R(0), B(Star0),
/* 71 S> */ B(LdaZero), /* 71 S> */ B(LdaZero),
B(Star), R(1), B(Star1),
/* 76 S> */ B(LdaSmi), I8(10), /* 76 S> */ B(LdaSmi), I8(10),
/* 76 E> */ B(TestLessThan), R(1), U8(0), /* 76 E> */ B(TestLessThan), R(1), U8(0),
B(JumpIfFalse), U8(52), B(JumpIfFalse), U8(47),
/* 106 S> */ B(LdaZero), /* 106 S> */ B(LdaZero),
B(Star), R(2), B(Star2),
/* 111 S> */ B(LdaSmi), I8(3), /* 111 S> */ B(LdaSmi), I8(3),
/* 111 E> */ B(TestLessThan), R(2), U8(1), /* 111 E> */ B(TestLessThan), R(2), U8(1),
B(JumpIfFalse), U8(33), B(JumpIfFalse), U8(30),
/* 129 S> */ B(Ldar), R(0), /* 129 S> */ B(Ldar), R(0),
B(Inc), U8(2), B(Inc), U8(2),
B(Star), R(0), B(Star0),
/* 142 S> */ B(Ldar), R(2), /* 142 S> */ B(Ldar), R(2),
/* 148 E> */ B(Add), R(1), U8(3), /* 148 E> */ B(Add), R(1), U8(3),
B(Star), R(3), B(Star3),
B(LdaSmi), I8(12), B(LdaSmi), I8(12),
/* 152 E> */ B(TestEqual), R(3), U8(4), /* 152 E> */ B(TestEqual), R(3), U8(4),
B(JumpIfFalse), U8(4), B(JumpIfFalse), U8(4),
/* 161 S> */ B(Jump), U8(20), /* 161 S> */ B(Jump), U8(18),
/* 118 S> */ B(Ldar), R(2), /* 118 S> */ B(Ldar), R(2),
B(Inc), U8(5), B(Inc), U8(5),
B(Star), R(2), B(Star2),
/* 93 E> */ B(JumpLoop), U8(35), I8(1), /* 93 E> */ B(JumpLoop), U8(32), I8(1),
/* 84 S> */ B(Ldar), R(1), /* 84 S> */ B(Ldar), R(1),
B(Inc), U8(6), B(Inc), U8(6),
B(Star), R(1), B(Star1),
/* 58 E> */ B(JumpLoop), U8(54), I8(0), /* 58 E> */ B(JumpLoop), U8(49), I8(0),
/* 188 S> */ B(Ldar), R(0), /* 188 S> */ B(Ldar), R(0),
/* 199 S> */ B(Return), /* 199 S> */ B(Return),
] ]
...@@ -97,14 +97,14 @@ snippet: " ...@@ -97,14 +97,14 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 28 bytecode array length: 27
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateBlockContext), U8(0), /* 30 E> */ B(CreateBlockContext), U8(0),
B(PushContext), R(2), B(PushContext), R(2),
B(LdaTheHole), B(LdaTheHole),
B(StaCurrentContextSlot), U8(2), B(StaCurrentContextSlot), U8(2),
B(CreateClosure), U8(1), U8(0), U8(2), B(CreateClosure), U8(1), U8(0), U8(2),
B(Star), R(1), B(Star1),
/* 53 S> */ B(LdaSmi), I8(10), /* 53 S> */ B(LdaSmi), I8(10),
/* 53 E> */ B(StaCurrentContextSlot), U8(2), /* 53 E> */ B(StaCurrentContextSlot), U8(2),
/* 85 S> */ B(Mov), R(1), R(0), /* 85 S> */ B(Mov), R(1), R(0),
...@@ -136,7 +136,7 @@ snippet: " ...@@ -136,7 +136,7 @@ snippet: "
" "
frame size: 4 frame size: 4
parameter count: 1 parameter count: 1
bytecode array length: 52 bytecode array length: 51
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateFunctionContext), U8(0), U8(1), /* 30 E> */ B(CreateFunctionContext), U8(0), U8(1),
B(PushContext), R(2), B(PushContext), R(2),
...@@ -149,7 +149,7 @@ bytecodes: [ ...@@ -149,7 +149,7 @@ bytecodes: [
B(LdaTheHole), B(LdaTheHole),
B(StaCurrentContextSlot), U8(2), B(StaCurrentContextSlot), U8(2),
B(CreateClosure), U8(2), U8(0), U8(2), B(CreateClosure), U8(2), U8(0), U8(2),
B(Star), R(1), B(Star1),
/* 76 S> */ B(LdaSmi), I8(2), /* 76 S> */ B(LdaSmi), I8(2),
/* 76 E> */ B(StaCurrentContextSlot), U8(2), /* 76 E> */ B(StaCurrentContextSlot), U8(2),
/* 113 S> */ B(Mov), R(1), R(0), /* 113 S> */ B(Mov), R(1), R(0),
......
...@@ -11,14 +11,14 @@ snippet: " ...@@ -11,14 +11,14 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 24 bytecode array length: 21
bytecodes: [ bytecodes: [
/* 34 S> */ B(LdaGlobal), U8(0), U8(0), /* 34 S> */ B(LdaGlobal), U8(0), U8(0),
B(Star), R(1), B(Star1),
/* 39 E> */ B(LdaNamedProperty), R(1), U8(1), U8(2), /* 39 E> */ B(LdaNamedProperty), R(1), U8(1), U8(2),
B(Star), R(0), B(Star0),
B(CreateArrayLiteral), U8(2), U8(4), U8(37), B(CreateArrayLiteral), U8(2), U8(4), U8(37),
B(Star), R(2), B(Star2),
/* 39 E> */ B(CallWithSpread), R(0), R(1), U8(2), U8(5), /* 39 E> */ B(CallWithSpread), R(0), R(1), U8(2), U8(5),
B(LdaUndefined), B(LdaUndefined),
/* 58 S> */ B(Return), /* 58 S> */ B(Return),
...@@ -37,16 +37,16 @@ snippet: " ...@@ -37,16 +37,16 @@ snippet: "
" "
frame size: 4 frame size: 4
parameter count: 1 parameter count: 1
bytecode array length: 27 bytecode array length: 23
bytecodes: [ bytecodes: [
/* 34 S> */ B(LdaGlobal), U8(0), U8(0), /* 34 S> */ B(LdaGlobal), U8(0), U8(0),
B(Star), R(1), B(Star1),
/* 39 E> */ B(LdaNamedProperty), R(1), U8(1), U8(2), /* 39 E> */ B(LdaNamedProperty), R(1), U8(1), U8(2),
B(Star), R(0), B(Star0),
B(LdaZero), B(LdaZero),
B(Star), R(2), B(Star2),
B(CreateArrayLiteral), U8(2), U8(4), U8(37), B(CreateArrayLiteral), U8(2), U8(4), U8(37),
B(Star), R(3), B(Star3),
/* 39 E> */ B(CallWithSpread), R(0), R(1), U8(3), U8(5), /* 39 E> */ B(CallWithSpread), R(0), R(1), U8(3), U8(5),
B(LdaUndefined), B(LdaUndefined),
/* 61 S> */ B(Return), /* 61 S> */ B(Return),
...@@ -65,37 +65,37 @@ snippet: " ...@@ -65,37 +65,37 @@ snippet: "
" "
frame size: 8 frame size: 8
parameter count: 1 parameter count: 1
bytecode array length: 100 bytecode array length: 91
bytecodes: [ bytecodes: [
/* 34 S> */ B(LdaGlobal), U8(0), U8(0), /* 34 S> */ B(LdaGlobal), U8(0), U8(0),
B(Star), R(0), B(Star0),
B(LdaNamedProperty), R(0), U8(1), U8(2), B(LdaNamedProperty), R(0), U8(1), U8(2),
B(Star), R(1), B(Star1),
B(CreateArrayLiteral), U8(2), U8(4), U8(37), B(CreateArrayLiteral), U8(2), U8(4), U8(37),
B(Star), R(4), B(Star4),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(Star), R(3), B(Star3),
/* 49 S> */ B(CreateArrayLiteral), U8(3), U8(5), U8(37), /* 49 S> */ B(CreateArrayLiteral), U8(3), U8(5), U8(37),
B(Star), R(7), B(Star7),
/* 49 E> */ B(GetIterator), R(7), U8(6), U8(8), /* 49 E> */ B(GetIterator), R(7), U8(6), U8(8),
B(Mov), R(0), R(2), B(Mov), R(0), R(2),
B(JumpIfJSReceiver), U8(7), B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0), B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(6), B(Star6),
B(LdaNamedProperty), R(6), U8(4), U8(10), B(LdaNamedProperty), R(6), U8(4), U8(10),
B(Star), R(5), B(Star5),
B(CallProperty0), R(5), R(6), U8(19), B(CallProperty0), R(5), R(6), U8(19),
B(Star), R(7), B(Star7),
B(JumpIfJSReceiver), U8(7), B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(7), U8(1), B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(7), U8(1),
B(LdaNamedProperty), R(7), U8(5), U8(21), B(LdaNamedProperty), R(7), U8(5), U8(21),
B(JumpIfToBooleanTrue), U8(19), B(JumpIfToBooleanTrue), U8(18),
B(LdaNamedProperty), R(7), U8(6), U8(12), B(LdaNamedProperty), R(7), U8(6), U8(12),
B(StaInArrayLiteral), R(4), R(3), U8(17), B(StaInArrayLiteral), R(4), R(3), U8(17),
B(Ldar), R(3), B(Ldar), R(3),
B(Inc), U8(16), B(Inc), U8(16),
B(Star), R(3), B(Star3),
B(JumpLoop), U8(33), I8(0), B(JumpLoop), U8(31), I8(0),
B(LdaSmi), I8(4), B(LdaSmi), I8(4),
B(StaInArrayLiteral), R(4), R(3), U8(17), B(StaInArrayLiteral), R(4), R(3), U8(17),
B(Mov), R(4), R(3), B(Mov), R(4), R(3),
......
...@@ -14,10 +14,10 @@ snippet: " ...@@ -14,10 +14,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 9 bytecode array length: 8
bytecodes: [ bytecodes: [
/* 32 S> */ B(LdaGlobal), U8(0), U8(0), /* 32 S> */ B(LdaGlobal), U8(0), U8(0),
B(Star), R(0), B(Star0),
/* 39 E> */ B(CallUndefinedReceiver0), R(0), U8(2), /* 39 E> */ B(CallUndefinedReceiver0), R(0), U8(2),
/* 43 S> */ B(Return), /* 43 S> */ B(Return),
] ]
...@@ -35,16 +35,16 @@ snippet: " ...@@ -35,16 +35,16 @@ snippet: "
" "
frame size: 4 frame size: 4
parameter count: 1 parameter count: 1
bytecode array length: 23 bytecode array length: 19
bytecodes: [ bytecodes: [
/* 39 S> */ B(LdaGlobal), U8(0), U8(0), /* 39 S> */ B(LdaGlobal), U8(0), U8(0),
B(Star), R(0), B(Star0),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(Star), R(1), B(Star1),
B(LdaSmi), I8(2), B(LdaSmi), I8(2),
B(Star), R(2), B(Star2),
B(LdaSmi), I8(3), B(LdaSmi), I8(3),
B(Star), R(3), B(Star3),
/* 46 E> */ B(CallUndefinedReceiver), R(0), R(1), U8(3), U8(2), /* 46 E> */ B(CallUndefinedReceiver), R(0), R(1), U8(3), U8(2),
/* 57 S> */ B(Return), /* 57 S> */ B(Return),
] ]
......
...@@ -11,7 +11,7 @@ snippet: " ...@@ -11,7 +11,7 @@ snippet: "
" "
frame size: 10 frame size: 10
parameter count: 1 parameter count: 1
bytecode array length: 74 bytecode array length: 67
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateFunctionContext), U8(0), U8(4), /* 30 E> */ B(CreateFunctionContext), U8(0), U8(4),
B(PushContext), R(1), B(PushContext), R(1),
...@@ -24,23 +24,23 @@ bytecodes: [ ...@@ -24,23 +24,23 @@ bytecodes: [
/* 34 S> */ B(CreateClosure), U8(1), U8(0), U8(2), /* 34 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
/* 36 E> */ B(StaLookupSlot), U8(2), U8(0), /* 36 E> */ B(StaLookupSlot), U8(2), U8(0),
/* 52 S> */ B(LdaLookupGlobalSlot), U8(3), U8(0), U8(1), /* 52 S> */ B(LdaLookupGlobalSlot), U8(3), U8(0), U8(1),
B(Star), R(2), B(Star2),
B(LdaConstant), U8(4), B(LdaConstant), U8(4),
B(Star), R(3), B(Star3),
B(LdaZero), B(LdaZero),
B(Star), R(7), B(Star7),
B(LdaSmi), I8(30), B(LdaSmi), I8(30),
B(Star), R(8), B(Star8),
B(LdaSmi), I8(52), B(LdaSmi), I8(52),
B(Star), R(9), B(Star9),
B(Mov), R(2), R(4), B(Mov), R(2), R(4),
B(Mov), R(3), R(5), B(Mov), R(3), R(5),
B(Mov), R(closure), R(6), B(Mov), R(closure), R(6),
B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), U8(6), B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), U8(6),
B(Star), R(2), B(Star2),
/* 52 E> */ B(CallUndefinedReceiver1), R(2), R(3), U8(2), /* 52 E> */ B(CallUndefinedReceiver1), R(2), R(3), U8(2),
/* 62 S> */ B(LdaLookupGlobalSlot), U8(2), U8(4), U8(1), /* 62 S> */ B(LdaLookupGlobalSlot), U8(2), U8(4), U8(1),
B(Star), R(2), B(Star2),
/* 69 E> */ B(CallUndefinedReceiver0), R(2), U8(6), /* 69 E> */ B(CallUndefinedReceiver0), R(2), U8(6),
/* 73 S> */ B(Return), /* 73 S> */ B(Return),
] ]
......
...@@ -14,10 +14,10 @@ snippet: " ...@@ -14,10 +14,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 11 bytecode array length: 10
bytecodes: [ bytecodes: [
/* 50 S> */ B(LdaGlobal), U8(0), U8(0), /* 50 S> */ B(LdaGlobal), U8(0), U8(0),
B(Star), R(0), B(Star0),
/* 57 E> */ B(Construct), R(0), R(0), U8(0), U8(2), /* 57 E> */ B(Construct), R(0), R(0), U8(0), U8(2),
/* 67 S> */ B(Return), /* 67 S> */ B(Return),
] ]
...@@ -35,12 +35,12 @@ snippet: " ...@@ -35,12 +35,12 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 17 bytecode array length: 15
bytecodes: [ bytecodes: [
/* 63 S> */ B(LdaGlobal), U8(0), U8(0), /* 63 S> */ B(LdaGlobal), U8(0), U8(0),
B(Star), R(0), B(Star0),
B(LdaSmi), I8(3), B(LdaSmi), I8(3),
B(Star), R(1), B(Star1),
B(Ldar), R(0), B(Ldar), R(0),
/* 70 E> */ B(Construct), R(0), R(1), U8(1), U8(2), /* 70 E> */ B(Construct), R(0), R(1), U8(1), U8(2),
/* 81 S> */ B(Return), /* 81 S> */ B(Return),
...@@ -64,16 +64,16 @@ snippet: " ...@@ -64,16 +64,16 @@ snippet: "
" "
frame size: 4 frame size: 4
parameter count: 1 parameter count: 1
bytecode array length: 25 bytecode array length: 21
bytecodes: [ bytecodes: [
/* 105 S> */ B(LdaGlobal), U8(0), U8(0), /* 105 S> */ B(LdaGlobal), U8(0), U8(0),
B(Star), R(0), B(Star0),
B(LdaSmi), I8(3), B(LdaSmi), I8(3),
B(Star), R(1), B(Star1),
B(LdaSmi), I8(4), B(LdaSmi), I8(4),
B(Star), R(2), B(Star2),
B(LdaSmi), I8(5), B(LdaSmi), I8(5),
B(Star), R(3), B(Star3),
B(Ldar), R(0), B(Ldar), R(0),
/* 112 E> */ B(Construct), R(0), R(1), U8(3), U8(2), /* 112 E> */ B(Construct), R(0), R(1), U8(3), U8(2),
/* 129 S> */ B(Return), /* 129 S> */ B(Return),
......
...@@ -48,12 +48,12 @@ snippet: " ...@@ -48,12 +48,12 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 14 bytecode array length: 12
bytecodes: [ bytecodes: [
/* 15 S> */ B(LdaSmi), I8(1), /* 15 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
B(LdaSmi), I8(2), B(LdaSmi), I8(2),
B(Star), R(1), B(Star1),
B(CallRuntime), U16(Runtime::kAdd), R(0), U8(2), B(CallRuntime), U16(Runtime::kAdd), R(0), U8(2),
/* 32 S> */ B(Return), /* 32 S> */ B(Return),
] ]
......
...@@ -22,11 +22,11 @@ snippet: " ...@@ -22,11 +22,11 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 17 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 104 S> */ B(LdaImmutableCurrentContextSlot), U8(2), /* 104 S> */ B(LdaImmutableCurrentContextSlot), U8(2),
/* 117 E> */ B(LdaNamedPropertyFromSuper), R(this), U8(0), U8(1), /* 117 E> */ B(LdaNamedPropertyFromSuper), R(this), U8(0), U8(1),
B(Star), R(0), B(Star0),
/* 117 E> */ B(CallAnyReceiver), R(0), R(this), U8(1), U8(3), /* 117 E> */ B(CallAnyReceiver), R(0), R(this), U8(1), U8(3),
/* 126 E> */ B(AddSmi), I8(1), U8(0), /* 126 E> */ B(AddSmi), I8(1), U8(0),
/* 130 S> */ B(Return), /* 130 S> */ B(Return),
...@@ -54,14 +54,14 @@ snippet: " ...@@ -54,14 +54,14 @@ snippet: "
" "
frame size: 4 frame size: 4
parameter count: 1 parameter count: 1
bytecode array length: 27 bytecode array length: 24
bytecodes: [ bytecodes: [
/* 130 S> */ B(LdaImmutableCurrentContextSlot), U8(2), /* 130 S> */ B(LdaImmutableCurrentContextSlot), U8(2),
B(Star), R(1), B(Star1),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(2), B(Star2),
B(LdaSmi), I8(2), B(LdaSmi), I8(2),
B(Star), R(3), B(Star3),
B(Mov), R(this), R(0), B(Mov), R(this), R(0),
/* 138 E> */ B(CallRuntime), U16(Runtime::kStoreToSuper), R(0), U8(4), /* 138 E> */ B(CallRuntime), U16(Runtime::kStoreToSuper), R(0), U8(4),
/* 143 S> */ B(LdaImmutableCurrentContextSlot), U8(2), /* 143 S> */ B(LdaImmutableCurrentContextSlot), U8(2),
...@@ -89,17 +89,17 @@ snippet: " ...@@ -89,17 +89,17 @@ snippet: "
" "
frame size: 6 frame size: 6
parameter count: 1 parameter count: 1
bytecode array length: 41 bytecode array length: 39
bytecodes: [ bytecodes: [
B(Mov), R(closure), R(1), B(Mov), R(closure), R(1),
/* 118 S> */ B(Ldar), R(1), /* 118 S> */ B(Ldar), R(1),
B(GetSuperConstructor), R(3), B(GetSuperConstructor), R(3),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(ThrowIfNotSuperConstructor), R(3), B(ThrowIfNotSuperConstructor), R(3),
B(Star), R(4), B(Star4),
B(Ldar), R(0), B(Ldar), R(0),
/* 118 E> */ B(Construct), R(3), R(4), U8(1), U8(0), /* 118 E> */ B(Construct), R(3), R(4), U8(1), U8(0),
B(Star), R(5), B(Star5),
B(Ldar), R(this), B(Ldar), R(this),
B(ThrowSuperAlreadyCalledIfNotHole), B(ThrowSuperAlreadyCalledIfNotHole),
B(Mov), R(5), R(this), B(Mov), R(5), R(this),
...@@ -132,7 +132,7 @@ snippet: " ...@@ -132,7 +132,7 @@ snippet: "
" "
frame size: 5 frame size: 5
parameter count: 1 parameter count: 1
bytecode array length: 37 bytecode array length: 36
bytecodes: [ bytecodes: [
B(Mov), R(closure), R(1), B(Mov), R(closure), R(1),
/* 117 S> */ B(Ldar), R(1), /* 117 S> */ B(Ldar), R(1),
...@@ -140,7 +140,7 @@ bytecodes: [ ...@@ -140,7 +140,7 @@ bytecodes: [
B(ThrowIfNotSuperConstructor), R(3), B(ThrowIfNotSuperConstructor), R(3),
B(Ldar), R(0), B(Ldar), R(0),
/* 117 E> */ B(Construct), R(3), R(0), U8(0), U8(0), /* 117 E> */ B(Construct), R(3), R(0), U8(0), U8(0),
B(Star), R(4), B(Star4),
B(Ldar), R(this), B(Ldar), R(this),
B(ThrowSuperAlreadyCalledIfNotHole), B(ThrowSuperAlreadyCalledIfNotHole),
B(Mov), R(4), R(this), B(Mov), R(4), R(this),
......
...@@ -14,21 +14,21 @@ snippet: " ...@@ -14,21 +14,21 @@ snippet: "
" "
frame size: 7 frame size: 7
parameter count: 1 parameter count: 1
bytecode array length: 40 bytecode array length: 35
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateBlockContext), U8(0), /* 30 E> */ B(CreateBlockContext), U8(0),
B(PushContext), R(1), B(PushContext), R(1),
B(LdaTheHole), B(LdaTheHole),
B(Star), R(5), B(Star5),
B(CreateClosure), U8(2), U8(0), U8(2), B(CreateClosure), U8(2), U8(0), U8(2),
B(Star), R(2), B(Star2),
B(LdaConstant), U8(1), B(LdaConstant), U8(1),
B(Star), R(3), B(Star3),
B(CreateClosure), U8(3), U8(1), U8(2), B(CreateClosure), U8(3), U8(1), U8(2),
B(Star), R(6), B(Star6),
B(Mov), R(2), R(4), B(Mov), R(2), R(4),
B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(4), B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(4),
B(Star), R(3), B(Star3),
B(PopContext), R(1), B(PopContext), R(1),
B(Mov), R(4), R(0), B(Mov), R(4), R(0),
B(LdaUndefined), B(LdaUndefined),
...@@ -52,21 +52,21 @@ snippet: " ...@@ -52,21 +52,21 @@ snippet: "
" "
frame size: 7 frame size: 7
parameter count: 1 parameter count: 1
bytecode array length: 40 bytecode array length: 35
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateBlockContext), U8(0), /* 30 E> */ B(CreateBlockContext), U8(0),
B(PushContext), R(1), B(PushContext), R(1),
B(LdaTheHole), B(LdaTheHole),
B(Star), R(5), B(Star5),
B(CreateClosure), U8(2), U8(0), U8(2), B(CreateClosure), U8(2), U8(0), U8(2),
B(Star), R(2), B(Star2),
B(LdaConstant), U8(1), B(LdaConstant), U8(1),
B(Star), R(3), B(Star3),
B(CreateClosure), U8(3), U8(1), U8(2), B(CreateClosure), U8(3), U8(1), U8(2),
B(Star), R(6), B(Star6),
B(Mov), R(2), R(4), B(Mov), R(2), R(4),
B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(4), B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(4),
B(Star), R(3), B(Star3),
B(PopContext), R(1), B(PopContext), R(1),
B(Mov), R(4), R(0), B(Mov), R(4), R(0),
B(LdaUndefined), B(LdaUndefined),
...@@ -92,7 +92,7 @@ snippet: " ...@@ -92,7 +92,7 @@ snippet: "
" "
frame size: 11 frame size: 11
parameter count: 1 parameter count: 1
bytecode array length: 83 bytecode array length: 77
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateFunctionContext), U8(0), U8(2), /* 30 E> */ B(CreateFunctionContext), U8(0), U8(2),
B(PushContext), R(1), B(PushContext), R(1),
...@@ -103,15 +103,15 @@ bytecodes: [ ...@@ -103,15 +103,15 @@ bytecodes: [
B(CreateBlockContext), U8(3), B(CreateBlockContext), U8(3),
B(PushContext), R(2), B(PushContext), R(2),
B(LdaTheHole), B(LdaTheHole),
B(Star), R(6), B(Star6),
B(CreateClosure), U8(5), U8(0), U8(2), B(CreateClosure), U8(5), U8(0), U8(2),
B(Star), R(3), B(Star3),
B(LdaConstant), U8(4), B(LdaConstant), U8(4),
B(Star), R(4), B(Star4),
/* 75 S> */ B(LdaImmutableContextSlot), R(2), U8(2), U8(0), /* 75 S> */ B(LdaImmutableContextSlot), R(2), U8(2), U8(0),
B(ToName), R(7), B(ToName), R(7),
B(CreateClosure), U8(6), U8(1), U8(2), B(CreateClosure), U8(6), U8(1), U8(2),
B(Star), R(8), B(Star8),
/* 106 S> */ B(LdaImmutableContextSlot), R(2), U8(3), U8(0), /* 106 S> */ B(LdaImmutableContextSlot), R(2), U8(3), U8(0),
B(ToName), R(9), B(ToName), R(9),
B(LdaConstant), U8(7), B(LdaConstant), U8(7),
...@@ -120,9 +120,9 @@ bytecodes: [ ...@@ -120,9 +120,9 @@ bytecodes: [
B(JumpIfFalse), U8(7), B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0), B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0),
B(CreateClosure), U8(8), U8(2), U8(2), B(CreateClosure), U8(8), U8(2), U8(2),
B(Star), R(10), B(Star10),
B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(7), B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(7),
B(Star), R(4), B(Star4),
B(PopContext), R(2), B(PopContext), R(2),
B(Mov), R(3), R(0), B(Mov), R(3), R(0),
B(LdaUndefined), B(LdaUndefined),
...@@ -150,7 +150,7 @@ snippet: " ...@@ -150,7 +150,7 @@ snippet: "
" "
frame size: 7 frame size: 7
parameter count: 1 parameter count: 1
bytecode array length: 48 bytecode array length: 44
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateFunctionContext), U8(0), U8(1), /* 30 E> */ B(CreateFunctionContext), U8(0), U8(1),
B(PushContext), R(1), B(PushContext), R(1),
...@@ -159,14 +159,14 @@ bytecodes: [ ...@@ -159,14 +159,14 @@ bytecodes: [
B(CreateBlockContext), U8(1), B(CreateBlockContext), U8(1),
B(PushContext), R(2), B(PushContext), R(2),
B(LdaTheHole), B(LdaTheHole),
B(Star), R(6), B(Star6),
B(CreateClosure), U8(3), U8(0), U8(2), B(CreateClosure), U8(3), U8(0), U8(2),
B(Star), R(3), B(Star3),
B(LdaConstant), U8(2), B(LdaConstant), U8(2),
B(Star), R(4), B(Star4),
B(Mov), R(3), R(5), B(Mov), R(3), R(5),
B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(3), B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(3),
B(Star), R(4), B(Star4),
B(PopContext), R(2), B(PopContext), R(2),
B(Mov), R(5), R(0), B(Mov), R(5), R(0),
/* 87 S> */ B(Ldar), R(0), /* 87 S> */ B(Ldar), R(0),
...@@ -189,33 +189,33 @@ snippet: " ...@@ -189,33 +189,33 @@ snippet: "
" "
frame size: 7 frame size: 7
parameter count: 1 parameter count: 1
bytecode array length: 69 bytecode array length: 60
bytecodes: [ bytecodes: [
/* 34 S> */ B(CreateBlockContext), U8(0), /* 34 S> */ B(CreateBlockContext), U8(0),
B(PushContext), R(1), B(PushContext), R(1),
B(LdaTheHole), B(LdaTheHole),
B(Star), R(5), B(Star5),
B(CreateClosure), U8(2), U8(0), U8(2), B(CreateClosure), U8(2), U8(0), U8(2),
B(Star), R(2), B(Star2),
B(LdaConstant), U8(1), B(LdaConstant), U8(1),
B(Star), R(3), B(Star3),
B(Mov), R(2), R(4), B(Mov), R(2), R(4),
B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(3), B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(3),
B(Star), R(3), B(Star3),
B(PopContext), R(1), B(PopContext), R(1),
B(CreateBlockContext), U8(3), B(CreateBlockContext), U8(3),
B(PushContext), R(1), B(PushContext), R(1),
B(LdaTheHole), B(LdaTheHole),
B(Star), R(5), B(Star5),
B(CreateClosure), U8(5), U8(1), U8(2), B(CreateClosure), U8(5), U8(1), U8(2),
B(Star), R(2), B(Star2),
B(LdaConstant), U8(4), B(LdaConstant), U8(4),
B(Star), R(3), B(Star3),
B(CreateClosure), U8(6), U8(2), U8(2), B(CreateClosure), U8(6), U8(2), U8(2),
B(Star), R(6), B(Star6),
B(Mov), R(2), R(4), B(Mov), R(2), R(4),
B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(4), B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(4),
B(Star), R(3), B(Star3),
B(PopContext), R(1), B(PopContext), R(1),
B(Mov), R(4), R(0), B(Mov), R(4), R(0),
B(LdaUndefined), B(LdaUndefined),
......
...@@ -12,10 +12,10 @@ snippet: " ...@@ -12,10 +12,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 6 bytecode array length: 5
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(TestNull), /* 45 S> */ B(TestNull),
/* 63 S> */ B(Return), /* 63 S> */ B(Return),
] ]
...@@ -31,10 +31,10 @@ snippet: " ...@@ -31,10 +31,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 5 bytecode array length: 4
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaUndefined), /* 42 S> */ B(LdaUndefined),
B(Star), R(0), B(Star0),
/* 53 S> */ B(TestUndefined), /* 53 S> */ B(TestUndefined),
/* 76 S> */ B(Return), /* 76 S> */ B(Return),
] ]
...@@ -50,10 +50,10 @@ snippet: " ...@@ -50,10 +50,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 6 bytecode array length: 5
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaUndefined), /* 42 S> */ B(LdaUndefined),
B(Star), R(0), B(Star0),
/* 53 S> */ B(TestUndefined), /* 53 S> */ B(TestUndefined),
/* 70 E> */ B(LogicalNot), /* 70 E> */ B(LogicalNot),
/* 76 S> */ B(Return), /* 76 S> */ B(Return),
...@@ -70,10 +70,10 @@ snippet: " ...@@ -70,10 +70,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 7 bytecode array length: 6
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(2), /* 42 S> */ B(LdaSmi), I8(2),
B(Star), R(0), B(Star0),
/* 45 S> */ B(TestUndetectable), /* 45 S> */ B(TestUndetectable),
/* 54 E> */ B(LogicalNot), /* 54 E> */ B(LogicalNot),
/* 62 S> */ B(Return), /* 62 S> */ B(Return),
...@@ -90,10 +90,10 @@ snippet: " ...@@ -90,10 +90,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 5 bytecode array length: 4
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaUndefined), /* 42 S> */ B(LdaUndefined),
B(Star), R(0), B(Star0),
/* 53 S> */ B(TestUndetectable), /* 53 S> */ B(TestUndetectable),
/* 75 S> */ B(Return), /* 75 S> */ B(Return),
] ]
...@@ -109,10 +109,10 @@ snippet: " ...@@ -109,10 +109,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 12 bytecode array length: 11
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaUndefined), /* 42 S> */ B(LdaUndefined),
B(Star), R(0), B(Star0),
/* 53 S> */ B(JumpIfNotUndefined), U8(6), /* 53 S> */ B(JumpIfNotUndefined), U8(6),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(Jump), U8(4), B(Jump), U8(4),
...@@ -131,10 +131,10 @@ snippet: " ...@@ -131,10 +131,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 13 bytecode array length: 12
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaZero), /* 42 S> */ B(LdaZero),
B(Star), R(0), B(Star0),
/* 45 S> */ B(TestUndetectable), /* 45 S> */ B(TestUndetectable),
B(JumpIfFalse), U8(6), B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
...@@ -154,10 +154,10 @@ snippet: " ...@@ -154,10 +154,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 12 bytecode array length: 11
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaZero), /* 42 S> */ B(LdaZero),
B(Star), R(0), B(Star0),
/* 45 S> */ B(JumpIfUndefined), U8(6), /* 45 S> */ B(JumpIfUndefined), U8(6),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(Jump), U8(4), B(Jump), U8(4),
...@@ -176,10 +176,10 @@ snippet: " ...@@ -176,10 +176,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 12 bytecode array length: 11
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaZero), /* 42 S> */ B(LdaZero),
B(Star), R(0), B(Star0),
/* 45 S> */ B(JumpIfNotNull), U8(6), /* 45 S> */ B(JumpIfNotNull), U8(6),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(Jump), U8(4), B(Jump), U8(4),
...@@ -202,10 +202,10 @@ snippet: " ...@@ -202,10 +202,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 11 bytecode array length: 10
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaZero), /* 42 S> */ B(LdaZero),
B(Star), R(0), B(Star0),
/* 45 S> */ B(JumpIfNotNull), U8(5), /* 45 S> */ B(JumpIfNotNull), U8(5),
/* 65 S> */ B(LdaSmi), I8(1), /* 65 S> */ B(LdaSmi), I8(1),
/* 74 S> */ B(Return), /* 74 S> */ B(Return),
...@@ -226,10 +226,10 @@ snippet: " ...@@ -226,10 +226,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 11 bytecode array length: 10
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaZero), /* 42 S> */ B(LdaZero),
B(Star), R(0), B(Star0),
/* 45 S> */ B(TestUndetectable), /* 45 S> */ B(TestUndetectable),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
/* 69 S> */ B(LdaSmi), I8(1), /* 69 S> */ B(LdaSmi), I8(1),
...@@ -252,18 +252,18 @@ snippet: " ...@@ -252,18 +252,18 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 21 bytecode array length: 18
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaUndefined), /* 42 S> */ B(LdaUndefined),
B(Star), R(0), B(Star0),
/* 61 S> */ B(LdaZero), /* 61 S> */ B(LdaZero),
B(Star), R(1), B(Star1),
/* 73 S> */ B(Ldar), R(0), /* 73 S> */ B(Ldar), R(0),
B(JumpIfUndefined), U8(11), B(JumpIfUndefined), U8(10),
/* 92 S> */ B(Ldar), R(1), /* 92 S> */ B(Ldar), R(1),
B(Inc), U8(0), B(Inc), U8(0),
B(Star), R(1), B(Star1),
/* 64 E> */ B(JumpLoop), U8(10), I8(0), /* 64 E> */ B(JumpLoop), U8(9), I8(0),
B(LdaUndefined), B(LdaUndefined),
/* 99 S> */ B(Return), /* 99 S> */ B(Return),
] ]
......
...@@ -11,12 +11,12 @@ snippet: " ...@@ -11,12 +11,12 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 11 bytecode array length: 9
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(AddSmi), I8(2), U8(0), /* 45 S> */ B(AddSmi), I8(2), U8(0),
B(Star), R(0), B(Star0),
B(LdaUndefined), B(LdaUndefined),
/* 53 S> */ B(Return), /* 53 S> */ B(Return),
] ]
...@@ -31,12 +31,12 @@ snippet: " ...@@ -31,12 +31,12 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 11 bytecode array length: 9
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(DivSmi), I8(2), U8(0), /* 45 S> */ B(DivSmi), I8(2), U8(0),
B(Star), R(0), B(Star0),
B(LdaUndefined), B(LdaUndefined),
/* 53 S> */ B(Return), /* 53 S> */ B(Return),
] ]
...@@ -51,10 +51,10 @@ snippet: " ...@@ -51,10 +51,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 19 bytecode array length: 18
bytecodes: [ bytecodes: [
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 54 S> */ B(LdaNamedProperty), R(0), U8(1), U8(1), /* 54 S> */ B(LdaNamedProperty), R(0), U8(1), U8(1),
B(MulSmi), I8(2), U8(3), B(MulSmi), I8(2), U8(3),
/* 61 E> */ B(StaNamedProperty), R(0), U8(1), U8(4), /* 61 E> */ B(StaNamedProperty), R(0), U8(1), U8(4),
...@@ -74,12 +74,12 @@ snippet: " ...@@ -74,12 +74,12 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 22 bytecode array length: 20
bytecodes: [ bytecodes: [
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 52 S> */ B(LdaSmi), I8(1), /* 52 S> */ B(LdaSmi), I8(1),
B(Star), R(2), B(Star2),
B(LdaKeyedProperty), R(0), U8(1), B(LdaKeyedProperty), R(0), U8(1),
B(BitwiseXorSmi), I8(2), U8(3), B(BitwiseXorSmi), I8(2), U8(3),
/* 57 E> */ B(StaKeyedProperty), R(0), R(2), U8(4), /* 57 E> */ B(StaKeyedProperty), R(0), R(2), U8(4),
......
...@@ -43,10 +43,10 @@ snippet: " ...@@ -43,10 +43,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 17 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 34 S> */ B(LdaZero), /* 34 S> */ B(LdaZero),
B(Star), R(0), B(Star0),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
/* 43 E> */ B(TestLessThan), R(0), U8(0), /* 43 E> */ B(TestLessThan), R(0), U8(0),
B(JumpIfFalse), U8(6), B(JumpIfFalse), U8(6),
...@@ -67,10 +67,10 @@ snippet: " ...@@ -67,10 +67,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 12 bytecode array length: 11
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaZero), /* 42 S> */ B(LdaZero),
B(Star), R(0), B(Star0),
/* 45 S> */ B(JumpIfToBooleanFalse), U8(6), /* 45 S> */ B(JumpIfToBooleanFalse), U8(6),
B(LdaSmi), I8(2), B(LdaSmi), I8(2),
B(Jump), U8(4), B(Jump), U8(4),
......
...@@ -11,10 +11,10 @@ snippet: " ...@@ -11,10 +11,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 6 bytecode array length: 5
bytecodes: [ bytecodes: [
/* 44 S> */ B(LdaSmi), I8(10), /* 44 S> */ B(LdaSmi), I8(10),
B(Star), R(0), B(Star0),
B(LdaUndefined), B(LdaUndefined),
/* 48 S> */ B(Return), /* 48 S> */ B(Return),
] ]
...@@ -29,10 +29,10 @@ snippet: " ...@@ -29,10 +29,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 5 bytecode array length: 4
bytecodes: [ bytecodes: [
/* 44 S> */ B(LdaSmi), I8(10), /* 44 S> */ B(LdaSmi), I8(10),
B(Star), R(0), B(Star0),
/* 57 S> */ B(Return), /* 57 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -46,16 +46,16 @@ snippet: " ...@@ -46,16 +46,16 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 20 bytecode array length: 17
bytecodes: [ bytecodes: [
B(LdaTheHole), B(LdaTheHole),
B(Star), R(0), B(Star0),
/* 44 S> */ B(LdaSmi), I8(20), /* 44 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
B(Ldar), R(0), B(Ldar), R(0),
/* 48 E> */ B(ThrowReferenceErrorIfHole), U8(0), /* 48 E> */ B(ThrowReferenceErrorIfHole), U8(0),
B(CallRuntime), U16(Runtime::kThrowConstAssignError), R(0), U8(0), B(CallRuntime), U16(Runtime::kThrowConstAssignError), R(0), U8(0),
B(Star), R(0), B(Star0),
B(LdaUndefined), B(LdaUndefined),
/* 55 S> */ B(Return), /* 55 S> */ B(Return),
] ]
...@@ -71,10 +71,10 @@ snippet: " ...@@ -71,10 +71,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 13 bytecode array length: 12
bytecodes: [ bytecodes: [
/* 44 S> */ B(LdaSmi), I8(10), /* 44 S> */ B(LdaSmi), I8(10),
B(Star), R(0), B(Star0),
/* 48 S> */ B(LdaSmi), I8(20), /* 48 S> */ B(LdaSmi), I8(20),
/* 50 E> */ B(CallRuntime), U16(Runtime::kThrowConstAssignError), R(0), U8(0), /* 50 E> */ B(CallRuntime), U16(Runtime::kThrowConstAssignError), R(0), U8(0),
B(LdaUndefined), B(LdaUndefined),
......
...@@ -57,14 +57,14 @@ snippet: " ...@@ -57,14 +57,14 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 25 bytecode array length: 24
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateFunctionContext), U8(0), U8(1), /* 30 E> */ B(CreateFunctionContext), U8(0), U8(1),
B(PushContext), R(0), B(PushContext), R(0),
B(LdaTheHole), B(LdaTheHole),
B(StaCurrentContextSlot), U8(2), B(StaCurrentContextSlot), U8(2),
/* 44 S> */ B(LdaSmi), I8(20), /* 44 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
B(LdaCurrentContextSlot), U8(2), B(LdaCurrentContextSlot), U8(2),
/* 47 E> */ B(ThrowReferenceErrorIfHole), U8(1), /* 47 E> */ B(ThrowReferenceErrorIfHole), U8(1),
B(CallRuntime), U16(Runtime::kThrowConstAssignError), R(0), U8(0), B(CallRuntime), U16(Runtime::kThrowConstAssignError), R(0), U8(0),
......
...@@ -36,14 +36,14 @@ snippet: " ...@@ -36,14 +36,14 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 2 parameter count: 2
bytecode array length: 18 bytecode array length: 17
bytecodes: [ bytecodes: [
/* 10 E> */ B(CreateFunctionContext), U8(0), U8(1), /* 10 E> */ B(CreateFunctionContext), U8(0), U8(1),
B(PushContext), R(1), B(PushContext), R(1),
B(Ldar), R(arg0), B(Ldar), R(arg0),
B(StaCurrentContextSlot), U8(2), B(StaCurrentContextSlot), U8(2),
/* 27 S> */ B(CreateClosure), U8(1), U8(0), U8(2), /* 27 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
B(Star), R(0), B(Star0),
/* 53 S> */ B(LdaCurrentContextSlot), U8(2), /* 53 S> */ B(LdaCurrentContextSlot), U8(2),
/* 65 S> */ B(Return), /* 65 S> */ B(Return),
] ]
......
...@@ -77,12 +77,12 @@ snippet: " ...@@ -77,12 +77,12 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 17 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateFunctionContext), U8(0), U8(1), /* 30 E> */ B(CreateFunctionContext), U8(0), U8(1),
B(PushContext), R(0), B(PushContext), R(0),
/* 41 S> */ B(CreateClosure), U8(1), U8(0), U8(2), /* 41 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
B(Star), R(1), B(Star1),
/* 64 E> */ B(CallUndefinedReceiver0), R(1), U8(0), /* 64 E> */ B(CallUndefinedReceiver0), R(1), U8(0),
/* 68 S> */ B(LdaCurrentContextSlot), U8(2), /* 68 S> */ B(LdaCurrentContextSlot), U8(2),
/* 77 S> */ B(Return), /* 77 S> */ B(Return),
...@@ -388,7 +388,7 @@ snippet: " ...@@ -388,7 +388,7 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 796 bytecode array length: 795
bytecodes: [ bytecodes: [
/* 30 E> */ B(Wide), B(CreateFunctionContext), U16(0), U16(256), /* 30 E> */ B(Wide), B(CreateFunctionContext), U16(0), U16(256),
B(PushContext), R(1), B(PushContext), R(1),
...@@ -903,7 +903,7 @@ bytecodes: [ ...@@ -903,7 +903,7 @@ bytecodes: [
/* 3721 S> */ B(LdaZero), /* 3721 S> */ B(LdaZero),
/* 3721 E> */ B(StaCurrentContextSlot), U8(255), /* 3721 E> */ B(StaCurrentContextSlot), U8(255),
/* 3724 S> */ B(LdaGlobal), U8(1), U8(0), /* 3724 S> */ B(LdaGlobal), U8(1), U8(0),
B(Star), R(2), B(Star2),
/* 3724 E> */ B(CallUndefinedReceiver0), R(2), U8(2), /* 3724 E> */ B(CallUndefinedReceiver0), R(2), U8(2),
/* 3740 S> */ B(LdaSmi), I8(100), /* 3740 S> */ B(LdaSmi), I8(100),
/* 3740 E> */ B(Wide), B(StaCurrentContextSlot), U16(256), /* 3740 E> */ B(Wide), B(StaCurrentContextSlot), U16(256),
......
...@@ -11,12 +11,12 @@ snippet: " ...@@ -11,12 +11,12 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 9 bytecode array length: 7
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(Inc), U8(0), /* 45 S> */ B(Inc), U8(0),
B(Star), R(0), B(Star0),
/* 56 S> */ B(Return), /* 56 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -30,14 +30,14 @@ snippet: " ...@@ -30,14 +30,14 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 15 bytecode array length: 12
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(ToNumeric), U8(0), /* 45 S> */ B(ToNumeric), U8(0),
B(Star), R(1), B(Star1),
B(Inc), U8(0), B(Inc), U8(0),
B(Star), R(0), B(Star0),
B(Ldar), R(1), B(Ldar), R(1),
/* 56 S> */ B(Return), /* 56 S> */ B(Return),
] ]
...@@ -52,12 +52,12 @@ snippet: " ...@@ -52,12 +52,12 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 9 bytecode array length: 7
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(Dec), U8(0), /* 45 S> */ B(Dec), U8(0),
B(Star), R(0), B(Star0),
/* 56 S> */ B(Return), /* 56 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -71,14 +71,14 @@ snippet: " ...@@ -71,14 +71,14 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 15 bytecode array length: 12
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(ToNumeric), U8(0), /* 45 S> */ B(ToNumeric), U8(0),
B(Star), R(1), B(Star1),
B(Dec), U8(0), B(Dec), U8(0),
B(Star), R(0), B(Star0),
B(Ldar), R(1), B(Ldar), R(1),
/* 56 S> */ B(Return), /* 56 S> */ B(Return),
] ]
...@@ -93,15 +93,15 @@ snippet: " ...@@ -93,15 +93,15 @@ snippet: "
" "
frame size: 4 frame size: 4
parameter count: 1 parameter count: 1
bytecode array length: 25 bytecode array length: 22
bytecodes: [ bytecodes: [
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 54 S> */ B(LdaNamedProperty), R(0), U8(1), U8(1), /* 54 S> */ B(LdaNamedProperty), R(0), U8(1), U8(1),
B(ToNumeric), U8(3), B(ToNumeric), U8(3),
B(Star), R(2), B(Star2),
B(Inc), U8(3), B(Inc), U8(3),
B(Star), R(3), B(Star3),
/* 66 E> */ B(StaNamedProperty), R(0), U8(1), U8(4), /* 66 E> */ B(StaNamedProperty), R(0), U8(1), U8(4),
B(Ldar), R(2), B(Ldar), R(2),
/* 69 S> */ B(Return), /* 69 S> */ B(Return),
...@@ -119,13 +119,13 @@ snippet: " ...@@ -119,13 +119,13 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 21 bytecode array length: 19
bytecodes: [ bytecodes: [
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 54 S> */ B(LdaNamedProperty), R(0), U8(1), U8(1), /* 54 S> */ B(LdaNamedProperty), R(0), U8(1), U8(1),
B(Dec), U8(3), B(Dec), U8(3),
B(Star), R(2), B(Star2),
/* 65 E> */ B(StaNamedProperty), R(0), U8(1), U8(4), /* 65 E> */ B(StaNamedProperty), R(0), U8(1), U8(4),
B(Ldar), R(2), B(Ldar), R(2),
/* 69 S> */ B(Return), /* 69 S> */ B(Return),
...@@ -143,18 +143,18 @@ snippet: " ...@@ -143,18 +143,18 @@ snippet: "
" "
frame size: 6 frame size: 6
parameter count: 1 parameter count: 1
bytecode array length: 30 bytecode array length: 26
bytecodes: [ bytecodes: [
/* 45 S> */ B(LdaConstant), U8(0), /* 45 S> */ B(LdaConstant), U8(0),
B(Star), R(0), B(Star0),
/* 60 S> */ B(CreateObjectLiteral), U8(1), U8(0), U8(41), /* 60 S> */ B(CreateObjectLiteral), U8(1), U8(0), U8(41),
B(Star), R(1), B(Star1),
/* 72 S> */ B(Ldar), R(0), /* 72 S> */ B(Ldar), R(0),
/* 81 E> */ B(LdaKeyedProperty), R(1), U8(1), /* 81 E> */ B(LdaKeyedProperty), R(1), U8(1),
B(ToNumeric), U8(3), B(ToNumeric), U8(3),
B(Star), R(4), B(Star4),
B(Dec), U8(3), B(Dec), U8(3),
B(Star), R(5), B(Star5),
/* 86 E> */ B(StaKeyedProperty), R(1), R(0), U8(4), /* 86 E> */ B(StaKeyedProperty), R(1), R(0), U8(4),
B(Ldar), R(4), B(Ldar), R(4),
/* 89 S> */ B(Return), /* 89 S> */ B(Return),
...@@ -172,16 +172,16 @@ snippet: " ...@@ -172,16 +172,16 @@ snippet: "
" "
frame size: 5 frame size: 5
parameter count: 1 parameter count: 1
bytecode array length: 26 bytecode array length: 23
bytecodes: [ bytecodes: [
/* 45 S> */ B(LdaConstant), U8(0), /* 45 S> */ B(LdaConstant), U8(0),
B(Star), R(0), B(Star0),
/* 60 S> */ B(CreateObjectLiteral), U8(1), U8(0), U8(41), /* 60 S> */ B(CreateObjectLiteral), U8(1), U8(0), U8(41),
B(Star), R(1), B(Star1),
/* 72 S> */ B(Ldar), R(0), /* 72 S> */ B(Ldar), R(0),
/* 83 E> */ B(LdaKeyedProperty), R(1), U8(1), /* 83 E> */ B(LdaKeyedProperty), R(1), U8(1),
B(Inc), U8(3), B(Inc), U8(3),
B(Star), R(4), B(Star4),
/* 87 E> */ B(StaKeyedProperty), R(1), R(0), U8(4), /* 87 E> */ B(StaKeyedProperty), R(1), R(0), U8(4),
B(Ldar), R(4), B(Ldar), R(4),
/* 89 S> */ B(Return), /* 89 S> */ B(Return),
...@@ -199,14 +199,14 @@ snippet: " ...@@ -199,14 +199,14 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 22 bytecode array length: 21
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateFunctionContext), U8(0), U8(1), /* 30 E> */ B(CreateFunctionContext), U8(0), U8(1),
B(PushContext), R(1), B(PushContext), R(1),
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
/* 42 E> */ B(StaCurrentContextSlot), U8(2), /* 42 E> */ B(StaCurrentContextSlot), U8(2),
/* 53 S> */ B(CreateClosure), U8(1), U8(0), U8(2), /* 53 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
B(Star), R(0), B(Star0),
/* 78 S> */ B(LdaCurrentContextSlot), U8(2), /* 78 S> */ B(LdaCurrentContextSlot), U8(2),
B(Inc), U8(0), B(Inc), U8(0),
/* 87 E> */ B(StaCurrentContextSlot), U8(2), /* 87 E> */ B(StaCurrentContextSlot), U8(2),
...@@ -225,17 +225,17 @@ snippet: " ...@@ -225,17 +225,17 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 28 bytecode array length: 26
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateFunctionContext), U8(0), U8(1), /* 30 E> */ B(CreateFunctionContext), U8(0), U8(1),
B(PushContext), R(1), B(PushContext), R(1),
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
/* 42 E> */ B(StaCurrentContextSlot), U8(2), /* 42 E> */ B(StaCurrentContextSlot), U8(2),
/* 53 S> */ B(CreateClosure), U8(1), U8(0), U8(2), /* 53 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
B(Star), R(0), B(Star0),
/* 78 S> */ B(LdaCurrentContextSlot), U8(2), /* 78 S> */ B(LdaCurrentContextSlot), U8(2),
B(ToNumeric), U8(0), B(ToNumeric), U8(0),
B(Star), R(2), B(Star2),
B(Dec), U8(0), B(Dec), U8(0),
/* 86 E> */ B(StaCurrentContextSlot), U8(2), /* 86 E> */ B(StaCurrentContextSlot), U8(2),
B(Ldar), R(2), B(Ldar), R(2),
...@@ -254,19 +254,19 @@ snippet: " ...@@ -254,19 +254,19 @@ snippet: "
" "
frame size: 5 frame size: 5
parameter count: 1 parameter count: 1
bytecode array length: 31 bytecode array length: 26
bytecodes: [ bytecodes: [
/* 44 S> */ B(LdaSmi), I8(1), /* 44 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 55 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37), /* 55 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(Star), R(1), B(Star1),
/* 63 S> */ B(Ldar), R(0), /* 63 S> */ B(Ldar), R(0),
B(ToNumeric), U8(1), B(ToNumeric), U8(1),
B(Star), R(3), B(Star3),
B(Inc), U8(1), B(Inc), U8(1),
B(Star), R(0), B(Star0),
B(LdaSmi), I8(2), B(LdaSmi), I8(2),
B(Star), R(4), B(Star4),
/* 79 E> */ B(StaKeyedProperty), R(1), R(3), U8(2), /* 79 E> */ B(StaKeyedProperty), R(1), R(3), U8(2),
B(Ldar), R(4), B(Ldar), R(4),
/* 83 S> */ B(Return), /* 83 S> */ B(Return),
......
...@@ -13,10 +13,10 @@ snippet: " ...@@ -13,10 +13,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 4 bytecode array length: 3
bytecodes: [ bytecodes: [
/* 10 E> */ B(CreateMappedArguments), /* 10 E> */ B(CreateMappedArguments),
B(Star), R(0), B(Star0),
/* 32 S> */ B(Return), /* 32 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -31,10 +31,10 @@ snippet: " ...@@ -31,10 +31,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 8 bytecode array length: 7
bytecodes: [ bytecodes: [
/* 10 E> */ B(CreateMappedArguments), /* 10 E> */ B(CreateMappedArguments),
B(Star), R(0), B(Star0),
/* 15 S> */ B(LdaZero), /* 15 S> */ B(LdaZero),
/* 31 E> */ B(LdaKeyedProperty), R(0), U8(0), /* 31 E> */ B(LdaKeyedProperty), R(0), U8(0),
/* 35 S> */ B(Return), /* 35 S> */ B(Return),
...@@ -51,10 +51,10 @@ snippet: " ...@@ -51,10 +51,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 4 bytecode array length: 3
bytecodes: [ bytecodes: [
/* 10 E> */ B(CreateUnmappedArguments), /* 10 E> */ B(CreateUnmappedArguments),
B(Star), R(0), B(Star0),
/* 46 S> */ B(Return), /* 46 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -69,14 +69,14 @@ snippet: " ...@@ -69,14 +69,14 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 2 parameter count: 2
bytecode array length: 17 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 10 E> */ B(CreateFunctionContext), U8(0), U8(1), /* 10 E> */ B(CreateFunctionContext), U8(0), U8(1),
B(PushContext), R(1), B(PushContext), R(1),
B(Ldar), R(arg0), B(Ldar), R(arg0),
B(StaCurrentContextSlot), U8(2), B(StaCurrentContextSlot), U8(2),
B(CreateMappedArguments), B(CreateMappedArguments),
B(Star), R(0), B(Star0),
/* 16 S> */ B(LdaZero), /* 16 S> */ B(LdaZero),
/* 32 E> */ B(LdaKeyedProperty), R(0), U8(0), /* 32 E> */ B(LdaKeyedProperty), R(0), U8(0),
/* 36 S> */ B(Return), /* 36 S> */ B(Return),
...@@ -94,7 +94,7 @@ snippet: " ...@@ -94,7 +94,7 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 4 parameter count: 4
bytecode array length: 21 bytecode array length: 20
bytecodes: [ bytecodes: [
/* 10 E> */ B(CreateFunctionContext), U8(0), U8(3), /* 10 E> */ B(CreateFunctionContext), U8(0), U8(3),
B(PushContext), R(1), B(PushContext), R(1),
...@@ -105,7 +105,7 @@ bytecodes: [ ...@@ -105,7 +105,7 @@ bytecodes: [
B(Ldar), R(arg2), B(Ldar), R(arg2),
B(StaCurrentContextSlot), U8(2), B(StaCurrentContextSlot), U8(2),
B(CreateMappedArguments), B(CreateMappedArguments),
B(Star), R(0), B(Star0),
/* 39 S> */ B(Return), /* 39 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -121,10 +121,10 @@ snippet: " ...@@ -121,10 +121,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 4 parameter count: 4
bytecode array length: 4 bytecode array length: 3
bytecodes: [ bytecodes: [
/* 10 E> */ B(CreateUnmappedArguments), /* 10 E> */ B(CreateUnmappedArguments),
B(Star), R(0), B(Star0),
/* 53 S> */ B(Return), /* 53 S> */ B(Return),
] ]
constant pool: [ constant pool: [
......
...@@ -13,11 +13,11 @@ snippet: " ...@@ -13,11 +13,11 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 6 bytecode array length: 4
bytecodes: [ bytecodes: [
/* 10 E> */ B(CreateRestParameter), /* 10 E> */ B(CreateRestParameter),
B(Star), R(1), B(Star1),
B(Star), R(0), B(Star0),
/* 42 S> */ B(Return), /* 42 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -32,10 +32,10 @@ snippet: " ...@@ -32,10 +32,10 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 2 parameter count: 2
bytecode array length: 12 bytecode array length: 11
bytecodes: [ bytecodes: [
/* 10 E> */ B(CreateRestParameter), /* 10 E> */ B(CreateRestParameter),
B(Star), R(2), B(Star2),
B(Mov), R(arg0), R(0), B(Mov), R(arg0), R(0),
B(Mov), R(2), R(1), B(Mov), R(2), R(1),
/* 29 S> */ B(Ldar), R(1), /* 29 S> */ B(Ldar), R(1),
...@@ -53,10 +53,10 @@ snippet: " ...@@ -53,10 +53,10 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 2 parameter count: 2
bytecode array length: 14 bytecode array length: 13
bytecodes: [ bytecodes: [
/* 10 E> */ B(CreateRestParameter), /* 10 E> */ B(CreateRestParameter),
B(Star), R(2), B(Star2),
B(Mov), R(arg0), R(0), B(Mov), R(arg0), R(0),
B(Mov), R(2), R(1), B(Mov), R(2), R(1),
/* 29 S> */ B(LdaZero), /* 29 S> */ B(LdaZero),
...@@ -75,17 +75,17 @@ snippet: " ...@@ -75,17 +75,17 @@ snippet: "
" "
frame size: 5 frame size: 5
parameter count: 2 parameter count: 2
bytecode array length: 26 bytecode array length: 23
bytecodes: [ bytecodes: [
/* 10 E> */ B(CreateUnmappedArguments), /* 10 E> */ B(CreateUnmappedArguments),
B(Star), R(3), B(Star3),
B(CreateRestParameter), B(CreateRestParameter),
B(Star), R(2), B(Star2),
B(Mov), R(arg0), R(0), B(Mov), R(arg0), R(0),
B(Mov), R(2), R(1), B(Mov), R(2), R(1),
/* 29 S> */ B(LdaZero), /* 29 S> */ B(LdaZero),
/* 44 E> */ B(LdaKeyedProperty), R(1), U8(1), /* 44 E> */ B(LdaKeyedProperty), R(1), U8(1),
B(Star), R(4), B(Star4),
B(LdaZero), B(LdaZero),
/* 59 E> */ B(LdaKeyedProperty), R(3), U8(3), /* 59 E> */ B(LdaKeyedProperty), R(3), U8(3),
/* 48 E> */ B(Add), R(4), U8(0), /* 48 E> */ B(Add), R(4), U8(0),
......
...@@ -27,10 +27,10 @@ snippet: " ...@@ -27,10 +27,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 6 bytecode array length: 5
bytecodes: [ bytecodes: [
/* 66 S> */ B(LdaSmi), I8(1), /* 66 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
B(LdaUndefined), B(LdaUndefined),
/* 69 S> */ B(Return), /* 69 S> */ B(Return),
] ]
...@@ -61,10 +61,10 @@ snippet: " ...@@ -61,10 +61,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 12 bytecode array length: 11
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(1), /* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0), B(Star0),
/* 45 S> */ B(JumpIfToBooleanFalse), U8(5), /* 45 S> */ B(JumpIfToBooleanFalse), U8(5),
/* 54 S> */ B(LdaSmi), I8(1), /* 54 S> */ B(LdaSmi), I8(1),
/* 63 S> */ B(Return), /* 63 S> */ B(Return),
......
...@@ -12,10 +12,10 @@ snippet: " ...@@ -12,10 +12,10 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 19 bytecode array length: 18
bytecodes: [ bytecodes: [
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(1), B(Star1),
B(Mov), R(closure), R(2), B(Mov), R(closure), R(2),
/* 0 E> */ B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), /* 0 E> */ B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2),
/* 8 S> */ B(LdaSmi), I8(1), /* 8 S> */ B(LdaSmi), I8(1),
...@@ -36,10 +36,10 @@ snippet: " ...@@ -36,10 +36,10 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 14 bytecode array length: 13
bytecodes: [ bytecodes: [
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(0), B(Star0),
B(Mov), R(closure), R(1), B(Mov), R(closure), R(1),
/* 0 E> */ B(CallRuntime), U16(Runtime::kDeclareGlobals), R(0), U8(2), /* 0 E> */ B(CallRuntime), U16(Runtime::kDeclareGlobals), R(0), U8(2),
B(LdaUndefined), B(LdaUndefined),
...@@ -58,17 +58,17 @@ snippet: " ...@@ -58,17 +58,17 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 25 bytecode array length: 23
bytecodes: [ bytecodes: [
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(1), B(Star1),
B(Mov), R(closure), R(2), B(Mov), R(closure), R(2),
/* 0 E> */ B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), /* 0 E> */ B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2),
/* 8 S> */ B(LdaSmi), I8(1), /* 8 S> */ B(LdaSmi), I8(1),
/* 8 E> */ B(StaGlobal), U8(1), U8(0), /* 8 E> */ B(StaGlobal), U8(1), U8(0),
/* 11 S> */ B(LdaSmi), I8(2), /* 11 S> */ B(LdaSmi), I8(2),
/* 12 E> */ B(StaGlobal), U8(1), U8(0), /* 12 E> */ B(StaGlobal), U8(1), U8(0),
B(Star), R(0), B(Star0),
/* 16 S> */ B(Return), /* 16 S> */ B(Return),
] ]
constant pool: [ constant pool: [
...@@ -85,16 +85,16 @@ snippet: " ...@@ -85,16 +85,16 @@ snippet: "
" "
frame size: 3 frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 23 bytecode array length: 20
bytecodes: [ bytecodes: [
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(1), B(Star1),
B(Mov), R(closure), R(2), B(Mov), R(closure), R(2),
/* 0 E> */ B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2), /* 0 E> */ B(CallRuntime), U16(Runtime::kDeclareGlobals), R(1), U8(2),
/* 16 S> */ B(LdaGlobal), U8(1), U8(0), /* 16 S> */ B(LdaGlobal), U8(1), U8(0),
B(Star), R(1), B(Star1),
/* 16 E> */ B(CallUndefinedReceiver0), R(1), U8(2), /* 16 E> */ B(CallUndefinedReceiver0), R(1), U8(2),
B(Star), R(0), B(Star0),
/* 21 S> */ B(Return), /* 21 S> */ B(Return),
] ]
constant pool: [ constant pool: [
......
...@@ -11,10 +11,10 @@ snippet: " ...@@ -11,10 +11,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 11 bytecode array length: 10
bytecodes: [ bytecodes: [
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 56 S> */ B(LdaConstant), U8(1), /* 56 S> */ B(LdaConstant), U8(1),
B(DeletePropertySloppy), R(0), B(DeletePropertySloppy), R(0),
/* 74 S> */ B(Return), /* 74 S> */ B(Return),
...@@ -32,10 +32,10 @@ snippet: " ...@@ -32,10 +32,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 11 bytecode array length: 10
bytecodes: [ bytecodes: [
/* 56 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 56 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 70 S> */ B(LdaConstant), U8(1), /* 70 S> */ B(LdaConstant), U8(1),
B(DeletePropertyStrict), R(0), B(DeletePropertyStrict), R(0),
/* 88 S> */ B(Return), /* 88 S> */ B(Return),
...@@ -53,10 +53,10 @@ snippet: " ...@@ -53,10 +53,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 11 bytecode array length: 10
bytecodes: [ bytecodes: [
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 56 S> */ B(LdaSmi), I8(2), /* 56 S> */ B(LdaSmi), I8(2),
B(DeletePropertySloppy), R(0), B(DeletePropertySloppy), R(0),
/* 75 S> */ B(Return), /* 75 S> */ B(Return),
...@@ -73,10 +73,10 @@ snippet: " ...@@ -73,10 +73,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 6 bytecode array length: 5
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaSmi), I8(10), /* 42 S> */ B(LdaSmi), I8(10),
B(Star), R(0), B(Star0),
/* 46 S> */ B(LdaFalse), /* 46 S> */ B(LdaFalse),
/* 62 S> */ B(Return), /* 62 S> */ B(Return),
] ]
...@@ -94,7 +94,7 @@ snippet: " ...@@ -94,7 +94,7 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 24 bytecode array length: 23
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateFunctionContext), U8(0), U8(1), /* 30 E> */ B(CreateFunctionContext), U8(0), U8(1),
B(PushContext), R(0), B(PushContext), R(0),
...@@ -102,7 +102,7 @@ bytecodes: [ ...@@ -102,7 +102,7 @@ bytecodes: [
/* 56 E> */ B(StaCurrentContextSlot), U8(2), /* 56 E> */ B(StaCurrentContextSlot), U8(2),
/* 64 S> */ B(CreateClosure), U8(2), U8(0), U8(2), /* 64 S> */ B(CreateClosure), U8(2), U8(0), U8(2),
/* 93 S> */ B(LdaImmutableCurrentContextSlot), U8(2), /* 93 S> */ B(LdaImmutableCurrentContextSlot), U8(2),
B(Star), R(1), B(Star1),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(DeletePropertyStrict), R(1), B(DeletePropertyStrict), R(1),
/* 112 S> */ B(Return), /* 112 S> */ B(Return),
......
...@@ -19,10 +19,10 @@ snippet: " ...@@ -19,10 +19,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 11 bytecode array length: 10
bytecodes: [ bytecodes: [
/* 15 S> */ B(LdaConstant), U8(0), /* 15 S> */ B(LdaConstant), U8(0),
B(Star), R(0), B(Star0),
B(CallRuntime), U16(Runtime::kDeleteLookupSlot), R(0), U8(1), B(CallRuntime), U16(Runtime::kDeleteLookupSlot), R(0), U8(1),
B(LdaUndefined), B(LdaUndefined),
/* 25 S> */ B(Return), /* 25 S> */ B(Return),
...@@ -69,10 +69,10 @@ snippet: " ...@@ -69,10 +69,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 10 bytecode array length: 9
bytecodes: [ bytecodes: [
/* 15 S> */ B(LdaConstant), U8(0), /* 15 S> */ B(LdaConstant), U8(0),
B(Star), R(0), B(Star0),
B(CallRuntime), U16(Runtime::kDeleteLookupSlot), R(0), U8(1), B(CallRuntime), U16(Runtime::kDeleteLookupSlot), R(0), U8(1),
/* 31 S> */ B(Return), /* 31 S> */ B(Return),
] ]
......
...@@ -11,7 +11,7 @@ snippet: " ...@@ -11,7 +11,7 @@ snippet: "
" "
frame size: 10 frame size: 10
parameter count: 1 parameter count: 1
bytecode array length: 58 bytecode array length: 52
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateFunctionContext), U8(0), U8(4), /* 30 E> */ B(CreateFunctionContext), U8(0), U8(4),
B(PushContext), R(1), B(PushContext), R(1),
...@@ -22,20 +22,20 @@ bytecodes: [ ...@@ -22,20 +22,20 @@ bytecodes: [
B(Ldar), R(0), B(Ldar), R(0),
B(StaCurrentContextSlot), U8(4), B(StaCurrentContextSlot), U8(4),
/* 34 S> */ B(LdaLookupGlobalSlot), U8(1), U8(0), U8(1), /* 34 S> */ B(LdaLookupGlobalSlot), U8(1), U8(0), U8(1),
B(Star), R(2), B(Star2),
B(LdaConstant), U8(2), B(LdaConstant), U8(2),
B(Star), R(3), B(Star3),
B(LdaZero), B(LdaZero),
B(Star), R(7), B(Star7),
B(LdaSmi), I8(30), B(LdaSmi), I8(30),
B(Star), R(8), B(Star8),
B(LdaSmi), I8(41), B(LdaSmi), I8(41),
B(Star), R(9), B(Star9),
B(Mov), R(2), R(4), B(Mov), R(2), R(4),
B(Mov), R(3), R(5), B(Mov), R(3), R(5),
B(Mov), R(closure), R(6), B(Mov), R(closure), R(6),
B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), U8(6), B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(4), U8(6),
B(Star), R(2), B(Star2),
/* 41 E> */ B(CallUndefinedReceiver1), R(2), R(3), U8(2), /* 41 E> */ B(CallUndefinedReceiver1), R(2), R(3), U8(2),
/* 52 S> */ B(Return), /* 52 S> */ B(Return),
] ]
......
...@@ -60,26 +60,26 @@ snippet: " ...@@ -60,26 +60,26 @@ snippet: "
" "
frame size: 8 frame size: 8
parameter count: 1 parameter count: 1
bytecode array length: 42 bytecode array length: 37
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaConstant), U8(0), /* 42 S> */ B(LdaConstant), U8(0),
B(Star), R(0), B(Star0),
/* 68 S> */ B(JumpIfUndefinedOrNull), U8(36), /* 68 S> */ B(JumpIfUndefinedOrNull), U8(32),
B(ToObject), R(3), B(ToObject), R(3),
B(ForInEnumerate), R(3), B(ForInEnumerate), R(3),
B(ForInPrepare), R(4), U8(0), B(ForInPrepare), R(4), U8(0),
B(LdaZero), B(LdaZero),
B(Star), R(7), B(Star7),
/* 63 S> */ B(ForInContinue), R(7), R(6), /* 63 S> */ B(ForInContinue), R(7), R(6),
B(JumpIfFalse), U8(21), B(JumpIfFalse), U8(18),
B(ForInNext), R(3), R(7), R(4), U8(0), B(ForInNext), R(3), R(7), R(4), U8(0),
B(JumpIfUndefined), U8(7), B(JumpIfUndefined), U8(5),
B(Star), R(2), B(Star2),
/* 63 S> */ B(Star), R(1), /* 63 S> */ B(Star1),
/* 82 S> */ B(Return), /* 82 S> */ B(Return),
B(ForInStep), R(7), B(ForInStep), R(7),
B(Star), R(7), B(Star7),
/* 54 E> */ B(JumpLoop), U8(21), I8(0), /* 54 E> */ B(JumpLoop), U8(18), I8(0),
B(LdaUndefined), B(LdaUndefined),
/* 85 S> */ B(Return), /* 85 S> */ B(Return),
] ]
...@@ -96,30 +96,30 @@ snippet: " ...@@ -96,30 +96,30 @@ snippet: "
" "
frame size: 9 frame size: 9
parameter count: 1 parameter count: 1
bytecode array length: 54 bytecode array length: 48
bytecodes: [ bytecodes: [
/* 42 S> */ B(LdaZero), /* 42 S> */ B(LdaZero),
B(Star), R(0), B(Star0),
/* 59 S> */ B(CreateArrayLiteral), U8(0), U8(1), U8(37), /* 59 S> */ B(CreateArrayLiteral), U8(0), U8(1), U8(37),
B(JumpIfUndefinedOrNull), U8(45), B(JumpIfUndefinedOrNull), U8(40),
B(ToObject), R(3), B(ToObject), R(3),
B(ForInEnumerate), R(3), B(ForInEnumerate), R(3),
B(ForInPrepare), R(4), U8(0), B(ForInPrepare), R(4), U8(0),
B(LdaZero), B(LdaZero),
B(Star), R(7), B(Star7),
/* 54 S> */ B(ForInContinue), R(7), R(6), /* 54 S> */ B(ForInContinue), R(7), R(6),
B(JumpIfFalse), U8(30), B(JumpIfFalse), U8(26),
B(ForInNext), R(3), R(7), R(4), U8(0), B(ForInNext), R(3), R(7), R(4), U8(0),
B(JumpIfUndefined), U8(16), B(JumpIfUndefined), U8(13),
B(Star), R(2), B(Star2),
/* 54 S> */ B(Star), R(1), /* 54 S> */ B(Star1),
/* 70 S> */ B(Ldar), R(2), /* 70 S> */ B(Ldar), R(2),
/* 75 E> */ B(Add), R(0), U8(2), /* 75 E> */ B(Add), R(0), U8(2),
B(Mov), R(0), R(8), B(Mov), R(0), R(8),
B(Star), R(0), B(Star0),
/* 72 E> */ B(ForInStep), R(7), /* 72 E> */ B(ForInStep), R(7),
B(Star), R(7), B(Star7),
/* 45 E> */ B(JumpLoop), U8(30), I8(0), /* 45 E> */ B(JumpLoop), U8(26), I8(0),
B(LdaUndefined), B(LdaUndefined),
/* 80 S> */ B(Return), /* 80 S> */ B(Return),
] ]
...@@ -139,39 +139,39 @@ snippet: " ...@@ -139,39 +139,39 @@ snippet: "
" "
frame size: 7 frame size: 7
parameter count: 1 parameter count: 1
bytecode array length: 81 bytecode array length: 75
bytecodes: [ bytecodes: [
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 77 S> */ B(CreateArrayLiteral), U8(1), U8(2), U8(37), /* 77 S> */ B(CreateArrayLiteral), U8(1), U8(2), U8(37),
B(JumpIfUndefinedOrNull), U8(69), B(JumpIfUndefinedOrNull), U8(64),
B(ToObject), R(1), B(ToObject), R(1),
B(ForInEnumerate), R(1), B(ForInEnumerate), R(1),
B(ForInPrepare), R(2), U8(1), B(ForInPrepare), R(2), U8(1),
B(LdaZero), B(LdaZero),
B(Star), R(5), B(Star5),
/* 68 S> */ B(ForInContinue), R(5), R(4), /* 68 S> */ B(ForInContinue), R(5), R(4),
B(JumpIfFalse), U8(54), B(JumpIfFalse), U8(50),
B(ForInNext), R(1), R(5), R(2), U8(1), B(ForInNext), R(1), R(5), R(2), U8(1),
B(JumpIfUndefined), U8(40), B(JumpIfUndefined), U8(37),
B(Star), R(6), B(Star6),
B(Ldar), R(6), B(Ldar), R(6),
/* 68 E> */ B(StaNamedProperty), R(0), U8(2), U8(3), /* 68 E> */ B(StaNamedProperty), R(0), U8(2), U8(3),
/* 100 S> */ B(LdaNamedProperty), R(0), U8(2), U8(5), /* 100 S> */ B(LdaNamedProperty), R(0), U8(2), U8(5),
B(Star), R(6), B(Star6),
B(LdaSmi), I8(10), B(LdaSmi), I8(10),
/* 106 E> */ B(TestEqual), R(6), U8(7), /* 106 E> */ B(TestEqual), R(6), U8(7),
B(JumpIfFalse), U8(4), B(JumpIfFalse), U8(4),
/* 113 S> */ B(Jump), U8(17), /* 113 S> */ B(Jump), U8(16),
/* 130 S> */ B(LdaNamedProperty), R(0), U8(2), U8(5), /* 130 S> */ B(LdaNamedProperty), R(0), U8(2), U8(5),
B(Star), R(6), B(Star6),
B(LdaSmi), I8(20), B(LdaSmi), I8(20),
/* 136 E> */ B(TestEqual), R(6), U8(8), /* 136 E> */ B(TestEqual), R(6), U8(8),
B(JumpIfFalse), U8(4), B(JumpIfFalse), U8(4),
/* 143 S> */ B(Jump), U8(9), /* 143 S> */ B(Jump), U8(8),
B(ForInStep), R(5), B(ForInStep), R(5),
B(Star), R(5), B(Star5),
/* 62 E> */ B(JumpLoop), U8(54), I8(0), /* 62 E> */ B(JumpLoop), U8(50), I8(0),
B(LdaUndefined), B(LdaUndefined),
/* 152 S> */ B(Return), /* 152 S> */ B(Return),
] ]
...@@ -190,32 +190,32 @@ snippet: " ...@@ -190,32 +190,32 @@ snippet: "
" "
frame size: 9 frame size: 9
parameter count: 1 parameter count: 1
bytecode array length: 60 bytecode array length: 55
bytecodes: [ bytecodes: [
/* 42 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37), /* 42 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(Star), R(0), B(Star0),
/* 72 S> */ B(CreateArrayLiteral), U8(1), U8(2), U8(37), /* 72 S> */ B(CreateArrayLiteral), U8(1), U8(2), U8(37),
B(JumpIfUndefinedOrNull), U8(48), B(JumpIfUndefinedOrNull), U8(44),
B(ToObject), R(1), B(ToObject), R(1),
B(ForInEnumerate), R(1), B(ForInEnumerate), R(1),
B(ForInPrepare), R(2), U8(1), B(ForInPrepare), R(2), U8(1),
B(LdaZero), B(LdaZero),
B(Star), R(5), B(Star5),
/* 65 S> */ B(ForInContinue), R(5), R(4), /* 65 S> */ B(ForInContinue), R(5), R(4),
B(JumpIfFalse), U8(33), B(JumpIfFalse), U8(30),
B(ForInNext), R(1), R(5), R(2), U8(1), B(ForInNext), R(1), R(5), R(2), U8(1),
B(JumpIfUndefined), U8(19), B(JumpIfUndefined), U8(17),
B(Star), R(6), B(Star6),
B(LdaZero), B(LdaZero),
B(Star), R(8), B(Star8),
B(Ldar), R(6), B(Ldar), R(6),
/* 65 E> */ B(StaKeyedProperty), R(0), R(8), U8(3), /* 65 E> */ B(StaKeyedProperty), R(0), R(8), U8(3),
/* 83 S> */ B(LdaSmi), I8(3), /* 83 S> */ B(LdaSmi), I8(3),
/* 91 E> */ B(LdaKeyedProperty), R(0), U8(5), /* 91 E> */ B(LdaKeyedProperty), R(0), U8(5),
/* 95 S> */ B(Return), /* 95 S> */ B(Return),
B(ForInStep), R(5), B(ForInStep), R(5),
B(Star), R(5), B(Star5),
/* 59 E> */ B(JumpLoop), U8(33), I8(0), /* 59 E> */ B(JumpLoop), U8(30), I8(0),
B(LdaUndefined), B(LdaUndefined),
/* 98 S> */ B(Return), /* 98 S> */ B(Return),
] ]
......
...@@ -28,10 +28,10 @@ snippet: " ...@@ -28,10 +28,10 @@ snippet: "
" "
frame size: 1 frame size: 1
parameter count: 1 parameter count: 1
bytecode array length: 10 bytecode array length: 9
bytecodes: [ bytecodes: [
/* 34 S> */ B(CreateClosure), U8(0), U8(0), U8(2), /* 34 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0), B(Star0),
/* 56 E> */ B(CallUndefinedReceiver0), R(0), U8(0), /* 56 E> */ B(CallUndefinedReceiver0), R(0), U8(0),
/* 58 S> */ B(Return), /* 58 S> */ B(Return),
] ]
...@@ -47,12 +47,12 @@ snippet: " ...@@ -47,12 +47,12 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 15 bytecode array length: 13
bytecodes: [ bytecodes: [
/* 34 S> */ B(CreateClosure), U8(0), U8(0), U8(2), /* 34 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0), B(Star0),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(Star), R(1), B(Star1),
/* 67 E> */ B(CallUndefinedReceiver1), R(0), R(1), U8(0), /* 67 E> */ B(CallUndefinedReceiver1), R(0), R(1), U8(0),
/* 70 S> */ B(Return), /* 70 S> */ B(Return),
] ]
......
...@@ -14,17 +14,17 @@ snippet: " ...@@ -14,17 +14,17 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 22 bytecode array length: 19
bytecodes: [ bytecodes: [
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 63 S> */ B(LdaSmi), I8(10), /* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1), B(Star1),
/* 67 S> */ B(Ldar), R(0), /* 67 S> */ B(Ldar), R(0),
B(TestUndetectable), B(TestUndetectable),
B(JumpIfFalse), U8(6), B(JumpIfFalse), U8(5),
/* 88 S> */ B(LdaSmi), I8(20), /* 88 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
/* 97 S> */ B(Ldar), R(1), /* 97 S> */ B(Ldar), R(1),
/* 106 S> */ B(Return), /* 106 S> */ B(Return),
] ]
...@@ -43,17 +43,17 @@ snippet: " ...@@ -43,17 +43,17 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 22 bytecode array length: 19
bytecodes: [ bytecodes: [
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 63 S> */ B(LdaSmi), I8(10), /* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1), B(Star1),
/* 67 S> */ B(Ldar), R(0), /* 67 S> */ B(Ldar), R(0),
B(TestUndetectable), B(TestUndetectable),
B(JumpIfFalse), U8(6), B(JumpIfFalse), U8(5),
/* 93 S> */ B(LdaSmi), I8(20), /* 93 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
/* 102 S> */ B(Ldar), R(1), /* 102 S> */ B(Ldar), R(1),
/* 111 S> */ B(Return), /* 111 S> */ B(Return),
] ]
...@@ -72,17 +72,17 @@ snippet: " ...@@ -72,17 +72,17 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 22 bytecode array length: 19
bytecodes: [ bytecodes: [
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 63 S> */ B(LdaSmi), I8(10), /* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1), B(Star1),
/* 67 S> */ B(Ldar), R(0), /* 67 S> */ B(Ldar), R(0),
B(TestUndetectable), B(TestUndetectable),
B(JumpIfTrue), U8(6), B(JumpIfTrue), U8(5),
/* 88 S> */ B(LdaSmi), I8(20), /* 88 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
/* 97 S> */ B(Ldar), R(1), /* 97 S> */ B(Ldar), R(1),
/* 106 S> */ B(Return), /* 106 S> */ B(Return),
] ]
...@@ -101,17 +101,17 @@ snippet: " ...@@ -101,17 +101,17 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 22 bytecode array length: 19
bytecodes: [ bytecodes: [
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 63 S> */ B(LdaSmi), I8(10), /* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1), B(Star1),
/* 67 S> */ B(Ldar), R(0), /* 67 S> */ B(Ldar), R(0),
B(TestUndetectable), B(TestUndetectable),
B(JumpIfTrue), U8(6), B(JumpIfTrue), U8(5),
/* 93 S> */ B(LdaSmi), I8(20), /* 93 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
/* 102 S> */ B(Ldar), R(1), /* 102 S> */ B(Ldar), R(1),
/* 111 S> */ B(Return), /* 111 S> */ B(Return),
] ]
...@@ -130,16 +130,16 @@ snippet: " ...@@ -130,16 +130,16 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 21 bytecode array length: 18
bytecodes: [ bytecodes: [
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 63 S> */ B(LdaSmi), I8(10), /* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1), B(Star1),
/* 67 S> */ B(Ldar), R(0), /* 67 S> */ B(Ldar), R(0),
B(JumpIfNotNull), U8(6), B(JumpIfNotNull), U8(5),
/* 89 S> */ B(LdaSmi), I8(20), /* 89 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
/* 98 S> */ B(Ldar), R(1), /* 98 S> */ B(Ldar), R(1),
/* 107 S> */ B(Return), /* 107 S> */ B(Return),
] ]
...@@ -158,16 +158,16 @@ snippet: " ...@@ -158,16 +158,16 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 21 bytecode array length: 18
bytecodes: [ bytecodes: [
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 63 S> */ B(LdaSmi), I8(10), /* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1), B(Star1),
/* 67 S> */ B(Ldar), R(0), /* 67 S> */ B(Ldar), R(0),
B(JumpIfNotUndefined), U8(6), B(JumpIfNotUndefined), U8(5),
/* 94 S> */ B(LdaSmi), I8(20), /* 94 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
/* 103 S> */ B(Ldar), R(1), /* 103 S> */ B(Ldar), R(1),
/* 112 S> */ B(Return), /* 112 S> */ B(Return),
] ]
...@@ -186,16 +186,16 @@ snippet: " ...@@ -186,16 +186,16 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 21 bytecode array length: 18
bytecodes: [ bytecodes: [
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 63 S> */ B(LdaSmi), I8(10), /* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1), B(Star1),
/* 67 S> */ B(Ldar), R(0), /* 67 S> */ B(Ldar), R(0),
B(JumpIfNull), U8(6), B(JumpIfNull), U8(5),
/* 89 S> */ B(LdaSmi), I8(20), /* 89 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
/* 98 S> */ B(Ldar), R(1), /* 98 S> */ B(Ldar), R(1),
/* 107 S> */ B(Return), /* 107 S> */ B(Return),
] ]
...@@ -214,16 +214,16 @@ snippet: " ...@@ -214,16 +214,16 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 21 bytecode array length: 18
bytecodes: [ bytecodes: [
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), /* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
B(Star), R(0), B(Star0),
/* 63 S> */ B(LdaSmi), I8(10), /* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1), B(Star1),
/* 67 S> */ B(Ldar), R(0), /* 67 S> */ B(Ldar), R(0),
B(JumpIfUndefined), U8(6), B(JumpIfUndefined), U8(5),
/* 94 S> */ B(LdaSmi), I8(20), /* 94 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
/* 103 S> */ B(Ldar), R(1), /* 103 S> */ B(Ldar), R(1),
/* 112 S> */ B(Return), /* 112 S> */ B(Return),
] ]
......
...@@ -57,14 +57,14 @@ snippet: " ...@@ -57,14 +57,14 @@ snippet: "
" "
frame size: 2 frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 24 bytecode array length: 23
bytecodes: [ bytecodes: [
/* 30 E> */ B(CreateFunctionContext), U8(0), U8(1), /* 30 E> */ B(CreateFunctionContext), U8(0), U8(1),
B(PushContext), R(0), B(PushContext), R(0),
B(LdaTheHole), B(LdaTheHole),
B(StaCurrentContextSlot), U8(2), B(StaCurrentContextSlot), U8(2),
/* 42 S> */ B(LdaSmi), I8(20), /* 42 S> */ B(LdaSmi), I8(20),
B(Star), R(1), B(Star1),
B(LdaCurrentContextSlot), U8(2), B(LdaCurrentContextSlot), U8(2),
/* 45 E> */ B(ThrowReferenceErrorIfHole), U8(1), /* 45 E> */ B(ThrowReferenceErrorIfHole), U8(1),
B(Ldar), R(1), B(Ldar), R(1),
......
This diff is collapsed.
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