[objects] Make feedback vector a first-class object

Instead of having feedback vector as a subtype of FixedArray with
reserved slots, make it a first-class variable-sized object with a
fixed-size header. This allows us to compress counters to ints in the
header, rather than forcing them to be Smis.

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng
Change-Id: Icc5f088ffbc2e2651b845bc71ea42060639e3e48
Reviewed-on: https://chromium-review.googlesource.com/585129
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Reviewed-by: Michael Stanton <mvstanton@chromium.org>
Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#46935}
This commit is contained in:
Leszek Swirski 2017-07-27 13:45:00 +01:00 committed by Commit Bot
parent 9836cdb1ad
commit 37680d6563
127 changed files with 2744 additions and 2566 deletions

View File

@ -8992,8 +8992,8 @@ class Internals {
static const int kNodeIsIndependentShift = 3;
static const int kNodeIsActiveShift = 4;
static const int kJSApiObjectType = 0xbc;
static const int kJSObjectType = 0xbd;
static const int kJSApiObjectType = 0xbd;
static const int kJSObjectType = 0xbe;
static const int kFirstNonstringType = 0x80;
static const int kOddballType = 0x82;
static const int kForeignType = 0x86;

View File

@ -1165,7 +1165,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
// Load the cache state into r5.
__ add(r5, r2, Operand::PointerOffsetFromSmiKey(r3));
__ ldr(r5, FieldMemOperand(r5, FixedArray::kHeaderSize));
__ ldr(r5, FieldMemOperand(r5, FeedbackVector::kFeedbackSlotsOffset));
// A monomorphic cache hit or an already megamorphic state: invoke the
// function without changing the state.
@ -1212,7 +1212,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
__ bind(&megamorphic);
__ add(r5, r2, Operand::PointerOffsetFromSmiKey(r3));
__ LoadRoot(r4, Heap::kmegamorphic_symbolRootIndex);
__ str(r4, FieldMemOperand(r5, FixedArray::kHeaderSize));
__ str(r4, FieldMemOperand(r5, FeedbackVector::kFeedbackSlotsOffset));
__ jmp(&done);
// An uninitialized cache is patched with the function
@ -1238,7 +1238,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
// Increment the call count for all function calls.
__ add(r5, r2, Operand::PointerOffsetFromSmiKey(r3));
__ add(r5, r5, Operand(FixedArray::kHeaderSize + kPointerSize));
__ add(r5, r5, Operand(FeedbackVector::kFeedbackSlotsOffset + kPointerSize));
__ ldr(r4, FieldMemOperand(r5, 0));
__ add(r4, r4, Operand(Smi::FromInt(1)));
__ str(r4, FieldMemOperand(r5, 0));
@ -1262,7 +1262,7 @@ void CallConstructStub::Generate(MacroAssembler* masm) {
__ add(r5, r2, Operand::PointerOffsetFromSmiKey(r3));
Label feedback_register_initialized;
// Put the AllocationSite from the feedback vector into r2, or undefined.
__ ldr(r2, FieldMemOperand(r5, FixedArray::kHeaderSize));
__ ldr(r2, FieldMemOperand(r5, FeedbackVector::kFeedbackSlotsOffset));
__ ldr(r5, FieldMemOperand(r2, AllocationSite::kMapOffset));
__ CompareRoot(r5, Heap::kAllocationSiteMapRootIndex);
__ b(eq, &feedback_register_initialized);

View File

@ -1245,7 +1245,8 @@ static void GenerateRecordCallTarget(MacroAssembler* masm, Register argc,
Register feedback_value = scratch3;
__ Add(feedback, feedback_vector,
Operand::UntagSmiAndScale(index, kPointerSizeLog2));
__ Ldr(feedback, FieldMemOperand(feedback, FixedArray::kHeaderSize));
__ Ldr(feedback,
FieldMemOperand(feedback, FeedbackVector::kFeedbackSlotsOffset));
// A monomorphic cache hit or an already megamorphic state: invoke the
// function without changing the state.
@ -1290,7 +1291,8 @@ static void GenerateRecordCallTarget(MacroAssembler* masm, Register argc,
__ Add(scratch1, feedback_vector,
Operand::UntagSmiAndScale(index, kPointerSizeLog2));
__ LoadRoot(scratch2, Heap::kmegamorphic_symbolRootIndex);
__ Str(scratch2, FieldMemOperand(scratch1, FixedArray::kHeaderSize));
__ Str(scratch2,
FieldMemOperand(scratch1, FeedbackVector::kFeedbackSlotsOffset));
__ B(&done);
// An uninitialized cache is patched with the function or sentinel to
@ -1320,7 +1322,8 @@ static void GenerateRecordCallTarget(MacroAssembler* masm, Register argc,
// Increment the call count for all function calls.
__ Add(scratch1, feedback_vector,
Operand::UntagSmiAndScale(index, kPointerSizeLog2));
__ Add(scratch1, scratch1, Operand(FixedArray::kHeaderSize + kPointerSize));
__ Add(scratch1, scratch1,
Operand(FeedbackVector::kFeedbackSlotsOffset + kPointerSize));
__ Ldr(scratch2, FieldMemOperand(scratch1, 0));
__ Add(scratch2, scratch2, Operand(Smi::FromInt(1)));
__ Str(scratch2, FieldMemOperand(scratch1, 0));
@ -1348,7 +1351,7 @@ void CallConstructStub::Generate(MacroAssembler* masm) {
__ Add(x5, x2, Operand::UntagSmiAndScale(x3, kPointerSizeLog2));
Label feedback_register_initialized;
// Put the AllocationSite from the feedback vector into x2, or undefined.
__ Ldr(x2, FieldMemOperand(x5, FixedArray::kHeaderSize));
__ Ldr(x2, FieldMemOperand(x5, FeedbackVector::kFeedbackSlotsOffset));
__ Ldr(x5, FieldMemOperand(x2, AllocationSite::kMapOffset));
__ JumpIfRoot(x5, Heap::kAllocationSiteMapRootIndex,
&feedback_register_initialized);

View File

@ -283,7 +283,7 @@ struct Use {
// This allows conversion of Addresses and integral types into
// 0-relative int offsets.
template <typename T>
inline intptr_t OffsetFrom(T x) {
constexpr inline intptr_t OffsetFrom(T x) {
return x - static_cast<T>(0);
}
@ -292,7 +292,7 @@ inline intptr_t OffsetFrom(T x) {
// This allows conversion of 0-relative int offsets into Addresses and
// integral types.
template <typename T>
inline T AddressFrom(intptr_t x) {
constexpr inline T AddressFrom(intptr_t x) {
return static_cast<T>(static_cast<T>(0) + x);
}
@ -304,12 +304,21 @@ inline T RoundDown(T x, intptr_t m) {
DCHECK(m != 0 && ((m & (m - 1)) == 0));
return AddressFrom<T>(OffsetFrom(x) & -m);
}
template <intptr_t m, typename T>
constexpr inline T RoundDown(T x) {
// m must be a power of two.
STATIC_ASSERT(m != 0 && ((m & (m - 1)) == 0));
return AddressFrom<T>(OffsetFrom(x) & -m);
}
// Return the smallest multiple of m which is >= x.
template <typename T>
inline T RoundUp(T x, intptr_t m) {
return RoundDown<T>(static_cast<T>(x + m - 1), m);
}
template <intptr_t m, typename T>
constexpr inline T RoundUp(T x) {
return RoundDown<m, T>(static_cast<T>(x + m - 1));
}
#endif // V8_BASE_MACROS_H_

View File

@ -1010,11 +1010,9 @@ static void MaybeTailCallOptimizedCodeSlot(MacroAssembler* masm,
Register closure = r1;
Register optimized_code_entry = scratch1;
const int kOptimizedCodeCellOffset =
FeedbackVector::kOptimizedCodeIndex * kPointerSize +
FeedbackVector::kHeaderSize;
__ ldr(optimized_code_entry,
FieldMemOperand(feedback_vector, kOptimizedCodeCellOffset));
__ ldr(
optimized_code_entry,
FieldMemOperand(feedback_vector, FeedbackVector::kOptimizedCodeOffset));
// Check if the code entry is a Smi. If yes, we interpret it as an
// optimisation marker. Otherwise, interpret is as a weak cell to a code
@ -1149,15 +1147,11 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
__ b(ne, &switch_to_different_code_kind);
// Increment invocation count for the function.
__ ldr(r9,
FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ add(r9, r9, Operand(Smi::FromInt(1)));
__ str(r9,
FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ ldr(r9, FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountOffset));
__ add(r9, r9, Operand(1));
__ str(r9, FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountOffset));
// Check function data field is actually a BytecodeArray object.
if (FLAG_debug_code) {

View File

@ -1028,11 +1028,9 @@ static void MaybeTailCallOptimizedCodeSlot(MacroAssembler* masm,
Register closure = x1;
Register optimized_code_entry = scratch1;
const int kOptimizedCodeCellOffset =
FeedbackVector::kOptimizedCodeIndex * kPointerSize +
FeedbackVector::kHeaderSize;
__ Ldr(optimized_code_entry,
FieldMemOperand(feedback_vector, kOptimizedCodeCellOffset));
__ Ldr(
optimized_code_entry,
FieldMemOperand(feedback_vector, FeedbackVector::kOptimizedCodeOffset));
// Check if the code entry is a Smi. If yes, we interpret it as an
// optimisation marker. Otherwise, interpret is as a weak cell to a code
@ -1169,13 +1167,9 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
// Increment invocation count for the function.
__ Ldr(x11, FieldMemOperand(closure, JSFunction::kFeedbackVectorOffset));
__ Ldr(x11, FieldMemOperand(x11, Cell::kValueOffset));
__ Ldr(x10, FieldMemOperand(
x11, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ Add(x10, x10, Operand(Smi::FromInt(1)));
__ Str(x10, FieldMemOperand(
x11, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ Ldr(w10, FieldMemOperand(x11, FeedbackVector::kInvocationCountOffset));
__ Add(w10, w10, Operand(1));
__ Str(w10, FieldMemOperand(x11, FeedbackVector::kInvocationCountOffset));
// Check function data field is actually a BytecodeArray object.
if (FLAG_debug_code) {

View File

@ -126,7 +126,7 @@ Node* ConstructorBuiltinsAssembler::EmitFastNewClosure(Node* shared_info,
empty_fixed_array);
StoreObjectFieldNoWriteBarrier(result, JSObject::kElementsOffset,
empty_fixed_array);
Node* literals_cell = LoadFixedArrayElement(
Node* literals_cell = LoadFeedbackVectorSlot(
feedback_vector, slot, 0, CodeStubAssembler::SMI_PARAMETERS);
{
// Bump the closure counter encoded in the cell's map.
@ -135,7 +135,8 @@ Node* ConstructorBuiltinsAssembler::EmitFastNewClosure(Node* shared_info,
GotoIf(IsNoClosuresCellMap(cell_map), &no_closures);
GotoIf(IsOneClosureCellMap(cell_map), &one_closure);
CSA_ASSERT(this, IsManyClosuresCellMap(cell_map));
CSA_ASSERT(this, IsManyClosuresCellMap(cell_map), cell_map, literals_cell,
feedback_vector, slot);
Goto(&cell_done);
BIND(&no_closures);
@ -155,7 +156,7 @@ Node* ConstructorBuiltinsAssembler::EmitFastNewClosure(Node* shared_info,
Node* literals = LoadObjectField(literals_cell, Cell::kValueOffset);
GotoIfNot(IsFeedbackVector(literals), &optimized_code_ok);
Node* optimized_code_cell_slot =
LoadFixedArrayElement(literals, FeedbackVector::kOptimizedCodeIndex);
LoadObjectField(literals, FeedbackVector::kOptimizedCodeOffset);
GotoIf(TaggedIsSmi(optimized_code_cell_slot), &optimized_code_ok);
Node* optimized_code =
@ -169,8 +170,8 @@ Node* ConstructorBuiltinsAssembler::EmitFastNewClosure(Node* shared_info,
// Cell is empty or code is marked for deopt, clear the optimized code slot.
BIND(&clear_optimized_code);
StoreFixedArrayElement(literals, FeedbackVector::kOptimizedCodeIndex,
SmiConstant(0), SKIP_WRITE_BARRIER);
StoreObjectFieldNoWriteBarrier(
literals, FeedbackVector::kOptimizedCodeOffset, SmiConstant(0));
Goto(&optimized_code_ok);
BIND(&optimized_code_ok);
@ -369,7 +370,9 @@ Node* ConstructorBuiltinsAssembler::EmitFastCloneRegExp(Node* closure,
Label call_runtime(this, Label::kDeferred), end(this);
VARIABLE(result, MachineRepresentation::kTagged);
Node* literal_site = LoadFeedbackVectorSlot(closure, literal_index);
Node* feedback_vector = LoadFeedbackVector(closure);
Node* literal_site =
LoadFeedbackVectorSlot(feedback_vector, literal_index, 0, SMI_PARAMETERS);
GotoIf(NotHasBoilerplate(literal_site), &call_runtime);
{
Node* boilerplate = literal_site;
@ -444,7 +447,9 @@ Node* ConstructorBuiltinsAssembler::EmitFastCloneShallowArray(
return_result(this);
VARIABLE(result, MachineRepresentation::kTagged);
Node* allocation_site = LoadFeedbackVectorSlot(closure, literal_index);
Node* feedback_vector = LoadFeedbackVector(closure);
Node* allocation_site =
LoadFeedbackVectorSlot(feedback_vector, literal_index, 0, SMI_PARAMETERS);
GotoIf(NotHasBoilerplate(allocation_site), call_runtime);
Node* boilerplate = LoadAllocationSiteBoilerplate(allocation_site);
@ -556,8 +561,10 @@ Node* ConstructorBuiltinsAssembler::EmitCreateEmptyArrayLiteral(
Node* closure, Node* literal_index, Node* context) {
// Array literals always have a valid AllocationSite to properly track
// elements transitions.
Node* feedback_vector = LoadFeedbackVector(closure);
VARIABLE(allocation_site, MachineRepresentation::kTagged,
LoadFeedbackVectorSlot(closure, literal_index));
LoadFeedbackVectorSlot(feedback_vector, literal_index, 0,
SMI_PARAMETERS));
Label create_empty_array(this),
initialize_allocation_site(this, Label::kDeferred), done(this);
@ -567,7 +574,6 @@ Node* ConstructorBuiltinsAssembler::EmitCreateEmptyArrayLiteral(
// TODO(cbruni): create the AllocationSite in CSA.
BIND(&initialize_allocation_site);
{
Node* feedback_vector = LoadFeedbackVector(closure);
allocation_site.Bind(
CreateAllocationSiteInFeedbackVector(feedback_vector, literal_index));
Goto(&create_empty_array);
@ -604,7 +610,9 @@ TF_BUILTIN(CreateEmptyArrayLiteral, ConstructorBuiltinsAssembler) {
Node* ConstructorBuiltinsAssembler::EmitFastCloneShallowObject(
Label* call_runtime, Node* closure, Node* literals_index) {
Node* allocation_site = LoadFeedbackVectorSlot(closure, literals_index);
Node* feedback_vector = LoadFeedbackVector(closure);
Node* allocation_site = LoadFeedbackVectorSlot(
feedback_vector, literals_index, 0, SMI_PARAMETERS);
GotoIf(NotHasBoilerplate(allocation_site), call_runtime);
Node* boilerplate = LoadAllocationSiteBoilerplate(allocation_site);

View File

@ -662,11 +662,8 @@ static void MaybeTailCallOptimizedCodeSlot(MacroAssembler* masm,
Register closure = edi;
Register optimized_code_entry = scratch;
const int kOptimizedCodeCellOffset =
FeedbackVector::kOptimizedCodeIndex * kPointerSize +
FeedbackVector::kHeaderSize;
__ mov(optimized_code_entry,
FieldOperand(feedback_vector, kOptimizedCodeCellOffset));
FieldOperand(feedback_vector, FeedbackVector::kOptimizedCodeOffset));
// Check if the code entry is a Smi. If yes, we interpret it as an
// optimisation marker. Otherwise, interpret is as a weak cell to a code
@ -807,10 +804,7 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
__ j(not_equal, &switch_to_different_code_kind);
// Increment invocation count for the function.
__ add(FieldOperand(feedback_vector,
FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize),
Immediate(Smi::FromInt(1)));
__ inc(FieldOperand(feedback_vector, FeedbackVector::kInvocationCountOffset));
// Check function data field is actually a BytecodeArray object.
if (FLAG_debug_code) {

View File

@ -996,11 +996,8 @@ static void MaybeTailCallOptimizedCodeSlot(MacroAssembler* masm,
Register closure = a1;
Register optimized_code_entry = scratch1;
const int kOptimizedCodeCellOffset =
FeedbackVector::kOptimizedCodeIndex * kPointerSize +
FeedbackVector::kHeaderSize;
__ lw(optimized_code_entry,
FieldMemOperand(feedback_vector, kOptimizedCodeCellOffset));
FieldMemOperand(feedback_vector, FeedbackVector::kOptimizedCodeOffset));
// Check if the code entry is a Smi. If yes, we interpret it as an
// optimisation marker. Otherwise, interpret is as a weak cell to a code
@ -1130,15 +1127,11 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
Operand(masm->CodeObject())); // Self-reference to this code.
// Increment invocation count for the function.
__ lw(t0,
FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ Addu(t0, t0, Operand(Smi::FromInt(1)));
__ sw(t0,
FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ lw(t0, FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountOffset));
__ Addu(t0, t0, Operand(1));
__ sw(t0, FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountOffset));
// Check function data field is actually a BytecodeArray object.
if (FLAG_debug_code) {

View File

@ -998,11 +998,8 @@ static void MaybeTailCallOptimizedCodeSlot(MacroAssembler* masm,
Register closure = a1;
Register optimized_code_entry = scratch1;
const int kOptimizedCodeCellOffset =
FeedbackVector::kOptimizedCodeIndex * kPointerSize +
FeedbackVector::kHeaderSize;
__ Ld(optimized_code_entry,
FieldMemOperand(feedback_vector, kOptimizedCodeCellOffset));
FieldMemOperand(feedback_vector, FeedbackVector::kOptimizedCodeOffset));
// Check if the code entry is a Smi. If yes, we interpret it as an
// optimisation marker. Otherwise, interpret is as a weak cell to a code
@ -1134,15 +1131,11 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
Operand(masm->CodeObject())); // Self-reference to this code.
// Increment invocation count for the function.
__ Ld(a4,
FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ Daddu(a4, a4, Operand(Smi::FromInt(1)));
__ Sd(a4,
FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ Lw(a4, FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountOffset));
__ Addu(a4, a4, Operand(1));
__ Sw(a4, FieldMemOperand(feedback_vector,
FeedbackVector::kInvocationCountOffset));
// Check function data field is actually a BytecodeArray object.
if (FLAG_debug_code) {

View File

@ -744,11 +744,8 @@ static void MaybeTailCallOptimizedCodeSlot(MacroAssembler* masm,
Register closure = rdi;
Register optimized_code_entry = scratch1;
const int kOptimizedCodeCellOffset =
FeedbackVector::kOptimizedCodeIndex * kPointerSize +
FeedbackVector::kHeaderSize;
__ movp(optimized_code_entry,
FieldOperand(feedback_vector, kOptimizedCodeCellOffset));
FieldOperand(feedback_vector, FeedbackVector::kOptimizedCodeOffset));
// Check if the code entry is a Smi. If yes, we interpret it as an
// optimisation marker. Otherwise, interpret is as a weak cell to a code
@ -884,11 +881,8 @@ void Builtins::Generate_InterpreterEntryTrampoline(MacroAssembler* masm) {
__ j(not_equal, &switch_to_different_code_kind);
// Increment invocation count for the function.
__ SmiAddConstant(
FieldOperand(feedback_vector,
FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize),
Smi::FromInt(1));
__ incl(
FieldOperand(feedback_vector, FeedbackVector::kInvocationCountOffset));
// Check function data field is actually a BytecodeArray object.
if (FLAG_debug_code) {

View File

@ -1367,6 +1367,19 @@ Node* CodeStubAssembler::LoadFixedTypedArrayElementAsTagged(
}
}
Node* CodeStubAssembler::LoadFeedbackVectorSlot(Node* object,
Node* slot_index_node,
int additional_offset,
ParameterMode parameter_mode) {
CSA_SLOW_ASSERT(this, IsFeedbackVector(object));
CSA_SLOW_ASSERT(this, MatchesParameterMode(slot_index_node, parameter_mode));
int32_t header_size =
FeedbackVector::kFeedbackSlotsOffset + additional_offset - kHeapObjectTag;
Node* offset = ElementOffsetFromIndex(slot_index_node, HOLEY_ELEMENTS,
parameter_mode, header_size);
return Load(MachineType::AnyTagged(), object, offset);
}
Node* CodeStubAssembler::LoadAndUntagToWord32FixedArrayElement(
Node* object, Node* index_node, int additional_offset,
ParameterMode parameter_mode) {
@ -1599,6 +1612,28 @@ Node* CodeStubAssembler::StoreFixedDoubleArrayElement(
return StoreNoWriteBarrier(rep, object, offset, value);
}
Node* CodeStubAssembler::StoreFeedbackVectorSlot(Node* object,
Node* slot_index_node,
Node* value,
WriteBarrierMode barrier_mode,
int additional_offset,
ParameterMode parameter_mode) {
CSA_SLOW_ASSERT(this, IsFeedbackVector(object));
CSA_SLOW_ASSERT(this, MatchesParameterMode(slot_index_node, parameter_mode));
DCHECK(barrier_mode == SKIP_WRITE_BARRIER ||
barrier_mode == UPDATE_WRITE_BARRIER);
int header_size =
FeedbackVector::kFeedbackSlotsOffset + additional_offset - kHeapObjectTag;
Node* offset = ElementOffsetFromIndex(slot_index_node, HOLEY_ELEMENTS,
parameter_mode, header_size);
if (barrier_mode == SKIP_WRITE_BARRIER) {
return StoreNoWriteBarrier(MachineRepresentation::kTagged, object, offset,
value);
} else {
return Store(object, offset, value);
}
}
void CodeStubAssembler::EnsureArrayLengthWritable(Node* map, Label* bailout) {
// Check whether the length property is writable. The length property is the
// only default named property on arrays. It's nonconfigurable, hence is
@ -6398,37 +6433,22 @@ Node* CodeStubAssembler::LoadFeedbackVectorForStub() {
return LoadFeedbackVector(function);
}
Node* CodeStubAssembler::LoadFeedbackVectorSlot(Node* closure,
Node* smi_index) {
Node* feedback_vector = LoadFeedbackVector(closure);
return LoadFixedArrayElement(feedback_vector, smi_index, 0,
CodeStubAssembler::SMI_PARAMETERS);
}
void CodeStubAssembler::StoreFeedbackVectorSlot(Node* closure, Node* smi_index,
Node* value) {
Node* feedback_vector = LoadFeedbackVector(closure);
StoreFixedArrayElement(feedback_vector, smi_index, value,
UPDATE_WRITE_BARRIER, 0,
CodeStubAssembler::SMI_PARAMETERS);
}
void CodeStubAssembler::UpdateFeedback(Node* feedback, Node* feedback_vector,
Node* slot_id, Node* function) {
// This method is used for binary op and compare feedback. These
// vector nodes are initialized with a smi 0, so we can simply OR
// our new feedback in place.
Node* previous_feedback = LoadFixedArrayElement(feedback_vector, slot_id);
Node* previous_feedback = LoadFeedbackVectorSlot(feedback_vector, slot_id);
Node* combined_feedback = SmiOr(previous_feedback, feedback);
Label end(this);
GotoIf(SmiEqual(previous_feedback, combined_feedback), &end);
{
StoreFixedArrayElement(feedback_vector, slot_id, combined_feedback,
SKIP_WRITE_BARRIER);
StoreFeedbackVectorSlot(feedback_vector, slot_id, combined_feedback,
SKIP_WRITE_BARRIER);
// Reset profiler ticks.
StoreFixedArrayElement(feedback_vector, FeedbackVector::kProfilerTicksIndex,
SmiConstant(0), SKIP_WRITE_BARRIER);
StoreObjectFieldNoWriteBarrier(
feedback_vector, FeedbackVector::kProfilerTicksOffset, SmiConstant(0));
Goto(&end);
}
@ -7050,8 +7070,8 @@ Node* CodeStubAssembler::CreateAllocationSiteInFeedbackVector(
StoreObjectField(site, AllocationSite::kWeakNextOffset, next_site);
StoreNoWriteBarrier(MachineRepresentation::kTagged, site_list, site);
StoreFixedArrayElement(feedback_vector, slot, site, UPDATE_WRITE_BARRIER, 0,
CodeStubAssembler::SMI_PARAMETERS);
StoreFeedbackVectorSlot(feedback_vector, slot, site, UPDATE_WRITE_BARRIER, 0,
CodeStubAssembler::SMI_PARAMETERS);
return site;
}
@ -7067,8 +7087,8 @@ Node* CodeStubAssembler::CreateWeakCellInFeedbackVector(Node* feedback_vector,
StoreObjectField(cell, WeakCell::kValueOffset, value);
// Store the WeakCell in the feedback vector.
StoreFixedArrayElement(feedback_vector, slot, cell, UPDATE_WRITE_BARRIER, 0,
CodeStubAssembler::SMI_PARAMETERS);
StoreFeedbackVectorSlot(feedback_vector, slot, cell, UPDATE_WRITE_BARRIER, 0,
CodeStubAssembler::SMI_PARAMETERS);
return cell;
}

View File

@ -476,6 +476,11 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
ParameterMode parameter_mode = INTPTR_PARAMETERS,
Label* if_hole = nullptr);
// Load a feedback slot from a FeedbackVector.
Node* LoadFeedbackVectorSlot(
Node* object, Node* index, int additional_offset = 0,
ParameterMode parameter_mode = INTPTR_PARAMETERS);
// Load Float64 value by |base| + |offset| address. If the value is a double
// hole then jump to |if_hole|. If |machine_type| is None then only the hole
// check is generated.
@ -540,6 +545,12 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
Node* object, Node* index, Node* value,
ParameterMode parameter_mode = INTPTR_PARAMETERS);
Node* StoreFeedbackVectorSlot(
Node* object, Node* index, Node* value,
WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER,
int additional_offset = 0,
ParameterMode parameter_mode = INTPTR_PARAMETERS);
void EnsureArrayLengthWritable(Node* map, Label* bailout);
// EnsureArrayPushable verifies that receiver is:
@ -1324,9 +1335,8 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
// Load type feedback vector from the stub caller's frame.
Node* LoadFeedbackVectorForStub();
// Load type feedback vector for the given closure.
Node* LoadFeedbackVector(Node* closure);
Node* LoadFeedbackVectorSlot(Node* closure, Node* smi_index);
void StoreFeedbackVectorSlot(Node* closure, Node* smi_index, Node* value);
// Update the type feedback vector.
void UpdateFeedback(Node* feedback, Node* feedback_vector, Node* slot_id,

View File

@ -604,16 +604,16 @@ TF_STUB(CallICStub, CodeStubAssembler) {
// Increment the call count.
// TODO(bmeurer): Would it be beneficial to use Int32Add on 64-bit?
Comment("increment call count");
Node* call_count = LoadFixedArrayElement(vector, slot, 1 * kPointerSize);
Node* call_count = LoadFeedbackVectorSlot(vector, slot, 1 * kPointerSize);
Node* new_count = SmiAdd(call_count, SmiConstant(1));
// Count is Smi, so we don't need a write barrier.
StoreFixedArrayElement(vector, slot, new_count, SKIP_WRITE_BARRIER,
1 * kPointerSize);
StoreFeedbackVectorSlot(vector, slot, new_count, SKIP_WRITE_BARRIER,
1 * kPointerSize);
Label call_function(this), extra_checks(this), call(this);
// The checks. First, does function match the recorded monomorphic target?
Node* feedback_element = LoadFixedArrayElement(vector, slot);
Node* feedback_element = LoadFeedbackVectorSlot(vector, slot);
Node* feedback_value = LoadWeakCellValueUnchecked(feedback_element);
Node* is_monomorphic = WordEqual(target, feedback_value);
GotoIfNot(is_monomorphic, &extra_checks);
@ -717,7 +717,7 @@ TF_STUB(CallICStub, CodeStubAssembler) {
// MegamorphicSentinel is created as a part of Heap::InitialObjects
// and will not move during a GC. So it is safe to skip write barrier.
DCHECK(Heap::RootIsImmortalImmovable(Heap::kmegamorphic_symbolRootIndex));
StoreFixedArrayElement(
StoreFeedbackVectorSlot(
vector, slot,
HeapConstant(FeedbackVector::MegamorphicSentinel(isolate())),
SKIP_WRITE_BARRIER);

View File

@ -507,11 +507,7 @@ Node* BytecodeGraphBuilder::BuildLoadNativeContextField(int index) {
VectorSlotPair BytecodeGraphBuilder::CreateVectorSlotPair(int slot_id) {
FeedbackSlot slot;
if (slot_id >= FeedbackVector::kReservedIndexCount) {
slot = feedback_vector()->ToSlot(slot_id);
}
return VectorSlotPair(feedback_vector(), slot);
return VectorSlotPair(feedback_vector(), feedback_vector()->ToSlot(slot_id));
}
void BytecodeGraphBuilder::CreateGraph() {
@ -1570,9 +1566,6 @@ void BytecodeGraphBuilder::BuildCall(ConvertReceiverMode receiver_mode,
receiver_mode);
PrepareEagerCheckpoint();
// Slot index of 0 is used indicate no feedback slot is available. Assert
// the assumption that slot index 0 is never a valid feedback slot.
STATIC_ASSERT(FeedbackVector::kReservedIndexCount > 0);
VectorSlotPair feedback = CreateVectorSlotPair(slot_id);
CallFrequency frequency = ComputeCallFrequency(slot_id);
@ -1715,10 +1708,7 @@ void BytecodeGraphBuilder::VisitCallWithSpread() {
int arg_count = static_cast<int>(reg_count) - 1;
Node* const* args =
GetCallArgumentsFromRegister(callee, receiver_node, first_arg, arg_count);
// Slot index of 0 is used indicate no feedback slot is available. Assert
// the assumption that slot index 0 is never a valid feedback slot.
int const slot_id = bytecode_iterator().GetIndexOperand(3);
STATIC_ASSERT(FeedbackVector::kReservedIndexCount > 0);
VectorSlotPair feedback = CreateVectorSlotPair(slot_id);
CallFrequency frequency = ComputeCallFrequency(slot_id);
@ -1818,9 +1808,6 @@ void BytecodeGraphBuilder::VisitConstruct() {
interpreter::Register callee_reg = bytecode_iterator().GetRegisterOperand(0);
interpreter::Register first_reg = bytecode_iterator().GetRegisterOperand(1);
size_t reg_count = bytecode_iterator().GetRegisterCountOperand(2);
// Slot index of 0 is used indicate no feedback slot is available. Assert
// the assumption that slot index 0 is never a valid feedback slot.
STATIC_ASSERT(FeedbackVector::kReservedIndexCount > 0);
int const slot_id = bytecode_iterator().GetIndexOperand(3);
VectorSlotPair feedback = CreateVectorSlotPair(slot_id);
@ -1849,9 +1836,6 @@ void BytecodeGraphBuilder::VisitConstructWithSpread() {
interpreter::Register callee_reg = bytecode_iterator().GetRegisterOperand(0);
interpreter::Register first_reg = bytecode_iterator().GetRegisterOperand(1);
size_t reg_count = bytecode_iterator().GetRegisterCountOperand(2);
// Slot index of 0 is used indicate no feedback slot is available. Assert
// the assumption that slot index 0 is never a valid feedback slot.
STATIC_ASSERT(FeedbackVector::kReservedIndexCount > 0);
int const slot_id = bytecode_iterator().GetIndexOperand(3);
VectorSlotPair feedback = CreateVectorSlotPair(slot_id);
@ -1990,11 +1974,7 @@ BinaryOperationHint BytecodeGraphBuilder::GetBinaryOperationHint(
// feedback.
CompareOperationHint BytecodeGraphBuilder::GetCompareOperationHint() {
int slot_index = bytecode_iterator().GetIndexOperand(1);
if (slot_index == 0) {
return CompareOperationHint::kAny;
}
FeedbackSlot slot =
feedback_vector()->ToSlot(bytecode_iterator().GetIndexOperand(1));
FeedbackSlot slot = feedback_vector()->ToSlot(slot_index);
DCHECK_EQ(FeedbackSlotKind::kCompareOp, feedback_vector()->GetKind(slot));
CompareICNexus nexus(feedback_vector(), slot);
return nexus.GetCompareOperationFeedback();
@ -2201,7 +2181,6 @@ void BytecodeGraphBuilder::BuildCompareOp(const Operator* op) {
Node* right = environment()->LookupAccumulator();
int slot_index = bytecode_iterator().GetIndexOperand(1);
DCHECK(slot_index != 0);
FeedbackSlot slot = feedback_vector()->ToSlot(slot_index);
Node* node = nullptr;
if (Node* simplified = TryBuildSimplifiedBinaryOp(op, left, right, slot)) {

View File

@ -298,6 +298,7 @@ Type::bitset BitsetType::Lub(i::Map* map) {
case FIXED_DOUBLE_ARRAY_TYPE:
case BYTE_ARRAY_TYPE:
case BYTECODE_ARRAY_TYPE:
case FEEDBACK_VECTOR_TYPE:
case TRANSITION_ARRAY_TYPE:
case PROPERTY_ARRAY_TYPE:
case FOREIGN_TYPE:

View File

@ -3907,6 +3907,7 @@ Handle<Object> TranslatedState::MaterializeCapturedObjectAt(
case BYTE_ARRAY_TYPE:
case BYTECODE_ARRAY_TYPE:
case TRANSITION_ARRAY_TYPE:
case FEEDBACK_VECTOR_TYPE:
case FOREIGN_TYPE:
case SCRIPT_TYPE:
case CODE_TYPE:

View File

@ -192,6 +192,13 @@ Handle<FixedArray> Factory::NewUninitializedFixedArray(int size) {
FixedArray);
}
Handle<FeedbackVector> Factory::NewFeedbackVector(
Handle<SharedFunctionInfo> shared, PretenureFlag pretenure) {
CALL_HEAP_FUNCTION(
isolate(), isolate()->heap()->AllocateFeedbackVector(*shared, pretenure),
FeedbackVector);
}
Handle<BoilerplateDescription> Factory::NewBoilerplateDescription(
int boilerplate, int all_properties, int index_keys, bool has_seen_proto) {
DCHECK_GE(boilerplate, 0);
@ -1339,6 +1346,11 @@ Handle<FixedDoubleArray> Factory::CopyFixedDoubleArray(
FixedDoubleArray);
}
Handle<FeedbackVector> Factory::CopyFeedbackVector(
Handle<FeedbackVector> array) {
CALL_HEAP_FUNCTION(isolate(), isolate()->heap()->CopyFeedbackVector(*array),
FeedbackVector);
}
Handle<Object> Factory::NewNumber(double value,
PretenureFlag pretenure) {

View File

@ -84,6 +84,11 @@ class V8_EXPORT_PRIVATE Factory final {
// Allocates an uninitialized fixed array. It must be filled by the caller.
Handle<FixedArray> NewUninitializedFixedArray(int size);
// Allocates a feedback vector whose slots are initialized with undefined
// values.
Handle<FeedbackVector> NewFeedbackVector(
Handle<SharedFunctionInfo> shared, PretenureFlag pretenure = NOT_TENURED);
// Allocates a fixed array for name-value pairs of boilerplate properties and
// calculates the number of properties we need to store in the backing store.
Handle<BoilerplateDescription> NewBoilerplateDescription(int boilerplate,
@ -441,6 +446,8 @@ class V8_EXPORT_PRIVATE Factory final {
Handle<FixedDoubleArray> CopyFixedDoubleArray(
Handle<FixedDoubleArray> array);
Handle<FeedbackVector> CopyFeedbackVector(Handle<FeedbackVector> array);
// Numbers (e.g. literals) are pretenured by the parser.
// The return value may be a smi or a heap number.
Handle<Object> NewNumber(double value,

View File

@ -8,8 +8,13 @@
#include "src/factory.h"
#include "src/feedback-vector.h"
#include "src/globals.h"
#include "src/heap/heap-inl.h"
#include "src/heap/heap.h"
#include "src/objects/shared-function-info.h"
// Has to be the last include (doesn't have include guards):
#include "src/objects/object-macros.h"
namespace v8 {
namespace internal {
@ -89,33 +94,20 @@ int FeedbackMetadata::GetSlotSize(FeedbackSlotKind kind) {
return 1;
}
bool FeedbackVector::is_empty() const {
return length() == kReservedIndexCount;
}
ACCESSORS(FeedbackVector, shared_function_info, SharedFunctionInfo,
kSharedFunctionInfoOffset)
ACCESSORS(FeedbackVector, optimized_code_cell, Object, kOptimizedCodeOffset)
INT32_ACCESSORS(FeedbackVector, length, kLengthOffset)
INT32_ACCESSORS(FeedbackVector, invocation_count, kInvocationCountOffset)
INT32_ACCESSORS(FeedbackVector, profiler_ticks, kProfilerTicksOffset)
int FeedbackVector::slot_count() const {
return length() - kReservedIndexCount;
}
bool FeedbackVector::is_empty() const { return length() == 0; }
FeedbackMetadata* FeedbackVector::metadata() const {
return shared_function_info()->feedback_metadata();
}
SharedFunctionInfo* FeedbackVector::shared_function_info() const {
return SharedFunctionInfo::cast(get(kSharedFunctionInfoIndex));
}
int FeedbackVector::invocation_count() const {
return Smi::ToInt(get(kInvocationCountIndex));
}
void FeedbackVector::clear_invocation_count() {
set(kInvocationCountIndex, Smi::kZero);
}
Object* FeedbackVector::optimized_code_cell() const {
return get(kOptimizedCodeIndex);
}
void FeedbackVector::clear_invocation_count() { set_invocation_count(0); }
Code* FeedbackVector::optimized_code() const {
Object* slot = optimized_code_cell();
@ -139,30 +131,41 @@ bool FeedbackVector::has_optimization_marker() const {
return optimization_marker() != OptimizationMarker::kNone;
}
int FeedbackVector::profiler_ticks() const {
return Smi::ToInt(get(kProfilerTicksIndex));
}
void FeedbackVector::set_profiler_ticks(int ticks) {
set(kProfilerTicksIndex, Smi::FromInt(ticks));
}
// Conversion from an integer index to either a slot or an ic slot.
// static
FeedbackSlot FeedbackVector::ToSlot(int index) {
DCHECK_GE(index, kReservedIndexCount);
return FeedbackSlot(index - kReservedIndexCount);
DCHECK_GE(index, 0);
return FeedbackSlot(index);
}
Object* FeedbackVector::Get(FeedbackSlot slot) const {
return get(GetIndex(slot));
}
Object* FeedbackVector::get(int index) const {
DCHECK_GE(index, 0);
DCHECK_LT(index, this->length());
int offset = kFeedbackSlotsOffset + index * kPointerSize;
return RELAXED_READ_FIELD(this, offset);
}
void FeedbackVector::Set(FeedbackSlot slot, Object* value,
WriteBarrierMode mode) {
set(GetIndex(slot), value, mode);
}
void FeedbackVector::set(int index, Object* value, WriteBarrierMode mode) {
DCHECK_GE(index, 0);
DCHECK_LT(index, this->length());
int offset = kFeedbackSlotsOffset + index * kPointerSize;
RELAXED_WRITE_FIELD(this, offset, value);
CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode);
}
inline Object** FeedbackVector::slots_start() {
return HeapObject::RawField(this, kFeedbackSlotsOffset);
}
// Helper function to transform the feedback to BinaryOperationHint.
BinaryOperationHint BinaryOperationHintFromFeedback(int type_feedback) {
switch (type_feedback) {
@ -359,4 +362,6 @@ Isolate* FeedbackNexus::GetIsolate() const { return vector()->GetIsolate(); }
} // namespace internal
} // namespace v8
#include "src/objects/object-macros-undef.h"
#endif // V8_FEEDBACK_VECTOR_INL_H_

View File

@ -8,6 +8,7 @@
#include "src/ic/ic-inl.h"
#include "src/ic/ic-state.h"
#include "src/objects.h"
#include "src/objects/object-macros.h"
namespace v8 {
namespace internal {
@ -195,14 +196,16 @@ Handle<FeedbackVector> FeedbackVector::New(Isolate* isolate,
Factory* factory = isolate->factory();
const int slot_count = shared->feedback_metadata()->slot_count();
const int length = slot_count + kReservedIndexCount;
Handle<FixedArray> array = factory->NewFixedArray(length, TENURED);
array->set_map_no_write_barrier(isolate->heap()->feedback_vector_map());
array->set(kSharedFunctionInfoIndex, *shared);
array->set(kOptimizedCodeIndex, Smi::FromEnum(OptimizationMarker::kNone));
array->set(kProfilerTicksIndex, Smi::kZero);
array->set(kInvocationCountIndex, Smi::kZero);
Handle<FeedbackVector> vector = factory->NewFeedbackVector(shared, TENURED);
DCHECK_EQ(vector->length(), slot_count);
DCHECK_EQ(vector->shared_function_info(), *shared);
DCHECK_EQ(vector->optimized_code_cell(),
Smi::FromEnum(OptimizationMarker::kNone));
DCHECK_EQ(vector->invocation_count(), 0);
DCHECK_EQ(vector->profiler_ticks(), 0);
// Ensure we can skip the write barrier
Handle<Object> uninitialized_sentinel = UninitializedSentinel(isolate);
@ -218,23 +221,23 @@ Handle<FeedbackVector> FeedbackVector::New(Isolate* isolate,
switch (kind) {
case FeedbackSlotKind::kLoadGlobalInsideTypeof:
case FeedbackSlotKind::kLoadGlobalNotInsideTypeof:
array->set(index, isolate->heap()->empty_weak_cell(),
SKIP_WRITE_BARRIER);
vector->set(index, isolate->heap()->empty_weak_cell(),
SKIP_WRITE_BARRIER);
break;
case FeedbackSlotKind::kCompareOp:
case FeedbackSlotKind::kBinaryOp:
array->set(index, Smi::kZero, SKIP_WRITE_BARRIER);
vector->set(index, Smi::kZero, SKIP_WRITE_BARRIER);
break;
case FeedbackSlotKind::kCreateClosure: {
Handle<Cell> cell = factory->NewNoClosuresCell(undefined_value);
array->set(index, *cell);
vector->set(index, *cell);
break;
}
case FeedbackSlotKind::kLiteral:
array->set(index, Smi::kZero, SKIP_WRITE_BARRIER);
vector->set(index, Smi::kZero, SKIP_WRITE_BARRIER);
break;
case FeedbackSlotKind::kCall:
array->set(index, *uninitialized_sentinel, SKIP_WRITE_BARRIER);
vector->set(index, *uninitialized_sentinel, SKIP_WRITE_BARRIER);
extra_value = Smi::kZero;
break;
case FeedbackSlotKind::kLoadProperty:
@ -249,22 +252,22 @@ Handle<FeedbackVector> FeedbackVector::New(Isolate* isolate,
case FeedbackSlotKind::kStoreDataPropertyInLiteral:
case FeedbackSlotKind::kGeneral:
case FeedbackSlotKind::kTypeProfile:
array->set(index, *uninitialized_sentinel, SKIP_WRITE_BARRIER);
vector->set(index, *uninitialized_sentinel, SKIP_WRITE_BARRIER);
break;
case FeedbackSlotKind::kInvalid:
case FeedbackSlotKind::kKindsNumber:
UNREACHABLE();
array->set(index, Smi::kZero, SKIP_WRITE_BARRIER);
vector->set(index, Smi::kZero, SKIP_WRITE_BARRIER);
break;
}
for (int j = 1; j < entry_size; j++) {
array->set(index + j, extra_value, SKIP_WRITE_BARRIER);
vector->set(index + j, extra_value, SKIP_WRITE_BARRIER);
}
i += entry_size;
}
Handle<FeedbackVector> result = Handle<FeedbackVector>::cast(array);
Handle<FeedbackVector> result = Handle<FeedbackVector>::cast(vector);
if (!isolate->is_best_effort_code_coverage()) {
AddToCodeCoverageList(isolate, result);
}
@ -300,20 +303,20 @@ void FeedbackVector::SetOptimizedCode(Handle<FeedbackVector> vector,
DCHECK_EQ(code->kind(), Code::OPTIMIZED_FUNCTION);
Factory* factory = vector->GetIsolate()->factory();
Handle<WeakCell> cell = factory->NewWeakCell(code);
vector->set(kOptimizedCodeIndex, *cell);
vector->set_optimized_code_cell(*cell);
}
void FeedbackVector::SetOptimizationMarker(OptimizationMarker marker) {
set(kOptimizedCodeIndex, Smi::FromEnum(marker));
set_optimized_code_cell(Smi::FromEnum(marker));
}
void FeedbackVector::ClearOptimizedCode() {
set(kOptimizedCodeIndex, Smi::FromEnum(OptimizationMarker::kNone));
set_optimized_code_cell(Smi::FromEnum(OptimizationMarker::kNone));
}
void FeedbackVector::EvictOptimizedCodeMarkedForDeoptimization(
SharedFunctionInfo* shared, const char* reason) {
Object* slot = get(kOptimizedCodeIndex);
Object* slot = optimized_code_cell();
if (slot->IsSmi()) return;
WeakCell* cell = WeakCell::cast(slot);

View File

@ -8,9 +8,11 @@
#include <vector>
#include "src/base/logging.h"
#include "src/base/macros.h"
#include "src/elements-kind.h"
#include "src/objects/map.h"
#include "src/objects/name.h"
#include "src/objects/object-macros.h"
#include "src/type-hints.h"
#include "src/zone/zone-containers.h"
@ -108,40 +110,46 @@ std::ostream& operator<<(std::ostream& os, FeedbackSlotKind kind);
class FeedbackMetadata;
// The shape of the FeedbackVector is an array with:
// 0: feedback metadata
// 1: invocation count
// 2: optimized code slot (weak cell or Smi marker)
// 3: profiler tick count
// 4: feedback slot #0
// ...
// 4 + slot_count - 1: feedback slot #(slot_count-1)
//
class FeedbackVector : public FixedArray {
// A FeedbackVector has a fixed header with:
// - shared function info (which includes feedback metadata)
// - invocation count
// - runtime profiler ticks
// - optimized code cell (weak cell or Smi marker)
// followed by an array of feedback slots, of length determined by the feedback
// metadata.
class FeedbackVector : public HeapObject {
public:
// Casting.
static inline FeedbackVector* cast(Object* obj);
static const int kSharedFunctionInfoIndex = 0;
static const int kInvocationCountIndex = 1;
static const int kOptimizedCodeIndex = 2;
static const int kProfilerTicksIndex = 3;
static const int kReservedIndexCount = 4;
inline void ComputeCounts(int* with_type_info, int* generic,
int* vector_ic_count, bool code_is_interpreted);
inline bool is_empty() const;
// Returns number of slots in the vector.
inline int slot_count() const;
inline FeedbackMetadata* metadata() const;
inline SharedFunctionInfo* shared_function_info() const;
inline int invocation_count() const;
// [shared_function_info]: The shared function info for the function with this
// feedback vector.
DECL_ACCESSORS(shared_function_info, SharedFunctionInfo)
// [optimized_code_cell]: WeakCell containing optimized code or a Smi marker
// definining optimization behaviour.
DECL_ACCESSORS(optimized_code_cell, Object)
// [length]: The length of the feedback vector (not including the header, i.e.
// the number of feedback slots).
DECL_INT32_ACCESSORS(length)
// [invocation_count]: The number of times this function has been invoked.
DECL_INT32_ACCESSORS(invocation_count)
// [invocation_count]: The number of times this function has been seen by the
// runtime profiler.
DECL_INT32_ACCESSORS(profiler_ticks)
inline void clear_invocation_count();
inline Object* optimized_code_cell() const;
inline Code* optimized_code() const;
inline OptimizationMarker optimization_marker() const;
inline bool has_optimized_code() const;
@ -153,19 +161,20 @@ class FeedbackVector : public FixedArray {
Handle<Code> code);
void SetOptimizationMarker(OptimizationMarker marker);
inline int profiler_ticks() const;
inline void set_profiler_ticks(int ticks);
// Conversion from a slot to an integer index to the underlying array.
static int GetIndex(FeedbackSlot slot) {
return kReservedIndexCount + slot.ToInt();
}
static int GetIndex(FeedbackSlot slot) { return slot.ToInt(); }
// Conversion from an integer index to the underlying array to a slot.
static inline FeedbackSlot ToSlot(int index);
inline Object* Get(FeedbackSlot slot) const;
inline Object* get(int index) const;
inline void Set(FeedbackSlot slot, Object* value,
WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
inline void set(int index, Object* value,
WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
// Gives access to raw memory which stores the array's data.
inline Object** slots_start();
// Returns slot kind for given slot.
FeedbackSlotKind GetKind(FeedbackSlot slot) const;
@ -208,6 +217,7 @@ class FeedbackVector : public FixedArray {
#endif // OBJECT_PRINT
DECL_PRINTER(FeedbackVector)
DECL_VERIFIER(FeedbackVector)
// Clears the vector slots.
void ClearSlots(JSFunction* host_function);
@ -225,6 +235,32 @@ class FeedbackVector : public FixedArray {
// garbage collection (e.g., for patching the cache).
static inline Symbol* RawUninitializedSentinel(Isolate* isolate);
// Layout description.
#define FEEDBACK_VECTOR_FIELDS(V) \
/* Header fields. */ \
V(kSharedFunctionInfoOffset, kPointerSize) \
V(kOptimizedCodeOffset, kPointerSize) \
V(kLengthOffset, kInt32Size) \
V(kInvocationCountOffset, kInt32Size) \
V(kProfilerTicksOffset, kInt32Size) \
V(kUnalignedHeaderSize, 0)
DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize, FEEDBACK_VECTOR_FIELDS)
#undef FEEDBACK_VECTOR_FIELDS
static const int kHeaderSize =
RoundUp<kPointerAlignment>(kUnalignedHeaderSize);
static const int kFeedbackSlotsOffset = kHeaderSize;
class BodyDescriptor;
// No weak fields.
typedef BodyDescriptor BodyDescriptorWeak;
// Garbage collection support.
static constexpr int SizeFor(int length) {
return kFeedbackSlotsOffset + length * kPointerSize;
}
private:
static void AddToCodeCoverageList(Isolate* isolate,
Handle<FeedbackVector> vector);
@ -354,7 +390,7 @@ class FeedbackVectorSpec : public FeedbackVectorSpecBase<FeedbackVectorSpec> {
// If used, the TypeProfileSlot is always added as the first slot and its
// index is constant. If other slots are added before the TypeProfileSlot,
// this number changes.
static const int kTypeProfileSlotIndex = FeedbackVector::kReservedIndexCount;
static const int kTypeProfileSlotIndex = 0;
private:
friend class FeedbackVectorSpecBase<FeedbackVectorSpec>;

View File

@ -141,13 +141,9 @@ void FullCodeGenerator::Generate() {
Comment cmnt(masm_, "[ Increment invocation count");
__ ldr(r2, FieldMemOperand(r1, JSFunction::kFeedbackVectorOffset));
__ ldr(r2, FieldMemOperand(r2, Cell::kValueOffset));
__ ldr(r9, FieldMemOperand(
r2, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ add(r9, r9, Operand(Smi::FromInt(1)));
__ str(r9, FieldMemOperand(
r2, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ ldr(r9, FieldMemOperand(r2, FeedbackVector::kInvocationCountOffset));
__ add(r9, r9, Operand(1));
__ str(r9, FieldMemOperand(r2, FeedbackVector::kInvocationCountOffset));
}
{ Comment cmnt(masm_, "[ Allocate locals");
@ -1041,7 +1037,8 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
int const vector_index = SmiFromSlot(slot)->value();
__ EmitLoadFeedbackVector(r3);
__ mov(r2, Operand(FeedbackVector::MegamorphicSentinel(isolate())));
__ str(r2, FieldMemOperand(r3, FixedArray::OffsetOfElementAt(vector_index)));
__ str(r2, FieldMemOperand(r3, FeedbackVector::kFeedbackSlotsOffset +
vector_index * kPointerSize));
// r0 contains the key. The receiver in r1 is the second argument to the
// ForInFilter. ForInFilter returns undefined if the receiver doesn't

View File

@ -144,13 +144,9 @@ void FullCodeGenerator::Generate() {
Comment cmnt(masm_, "[ Increment invocation count");
__ Ldr(x11, FieldMemOperand(x1, JSFunction::kFeedbackVectorOffset));
__ Ldr(x11, FieldMemOperand(x11, Cell::kValueOffset));
__ Ldr(x10, FieldMemOperand(
x11, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ Add(x10, x10, Operand(Smi::FromInt(1)));
__ Str(x10, FieldMemOperand(
x11, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ Ldr(w10, FieldMemOperand(x11, FeedbackVector::kInvocationCountOffset));
__ Add(w10, w10, Operand(1));
__ Str(w10, FieldMemOperand(x11, FeedbackVector::kInvocationCountOffset));
}
// Reserve space on the stack for locals.
@ -1029,7 +1025,8 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
int const vector_index = SmiFromSlot(slot)->value();
__ EmitLoadFeedbackVector(x3);
__ Mov(x10, Operand(FeedbackVector::MegamorphicSentinel(isolate())));
__ Str(x10, FieldMemOperand(x3, FixedArray::OffsetOfElementAt(vector_index)));
__ Str(x10, FieldMemOperand(x3, FeedbackVector::kFeedbackSlotsOffset +
vector_index * kPointerSize));
// x0 contains the key. The receiver in x1 is the second argument to the
// ForInFilter. ForInFilter returns undefined if the receiver doesn't

View File

@ -123,10 +123,7 @@ void FullCodeGenerator::Generate() {
Comment cmnt(masm_, "[ Increment invocation count");
__ mov(ecx, FieldOperand(edi, JSFunction::kFeedbackVectorOffset));
__ mov(ecx, FieldOperand(ecx, Cell::kValueOffset));
__ add(
FieldOperand(ecx, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize),
Immediate(Smi::FromInt(1)));
__ inc(FieldOperand(ecx, FeedbackVector::kInvocationCountOffset));
}
{ Comment cmnt(masm_, "[ Allocate locals");
@ -956,7 +953,8 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
// We need to filter the key, record slow-path here.
int const vector_index = SmiFromSlot(slot)->value();
__ EmitLoadFeedbackVector(edx);
__ mov(FieldOperand(edx, FixedArray::OffsetOfElementAt(vector_index)),
__ mov(FieldOperand(edx, FeedbackVector::kFeedbackSlotsOffset +
vector_index * kPointerSize),
Immediate(FeedbackVector::MegamorphicSentinel(isolate())));
// eax contains the key. The receiver in ebx is the second argument to the

View File

@ -143,13 +143,9 @@ void FullCodeGenerator::Generate() {
Comment cmnt(masm_, "[ Increment invocation count");
__ lw(a0, FieldMemOperand(a1, JSFunction::kFeedbackVectorOffset));
__ lw(a0, FieldMemOperand(a0, Cell::kValueOffset));
__ lw(t0, FieldMemOperand(
a0, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ Addu(t0, t0, Operand(Smi::FromInt(1)));
__ sw(t0, FieldMemOperand(
a0, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ lw(t0, FieldMemOperand(a0, FeedbackVector::kInvocationCountOffset));
__ Addu(t0, t0, Operand(1));
__ sw(t0, FieldMemOperand(a0, FeedbackVector::kInvocationCountOffset));
}
{ Comment cmnt(masm_, "[ Allocate locals");
@ -1030,7 +1026,8 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
int const vector_index = SmiFromSlot(slot)->value();
__ EmitLoadFeedbackVector(a3);
__ li(a2, Operand(FeedbackVector::MegamorphicSentinel(isolate())));
__ sw(a2, FieldMemOperand(a3, FixedArray::OffsetOfElementAt(vector_index)));
__ sw(a2, FieldMemOperand(a3, FeedbackVector::kFeedbackSlotsOffset +
vector_index * kPointerSize));
__ mov(a0, result_register());
// a0 contains the key. The receiver in a1 is the second argument to the

View File

@ -142,13 +142,9 @@ void FullCodeGenerator::Generate() {
Comment cmnt(masm_, "[ Increment invocation count");
__ Ld(a0, FieldMemOperand(a1, JSFunction::kFeedbackVectorOffset));
__ Ld(a0, FieldMemOperand(a0, Cell::kValueOffset));
__ Ld(a4, FieldMemOperand(
a0, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ Daddu(a4, a4, Operand(Smi::FromInt(1)));
__ Sd(a4, FieldMemOperand(
a0, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize));
__ Lw(a4, FieldMemOperand(a0, FeedbackVector::kInvocationCountOffset));
__ Addu(a4, a4, Operand(1));
__ Sw(a4, FieldMemOperand(a0, FeedbackVector::kInvocationCountOffset));
}
{ Comment cmnt(masm_, "[ Allocate locals");
@ -1032,7 +1028,8 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
int const vector_index = SmiFromSlot(slot)->value();
__ EmitLoadFeedbackVector(a3);
__ li(a2, Operand(FeedbackVector::MegamorphicSentinel(isolate())));
__ Sd(a2, FieldMemOperand(a3, FixedArray::OffsetOfElementAt(vector_index)));
__ Sd(a2, FieldMemOperand(a3, FeedbackVector::kFeedbackSlotsOffset +
vector_index * kPointerSize));
__ mov(a0, result_register());
// a0 contains the key. The receiver in a1 is the second argument to the

View File

@ -126,10 +126,7 @@ void FullCodeGenerator::Generate() {
Comment cmnt(masm_, "[ Increment invocation count");
__ movp(rcx, FieldOperand(rdi, JSFunction::kFeedbackVectorOffset));
__ movp(rcx, FieldOperand(rcx, Cell::kValueOffset));
__ SmiAddConstant(
FieldOperand(rcx, FeedbackVector::kInvocationCountIndex * kPointerSize +
FeedbackVector::kHeaderSize),
Smi::FromInt(1));
__ incl(FieldOperand(rcx, FeedbackVector::kInvocationCountOffset));
}
{ Comment cmnt(masm_, "[ Allocate locals");
@ -982,7 +979,8 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
// We need to filter the key, record slow-path here.
int const vector_index = SmiFromSlot(slot)->value();
__ EmitLoadFeedbackVector(rdx);
__ Move(FieldOperand(rdx, FixedArray::OffsetOfElementAt(vector_index)),
__ Move(FieldOperand(rdx, FeedbackVector::kFeedbackSlotsOffset +
vector_index * kPointerSize),
FeedbackVector::MegamorphicSentinel(isolate()));
// rax contains the key. The receiver in rbx is the second argument to

View File

@ -9,7 +9,7 @@
#include "src/base/platform/platform.h"
#include "src/counters-inl.h"
#include "src/feedback-vector-inl.h"
#include "src/feedback-vector.h"
#include "src/heap/heap.h"
#include "src/heap/incremental-marking-inl.h"
#include "src/heap/mark-compact.h"

View File

@ -2498,7 +2498,7 @@ bool Heap::CreateInitialMaps() {
ALLOCATE_VARSIZE_MAP(FIXED_ARRAY_TYPE, scope_info)
ALLOCATE_VARSIZE_MAP(FIXED_ARRAY_TYPE, module_info)
ALLOCATE_VARSIZE_MAP(FIXED_ARRAY_TYPE, feedback_vector)
ALLOCATE_VARSIZE_MAP(FEEDBACK_VECTOR_TYPE, feedback_vector)
ALLOCATE_PRIMITIVE_MAP(HEAP_NUMBER_TYPE, HeapNumber::kSize, heap_number,
Context::NUMBER_FUNCTION_INDEX)
ALLOCATE_MAP(MUTABLE_HEAP_NUMBER_TYPE, HeapNumber::kSize,
@ -4202,6 +4202,36 @@ AllocationResult Heap::CopyFixedDoubleArrayWithMap(FixedDoubleArray* src,
return obj;
}
AllocationResult Heap::CopyFeedbackVector(FeedbackVector* src) {
int len = src->length();
HeapObject* obj = nullptr;
{
AllocationResult allocation = AllocateRawFeedbackVector(len, NOT_TENURED);
if (!allocation.To(&obj)) return allocation;
}
obj->set_map_after_allocation(feedback_vector_map(), SKIP_WRITE_BARRIER);
FeedbackVector* result = FeedbackVector::cast(obj);
DisallowHeapAllocation no_gc;
WriteBarrierMode mode = result->GetWriteBarrierMode(no_gc);
// Eliminate the write barrier if possible.
if (mode == SKIP_WRITE_BARRIER) {
CopyBlock(result->address() + kPointerSize,
result->address() + kPointerSize,
FeedbackVector::SizeFor(len) - kPointerSize);
return result;
}
// Slow case: Just copy the content one-by-one.
result->set_shared_function_info(src->shared_function_info());
result->set_invocation_count(src->invocation_count());
result->set_profiler_ticks(src->profiler_ticks());
result->set_optimized_code_cell(src->optimized_code_cell());
for (int i = 0; i < len; i++) result->set(i, src->get(i), mode);
return result;
}
AllocationResult Heap::AllocateRawFixedArray(int length,
PretenureFlag pretenure) {
@ -4307,6 +4337,44 @@ AllocationResult Heap::AllocateRawFixedDoubleArray(int length,
return object;
}
AllocationResult Heap::AllocateRawFeedbackVector(int length,
PretenureFlag pretenure) {
DCHECK(length >= 0);
int size = FeedbackVector::SizeFor(length);
AllocationSpace space = SelectSpace(pretenure);
HeapObject* object = nullptr;
{
AllocationResult allocation = AllocateRaw(size, space);
if (!allocation.To(&object)) return allocation;
}
return object;
}
AllocationResult Heap::AllocateFeedbackVector(SharedFunctionInfo* shared,
PretenureFlag pretenure) {
int length = shared->feedback_metadata()->slot_count();
HeapObject* result = nullptr;
{
AllocationResult allocation = AllocateRawFeedbackVector(length, pretenure);
if (!allocation.To(&result)) return allocation;
}
// Initialize the object's map.
result->set_map_after_allocation(feedback_vector_map(), SKIP_WRITE_BARRIER);
FeedbackVector* vector = FeedbackVector::cast(result);
vector->set_shared_function_info(shared);
vector->set_optimized_code_cell(Smi::FromEnum(OptimizationMarker::kNone));
vector->set_length(length);
vector->set_invocation_count(0);
vector->set_profiler_ticks(0);
// TODO(leszeks): Initialize based on the feedback metadata.
MemsetPointer(vector->slots_start(), undefined_value(), length);
return vector;
}
AllocationResult Heap::AllocateSymbol() {
// Statically ensure that it is safe to allocate symbols in paged spaces.

View File

@ -1989,6 +1989,15 @@ class Heap {
MUST_USE_RESULT AllocationResult
AllocatePropertyArray(int length, PretenureFlag pretenure = NOT_TENURED);
// Allocate a feedback vector for the given shared function info. The slots
// are pre-filled with undefined.
MUST_USE_RESULT AllocationResult
AllocateFeedbackVector(SharedFunctionInfo* shared, PretenureFlag pretenure);
// Allocate an uninitialized feedback vector.
MUST_USE_RESULT AllocationResult
AllocateRawFeedbackVector(int length, PretenureFlag pretenure);
MUST_USE_RESULT AllocationResult AllocateSmallOrderedHashSet(
int length, PretenureFlag pretenure = NOT_TENURED);
MUST_USE_RESULT AllocationResult AllocateSmallOrderedHashMap(
@ -2092,6 +2101,9 @@ class Heap {
MUST_USE_RESULT inline AllocationResult CopyFixedDoubleArray(
FixedDoubleArray* src);
// Make a copy of src and return it.
MUST_USE_RESULT AllocationResult CopyFeedbackVector(FeedbackVector* src);
// Computes a single character string where the character has code.
// A cache is used for one-byte (Latin1) codes.
MUST_USE_RESULT AllocationResult

View File

@ -267,7 +267,6 @@ void ObjectStatsCollector::CollectStatistics(HeapObject* obj) {
if (obj->IsJSCollection()) {
RecordJSCollectionDetails(JSObject::cast(obj));
}
if (obj->IsJSFunction()) RecordJSFunctionDetails(JSFunction::cast(obj));
if (obj->IsScript()) RecordScriptDetails(Script::cast(obj));
}
@ -552,14 +551,6 @@ void ObjectStatsCollector::RecordSharedFunctionInfoDetails(
}
}
void ObjectStatsCollector::RecordJSFunctionDetails(JSFunction* function) {
if (function->feedback_vector_cell()->value()->IsFeedbackVector()) {
FeedbackVector* feedback_vector = function->feedback_vector();
RecordFixedArrayHelper(function, feedback_vector, FEEDBACK_VECTOR_SUB_TYPE,
0);
}
}
void ObjectStatsCollector::RecordFixedArrayDetails(FixedArray* array) {
if (array->IsContext()) {
RecordFixedArrayHelper(nullptr, array, CONTEXT_SUB_TYPE, 0);

View File

@ -146,7 +146,6 @@ class ObjectStatsCollector {
void RecordCodeDetails(Code* code);
void RecordFixedArrayDetails(FixedArray* array);
void RecordJSCollectionDetails(JSObject* obj);
void RecordJSFunctionDetails(JSFunction* function);
void RecordJSObjectDetails(JSObject* object);
void RecordJSWeakCollectionDetails(JSWeakCollection* obj);
void RecordMapDetails(Map* map);

View File

@ -21,6 +21,7 @@ namespace internal {
V(Cell) \
V(Code) \
V(ConsString) \
V(FeedbackVector) \
V(FixedArray) \
V(FixedDoubleArray) \
V(FixedFloat64Array) \

View File

@ -3413,17 +3413,16 @@ void LargeObjectSpace::Verify() {
CHECK(map->IsMap());
CHECK(heap()->map_space()->Contains(map));
// We have only code, sequential strings, external strings
// (sequential strings that have been morphed into external
// strings), thin strings (sequential strings that have been
// morphed into thin strings), fixed arrays, fixed double arrays,
// byte arrays, and free space (right after allocation) in the
// large object space.
// We have only code, sequential strings, external strings (sequential
// strings that have been morphed into external strings), thin strings
// (sequential strings that have been morphed into thin strings), fixed
// arrays, fixed double arrays, byte arrays, feedback vectors and free space
// (right after allocation) in the large object space.
CHECK(object->IsAbstractCode() || object->IsSeqString() ||
object->IsExternalString() || object->IsThinString() ||
object->IsFixedArray() || object->IsFixedDoubleArray() ||
object->IsPropertyArray() || object->IsByteArray() ||
object->IsFreeSpace());
object->IsFeedbackVector() || object->IsFreeSpace());
// The object itself should look OK.
object->ObjectVerify();

View File

@ -800,7 +800,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
// Load the cache state into ecx.
__ mov(ecx, FieldOperand(ebx, edx, times_half_pointer_size,
FixedArray::kHeaderSize));
FeedbackVector::kFeedbackSlotsOffset));
// A monomorphic cache hit or an already megamorphic state: invoke the
// function without changing the state.
@ -842,9 +842,9 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
// MegamorphicSentinel is an immortal immovable object (undefined) so no
// write-barrier is needed.
__ bind(&megamorphic);
__ mov(
FieldOperand(ebx, edx, times_half_pointer_size, FixedArray::kHeaderSize),
Immediate(FeedbackVector::MegamorphicSentinel(isolate)));
__ mov(FieldOperand(ebx, edx, times_half_pointer_size,
FeedbackVector::kFeedbackSlotsOffset),
Immediate(FeedbackVector::MegamorphicSentinel(isolate)));
__ jmp(&done, Label::kFar);
// An uninitialized cache is patched with the function or sentinel to
@ -869,7 +869,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
__ bind(&done);
// Increment the call count for all function calls.
__ add(FieldOperand(ebx, edx, times_half_pointer_size,
FixedArray::kHeaderSize + kPointerSize),
FeedbackVector::kFeedbackSlotsOffset + kPointerSize),
Immediate(Smi::FromInt(1)));
}
@ -892,7 +892,7 @@ void CallConstructStub::Generate(MacroAssembler* masm) {
Label feedback_register_initialized;
// Put the AllocationSite from the feedback vector into ebx, or undefined.
__ mov(ebx, FieldOperand(ebx, edx, times_half_pointer_size,
FixedArray::kHeaderSize));
FeedbackVector::kFeedbackSlotsOffset));
Handle<Map> allocation_site_map = isolate()->factory()->allocation_site_map();
__ cmp(FieldOperand(ebx, 0), Immediate(allocation_site_map));
__ j(equal, &feedback_register_initialized);

View File

@ -30,7 +30,8 @@ Node* AccessorAssembler::TryMonomorphicCase(Node* slot, Node* vector,
// TODO(ishell): add helper class that hides offset computations for a series
// of loads.
int32_t header_size = FixedArray::kHeaderSize - kHeapObjectTag;
CSA_ASSERT(this, IsFeedbackVector(vector), vector);
int32_t header_size = FeedbackVector::kFeedbackSlotsOffset - kHeapObjectTag;
// Adding |header_size| with a separate IntPtrAdd rather than passing it
// into ElementOffsetFromIndex() allows it to be folded into a single
// [base, index, offset] indirect memory access on x64.
@ -1865,9 +1866,9 @@ void AccessorAssembler::LoadIC_Uninitialized(const LoadICParameters* p) {
Node* instance_type = LoadMapInstanceType(receiver_map);
// Optimistically write the state transition to the vector.
StoreFixedArrayElement(p->vector, p->slot,
LoadRoot(Heap::kpremonomorphic_symbolRootIndex),
SKIP_WRITE_BARRIER, 0, SMI_PARAMETERS);
StoreFeedbackVectorSlot(p->vector, p->slot,
LoadRoot(Heap::kpremonomorphic_symbolRootIndex),
SKIP_WRITE_BARRIER, 0, SMI_PARAMETERS);
{
// Special case for Function.prototype load, because it's very common
@ -1889,9 +1890,9 @@ void AccessorAssembler::LoadIC_Uninitialized(const LoadICParameters* p) {
BIND(&miss);
{
// Undo the optimistic state transition.
StoreFixedArrayElement(p->vector, p->slot,
LoadRoot(Heap::kuninitialized_symbolRootIndex),
SKIP_WRITE_BARRIER, 0, SMI_PARAMETERS);
StoreFeedbackVectorSlot(p->vector, p->slot,
LoadRoot(Heap::kuninitialized_symbolRootIndex),
SKIP_WRITE_BARRIER, 0, SMI_PARAMETERS);
TailCallRuntime(Runtime::kLoadIC_Miss, p->context, p->receiver, p->name,
p->slot, p->vector);
@ -1931,7 +1932,7 @@ void AccessorAssembler::LoadGlobalIC_TryPropertyCellCase(
Label* miss, ParameterMode slot_mode) {
Comment("LoadGlobalIC_TryPropertyCellCase");
Node* weak_cell = LoadFixedArrayElement(vector, slot, 0, slot_mode);
Node* weak_cell = LoadFeedbackVectorSlot(vector, slot, 0, slot_mode);
CSA_ASSERT(this, HasInstanceType(weak_cell, WEAK_CELL_TYPE));
// Load value or try handler case if the {weak_cell} is cleared.
@ -1951,8 +1952,8 @@ void AccessorAssembler::LoadGlobalIC_TryHandlerCase(const LoadICParameters* pp,
Label call_handler(this), non_smi(this);
Node* handler =
LoadFixedArrayElement(pp->vector, pp->slot, kPointerSize, SMI_PARAMETERS);
Node* handler = LoadFeedbackVectorSlot(pp->vector, pp->slot, kPointerSize,
SMI_PARAMETERS);
GotoIf(WordEqual(handler, LoadRoot(Heap::kuninitialized_symbolRootIndex)),
miss);
@ -2064,8 +2065,8 @@ void AccessorAssembler::KeyedLoadIC(const LoadICParameters* p) {
GotoIfNot(WordEqual(feedback, p->name), &miss);
// If the name comparison succeeded, we know we have a fixed array with
// at least one map/handler pair.
Node* array =
LoadFixedArrayElement(p->vector, p->slot, kPointerSize, SMI_PARAMETERS);
Node* array = LoadFeedbackVectorSlot(p->vector, p->slot, kPointerSize,
SMI_PARAMETERS);
HandlePolymorphicCase(receiver_map, array, &if_handler, &var_handler, &miss,
1);
}
@ -2239,10 +2240,10 @@ void AccessorAssembler::KeyedStoreIC(const StoreICParameters* p,
// We might have a name in feedback, and a fixed array in the next slot.
Comment("KeyedStoreIC_try_polymorphic_name");
GotoIfNot(WordEqual(feedback, p->name), &miss);
// If the name comparison succeeded, we know we have a FixedArray with
// at least one map/handler pair.
Node* array = LoadFixedArrayElement(p->vector, p->slot, kPointerSize,
SMI_PARAMETERS);
// If the name comparison succeeded, we know we have a feedback vector
// with at least one map/handler pair.
Node* array = LoadFeedbackVectorSlot(p->vector, p->slot, kPointerSize,
SMI_PARAMETERS);
HandlePolymorphicCase(receiver_map, array, &if_handler, &var_handler,
&miss, 1);
}
@ -2284,7 +2285,7 @@ void AccessorAssembler::GenerateLoadIC_Noninlined() {
Label if_handler(this, &var_handler), miss(this, Label::kDeferred);
Node* receiver_map = LoadReceiverMap(receiver);
Node* feedback = LoadFixedArrayElement(vector, slot, 0, SMI_PARAMETERS);
Node* feedback = LoadFeedbackVectorSlot(vector, slot, 0, SMI_PARAMETERS);
LoadICParameters p(context, receiver, name, slot, vector);
LoadIC_Noninlined(&p, receiver_map, feedback, &var_handler, &if_handler,

View File

@ -980,9 +980,9 @@ void KeyedStoreGenericAssembler::StoreIC_Uninitialized(
&miss);
// Optimistically write the state transition to the vector.
StoreFixedArrayElement(vector, slot,
LoadRoot(Heap::kpremonomorphic_symbolRootIndex),
SKIP_WRITE_BARRIER, 0, SMI_PARAMETERS);
StoreFeedbackVectorSlot(vector, slot,
LoadRoot(Heap::kpremonomorphic_symbolRootIndex),
SKIP_WRITE_BARRIER, 0, SMI_PARAMETERS);
StoreICParameters p(context, receiver, name, value, slot, vector);
EmitGenericPropertyStore(receiver, receiver_map, &p, &miss, language_mode,
@ -991,9 +991,9 @@ void KeyedStoreGenericAssembler::StoreIC_Uninitialized(
BIND(&miss);
{
// Undo the optimistic state transition.
StoreFixedArrayElement(vector, slot,
LoadRoot(Heap::kuninitialized_symbolRootIndex),
SKIP_WRITE_BARRIER, 0, SMI_PARAMETERS);
StoreFeedbackVectorSlot(vector, slot,
LoadRoot(Heap::kuninitialized_symbolRootIndex),
SKIP_WRITE_BARRIER, 0, SMI_PARAMETERS);
TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot, vector,
receiver, name);
}

View File

@ -461,7 +461,6 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::GetSuperConstructor(Register out) {
BytecodeArrayBuilder& BytecodeArrayBuilder::CompareOperation(
Token::Value op, Register reg, int feedback_slot) {
DCHECK(feedback_slot != kNoFeedbackSlot);
switch (op) {
case Token::Value::EQ:
OutputTestEqual(reg, feedback_slot);

View File

@ -566,8 +566,6 @@ class V8_EXPORT_PRIVATE BytecodeArrayBuilder final
BytecodeSourceInfo latest_source_info_;
BytecodeSourceInfo deferred_source_info_;
static int const kNoFeedbackSlot = 0;
DISALLOW_COPY_AND_ASSIGN(BytecodeArrayBuilder);
};

View File

@ -4235,6 +4235,7 @@ LanguageMode BytecodeGenerator::language_mode() const {
}
int BytecodeGenerator::feedback_index(FeedbackSlot slot) const {
DCHECK(!slot.IsInvalid());
return FeedbackVector::GetIndex(slot);
}

View File

@ -555,12 +555,12 @@ void InterpreterAssembler::CallEpilogue() {
Node* InterpreterAssembler::IncrementCallCount(Node* feedback_vector,
Node* slot_id) {
Comment("increment call count");
Node* call_count_slot = IntPtrAdd(slot_id, IntPtrConstant(1));
Node* call_count = LoadFixedArrayElement(feedback_vector, call_count_slot);
Node* call_count =
LoadFeedbackVectorSlot(feedback_vector, slot_id, kPointerSize);
Node* new_count = SmiAdd(call_count, SmiConstant(1));
// Count is Smi, so we don't need a write barrier.
return StoreFixedArrayElement(feedback_vector, call_count_slot, new_count,
SKIP_WRITE_BARRIER);
return StoreFeedbackVectorSlot(feedback_vector, slot_id, new_count,
SKIP_WRITE_BARRIER, kPointerSize);
}
void InterpreterAssembler::CollectCallFeedback(Node* target, Node* context,
@ -574,7 +574,7 @@ void InterpreterAssembler::CollectCallFeedback(Node* target, Node* context,
IncrementCallCount(feedback_vector, slot_id);
// Check if we have monomorphic {target} feedback already.
Node* feedback_element = LoadFixedArrayElement(feedback_vector, slot_id);
Node* feedback_element = LoadFeedbackVectorSlot(feedback_vector, slot_id);
Node* feedback_value = LoadWeakCellValueUnchecked(feedback_element);
Branch(WordEqual(target, feedback_value), &done, &extra_checks);
@ -632,7 +632,7 @@ void InterpreterAssembler::CollectCallFeedback(Node* target, Node* context,
// write-barrier is not needed.
Comment("transition to megamorphic");
DCHECK(Heap::RootIsImmortalImmovable(Heap::kmegamorphic_symbolRootIndex));
StoreFixedArrayElement(
StoreFeedbackVectorSlot(
feedback_vector, slot_id,
HeapConstant(FeedbackVector::MegamorphicSentinel(isolate())),
SKIP_WRITE_BARRIER);
@ -675,7 +675,7 @@ Node* InterpreterAssembler::CallJSWithFeedback(
IncrementCallCount(feedback_vector, slot_id);
// The checks. First, does function match the recorded monomorphic target?
Node* feedback_element = LoadFixedArrayElement(feedback_vector, slot_id);
Node* feedback_element = LoadFeedbackVectorSlot(feedback_vector, slot_id);
Node* feedback_value = LoadWeakCellValueUnchecked(feedback_element);
Node* is_monomorphic = WordEqual(function, feedback_value);
GotoIfNot(is_monomorphic, &extra_checks);
@ -793,7 +793,7 @@ Node* InterpreterAssembler::CallJSWithFeedback(
// MegamorphicSentinel is created as a part of Heap::InitialObjects
// and will not move during a GC. So it is safe to skip write barrier.
DCHECK(Heap::RootIsImmortalImmovable(Heap::kmegamorphic_symbolRootIndex));
StoreFixedArrayElement(
StoreFeedbackVectorSlot(
feedback_vector, slot_id,
HeapConstant(FeedbackVector::MegamorphicSentinel(isolate())),
SKIP_WRITE_BARRIER);
@ -874,7 +874,7 @@ Node* InterpreterAssembler::Construct(Node* constructor, Node* context,
GotoIfNot(is_js_function, &call_construct);
// Check if it is a monomorphic constructor.
Node* feedback_element = LoadFixedArrayElement(feedback_vector, slot_id);
Node* feedback_element = LoadFeedbackVectorSlot(feedback_vector, slot_id);
Node* feedback_value = LoadWeakCellValueUnchecked(feedback_element);
Node* is_monomorphic = WordEqual(constructor, feedback_value);
allocation_feedback.Bind(UndefinedConstant());
@ -975,7 +975,7 @@ Node* InterpreterAssembler::Construct(Node* constructor, Node* context,
// write-barrier is not needed.
Comment("transition to megamorphic");
DCHECK(Heap::RootIsImmortalImmovable(Heap::kmegamorphic_symbolRootIndex));
StoreFixedArrayElement(
StoreFeedbackVectorSlot(
feedback_vector, slot_id,
HeapConstant(FeedbackVector::MegamorphicSentinel(isolate())),
SKIP_WRITE_BARRIER);

View File

@ -3152,8 +3152,8 @@ IGNITION_HANDLER(ForInNext, InterpreterAssembler) {
Node* feedback_vector = LoadFeedbackVector();
Node* megamorphic_sentinel =
HeapConstant(FeedbackVector::MegamorphicSentinel(isolate()));
StoreFixedArrayElement(feedback_vector, vector_index, megamorphic_sentinel,
SKIP_WRITE_BARRIER);
StoreFeedbackVectorSlot(feedback_vector, vector_index, megamorphic_sentinel,
SKIP_WRITE_BARRIER);
// Need to filter the {key} for the {receiver}.
Node* context = GetContext();

View File

@ -1281,7 +1281,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
// Load the cache state into t2.
__ Lsa(t2, a2, a3, kPointerSizeLog2 - kSmiTagSize);
__ lw(t2, FieldMemOperand(t2, FixedArray::kHeaderSize));
__ lw(t2, FieldMemOperand(t2, FeedbackVector::kFeedbackSlotsOffset));
// A monomorphic cache hit or an already megamorphic state: invoke the
// function without changing the state.
@ -1326,7 +1326,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
__ bind(&megamorphic);
__ Lsa(t2, a2, a3, kPointerSizeLog2 - kSmiTagSize);
__ LoadRoot(at, Heap::kmegamorphic_symbolRootIndex);
__ sw(at, FieldMemOperand(t2, FixedArray::kHeaderSize));
__ sw(at, FieldMemOperand(t2, FeedbackVector::kFeedbackSlotsOffset));
__ jmp(&done);
// An uninitialized cache is patched with the function.
@ -1350,9 +1350,11 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
// Increment the call count for all function calls.
__ Lsa(at, a2, a3, kPointerSizeLog2 - kSmiTagSize);
__ lw(t0, FieldMemOperand(at, FixedArray::kHeaderSize + kPointerSize));
__ lw(t0, FieldMemOperand(
at, FeedbackVector::kFeedbackSlotsOffset + kPointerSize));
__ Addu(t0, t0, Operand(Smi::FromInt(1)));
__ sw(t0, FieldMemOperand(at, FixedArray::kHeaderSize + kPointerSize));
__ sw(t0, FieldMemOperand(
at, FeedbackVector::kFeedbackSlotsOffset + kPointerSize));
}
@ -1374,7 +1376,7 @@ void CallConstructStub::Generate(MacroAssembler* masm) {
__ Lsa(t1, a2, a3, kPointerSizeLog2 - kSmiTagSize);
Label feedback_register_initialized;
// Put the AllocationSite from the feedback vector into a2, or undefined.
__ lw(a2, FieldMemOperand(t1, FixedArray::kHeaderSize));
__ lw(a2, FieldMemOperand(t1, FeedbackVector::kFeedbackSlotsOffset));
__ lw(t1, FieldMemOperand(a2, AllocationSite::kMapOffset));
__ LoadRoot(at, Heap::kAllocationSiteMapRootIndex);
__ Branch(&feedback_register_initialized, eq, t1, Operand(at));

View File

@ -1279,7 +1279,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
// Load the cache state into a5.
__ dsrl(a5, a3, 32 - kPointerSizeLog2);
__ Daddu(a5, a2, Operand(a5));
__ Ld(a5, FieldMemOperand(a5, FixedArray::kHeaderSize));
__ Ld(a5, FieldMemOperand(a5, FeedbackVector::kFeedbackSlotsOffset));
// A monomorphic cache hit or an already megamorphic state: invoke the
// function without changing the state.
@ -1325,7 +1325,7 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
__ dsrl(a5, a3, 32 - kPointerSizeLog2);
__ Daddu(a5, a2, Operand(a5));
__ LoadRoot(at, Heap::kmegamorphic_symbolRootIndex);
__ Sd(at, FieldMemOperand(a5, FixedArray::kHeaderSize));
__ Sd(at, FieldMemOperand(a5, FeedbackVector::kFeedbackSlotsOffset));
__ jmp(&done);
// An uninitialized cache is patched with the function.
@ -1351,9 +1351,11 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
// Increment the call count for all function calls.
__ SmiScale(a4, a3, kPointerSizeLog2);
__ Daddu(a5, a2, Operand(a4));
__ Ld(a4, FieldMemOperand(a5, FixedArray::kHeaderSize + kPointerSize));
__ Ld(a4, FieldMemOperand(
a5, FeedbackVector::kFeedbackSlotsOffset + kPointerSize));
__ Daddu(a4, a4, Operand(Smi::FromInt(1)));
__ Sd(a4, FieldMemOperand(a5, FixedArray::kHeaderSize + kPointerSize));
__ Sd(a4, FieldMemOperand(
a5, FeedbackVector::kFeedbackSlotsOffset + kPointerSize));
}
@ -1376,7 +1378,7 @@ void CallConstructStub::Generate(MacroAssembler* masm) {
__ Daddu(a5, a2, at);
Label feedback_register_initialized;
// Put the AllocationSite from the feedback vector into a2, or undefined.
__ Ld(a2, FieldMemOperand(a5, FixedArray::kHeaderSize));
__ Ld(a2, FieldMemOperand(a5, FeedbackVector::kFeedbackSlotsOffset));
__ Ld(a5, FieldMemOperand(a2, AllocationSite::kMapOffset));
__ LoadRoot(at, Heap::kAllocationSiteMapRootIndex);
__ Branch(&feedback_register_initialized, eq, a5, Operand(at));

View File

@ -6,6 +6,7 @@
#define V8_OBJECTS_BODY_DESCRIPTORS_INL_H_
#include "src/assembler-inl.h"
#include "src/feedback-vector.h"
#include "src/objects-body-descriptors.h"
#include "src/objects/hash-table.h"
#include "src/transitions.h"
@ -354,6 +355,35 @@ class FixedTypedArrayBase::BodyDescriptor final : public BodyDescriptorBase {
}
};
class FeedbackVector::BodyDescriptor final : public BodyDescriptorBase {
public:
static bool IsValidSlot(HeapObject* obj, int offset) {
return offset == kSharedFunctionInfoOffset ||
offset == kOptimizedCodeOffset || offset >= kFeedbackSlotsOffset;
}
template <typename ObjectVisitor>
static inline void IterateBody(HeapObject* obj, int object_size,
ObjectVisitor* v) {
IteratePointer(obj, kSharedFunctionInfoOffset, v);
IteratePointer(obj, kOptimizedCodeOffset, v);
IteratePointers(obj, kFeedbackSlotsOffset, object_size, v);
}
template <typename StaticVisitor>
static inline void IterateBody(HeapObject* obj, int object_size) {
Heap* heap = obj->GetHeap();
IteratePointer<StaticVisitor>(heap, obj, kSharedFunctionInfoOffset);
IteratePointer<StaticVisitor>(heap, obj, kOptimizedCodeOffset);
IteratePointers<StaticVisitor>(heap, obj, kFeedbackSlotsOffset,
object_size);
}
static inline int SizeOf(Map* map, HeapObject* obj) {
return FeedbackVector::SizeFor(FeedbackVector::cast(obj)->length());
}
};
template <JSWeakCollection::BodyVisitingPolicy body_visiting_policy>
class JSWeakCollection::BodyDescriptorImpl final : public BodyDescriptorBase {
public:
@ -593,6 +623,8 @@ ReturnType BodyDescriptorApply(InstanceType type, T1 p1, T2 p2, T3 p3) {
return Op::template apply<PropertyArray::BodyDescriptor>(p1, p2, p3);
case TRANSITION_ARRAY_TYPE:
return Op::template apply<TransitionArray::BodyDescriptor>(p1, p2, p3);
case FEEDBACK_VECTOR_TYPE:
return Op::template apply<FeedbackVector::BodyDescriptor>(p1, p2, p3);
case JS_OBJECT_TYPE:
case JS_ERROR_TYPE:
case JS_ARGUMENTS_TYPE:

View File

@ -94,6 +94,9 @@ void HeapObject::HeapObjectVerify() {
case FREE_SPACE_TYPE:
FreeSpace::cast(this)->FreeSpaceVerify();
break;
case FEEDBACK_VECTOR_TYPE:
FeedbackVector::cast(this)->FeedbackVectorVerify();
break;
#define VERIFY_TYPED_ARRAY(Type, type, TYPE, ctype, size) \
case FIXED_##TYPE##_ARRAY_TYPE: \
@ -321,6 +324,7 @@ void FreeSpace::FreeSpaceVerify() {
CHECK(IsFreeSpace());
}
void FeedbackVector::FeedbackVectorVerify() { CHECK(IsFeedbackVector()); }
template <class Traits>
void FixedTypedArray<Traits>::FixedTypedArrayVerify() {

View File

@ -3233,6 +3233,10 @@ int HeapObject::SizeFromMap(Map* map) const {
if (instance_type == SMALL_ORDERED_HASH_MAP_TYPE) {
return reinterpret_cast<const SmallOrderedHashMap*>(this)->Size();
}
if (instance_type == FEEDBACK_VECTOR_TYPE) {
return FeedbackVector::SizeFor(
reinterpret_cast<const FeedbackVector*>(this)->length());
}
DCHECK(instance_type == CODE_TYPE);
return reinterpret_cast<const Code*>(this)->CodeSize();
}

View File

@ -95,6 +95,9 @@ void HeapObject::HeapObjectPrint(std::ostream& os) { // NOLINT
case TRANSITION_ARRAY_TYPE:
TransitionArray::cast(this)->TransitionArrayPrint(os);
break;
case FEEDBACK_VECTOR_TYPE:
FeedbackVector::cast(this)->FeedbackVectorPrint(os);
break;
case FREE_SPACE_TYPE:
FreeSpace::cast(this)->FreeSpacePrint(os);
break;
@ -753,7 +756,10 @@ void FeedbackVector::FeedbackVectorPrint(std::ostream& os) { // NOLINT
return;
}
os << "\n Optimized Code: " << Brief(optimized_code());
os << "\n SharedFunctionInfo: " << Brief(shared_function_info());
os << "\n Optimized Code: " << Brief(optimized_code_cell());
os << "\n Invocation Count: " << invocation_count();
os << "\n Profiler Ticks: " << profiler_ticks();
FeedbackMetadataIterator iter(metadata());
while (iter.HasNext()) {

View File

@ -3014,6 +3014,9 @@ VisitorId Map::GetVisitorId(Map* map) {
case PROPERTY_ARRAY_TYPE:
return kVisitPropertyArray;
case FEEDBACK_VECTOR_TYPE:
return kVisitFeedbackVector;
case ODDBALL_TYPE:
return kVisitOddball;
@ -3318,6 +3321,9 @@ void HeapObject::HeapObjectShortPrint(std::ostream& os) { // NOLINT
case PROPERTY_ARRAY_TYPE:
os << "<PropertyArray[" << PropertyArray::cast(this)->length() << "]>";
break;
case FEEDBACK_VECTOR_TYPE:
os << "<FeedbackVector[" << FeedbackVector::cast(this)->length() << "]>";
break;
case FREE_SPACE_TYPE:
os << "<FreeSpace[" << FreeSpace::cast(this)->size() << "]>";
break;

View File

@ -96,7 +96,6 @@
// - OrderedHashMap
// - Context
// - FeedbackMetadata
// - FeedbackVector
// - TemplateList
// - TransitionArray
// - ScopeInfo
@ -161,6 +160,7 @@
// - ModuleInfoEntry
// - PreParsedScopeData
// - WeakCell
// - FeedbackVector
//
// Formats of Object*:
// Smi: [31 bit signed int] 0
@ -367,6 +367,7 @@ const int kStubMinorKeyBits = kSmiValueSize - kStubMajorKeyBits - 1;
V(ASYNC_GENERATOR_REQUEST_TYPE) \
V(FIXED_ARRAY_TYPE) \
V(HASH_TABLE_TYPE) \
V(FEEDBACK_VECTOR_TYPE) \
V(TRANSITION_ARRAY_TYPE) \
V(PROPERTY_ARRAY_TYPE) \
V(SHARED_FUNCTION_INFO_TYPE) \
@ -714,6 +715,7 @@ enum InstanceType : uint8_t {
ASYNC_GENERATOR_REQUEST_TYPE,
FIXED_ARRAY_TYPE,
HASH_TABLE_TYPE,
FEEDBACK_VECTOR_TYPE,
TRANSITION_ARRAY_TYPE,
PROPERTY_ARRAY_TYPE,
SHARED_FUNCTION_INFO_TYPE,
@ -913,7 +915,6 @@ V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
V(STRING_SPLIT_CACHE_SUB_TYPE) \
V(STRING_TABLE_SUB_TYPE) \
V(TEMPLATE_INFO_SUB_TYPE) \
V(FEEDBACK_VECTOR_SUB_TYPE) \
V(FEEDBACK_METADATA_SUB_TYPE) \
V(WEAK_NEW_SPACE_OBJECT_TO_CODE_SUB_TYPE)
@ -5195,7 +5196,7 @@ class JSFunction: public JSObject {
// Completes inobject slack tracking on initial map if it is active.
inline void CompleteInobjectSlackTrackingIfActive();
// [feedback_vector_cell]: Fixed array holding the feedback vector.
// [feedback_vector_cell]: The feedback vector.
DECL_ACCESSORS(feedback_vector_cell, Cell)
enum FeedbackVectorState {

View File

@ -23,6 +23,7 @@ namespace internal {
V(Code) \
V(ConsString) \
V(DataObject) \
V(FeedbackVector) \
V(FixedArray) \
V(FixedDoubleArray) \
V(FixedFloat64Array) \

View File

@ -20,6 +20,10 @@
inline int name() const; \
inline void set_##name(int value);
#define DECL_INT32_ACCESSORS(name) \
inline int32_t name() const; \
inline void set_##name(int32_t value);
#define DECL_ACCESSORS(name, type) \
inline type* name() const; \
inline void set_##name(type* value, \
@ -43,6 +47,12 @@
int holder::name() const { return READ_INT_FIELD(this, offset); } \
void holder::set_##name(int value) { WRITE_INT_FIELD(this, offset, value); }
#define INT32_ACCESSORS(holder, name, offset) \
int32_t holder::name() const { return READ_INT32_FIELD(this, offset); } \
void holder::set_##name(int32_t value) { \
WRITE_INT32_FIELD(this, offset, value); \
}
#define ACCESSORS_CHECKED2(holder, name, type, offset, get_condition, \
set_condition) \
type* holder::name() const { \

View File

@ -6,6 +6,7 @@
#define V8_OBJECTS_SHARED_FUNCTION_INFO_INL_H_
#include "src/heap/heap-inl.h"
#include "src/objects/scope-info.h"
#include "src/objects/shared-function-info.h"
// Has to be the last include (doesn't have include guards):

View File

@ -8,6 +8,7 @@
#include "src/objects/string.h"
#include "src/conversions-inl.h"
#include "src/factory.h"
#include "src/objects/name-inl.h"
#include "src/string-hasher-inl.h"

View File

@ -456,7 +456,7 @@ MaybeHandle<JSObject> CreateLiteral(Isolate* isolate,
Handle<HeapObject> description, int flags) {
Handle<FeedbackVector> vector(closure->feedback_vector(), isolate);
FeedbackSlot literals_slot(FeedbackVector::ToSlot(literals_index));
CHECK(literals_slot.ToInt() < vector->slot_count());
CHECK(literals_slot.ToInt() < vector->length());
Handle<Object> literal_site(vector->Get(literals_slot), isolate);
DeepCopyHints copy_hints =
(flags & AggregateLiteral::kIsShallow) ? kObjectIsShallow : kNoHints;

View File

@ -687,8 +687,8 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
// Load the cache state into r11.
__ SmiToInteger32(rdx, rdx);
__ movp(r11,
FieldOperand(rbx, rdx, times_pointer_size, FixedArray::kHeaderSize));
__ movp(r11, FieldOperand(rbx, rdx, times_pointer_size,
FeedbackVector::kFeedbackSlotsOffset));
// A monomorphic cache hit or an already megamorphic state: invoke the
// function without changing the state.
@ -731,7 +731,8 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
// MegamorphicSentinel is an immortal immovable object (undefined) so no
// write-barrier is needed.
__ bind(&megamorphic);
__ Move(FieldOperand(rbx, rdx, times_pointer_size, FixedArray::kHeaderSize),
__ Move(FieldOperand(rbx, rdx, times_pointer_size,
FeedbackVector::kFeedbackSlotsOffset),
FeedbackVector::MegamorphicSentinel(isolate));
__ jmp(&done);
@ -754,9 +755,10 @@ static void GenerateRecordCallTarget(MacroAssembler* masm) {
__ bind(&done);
// Increment the call count for all function calls.
__ SmiAddConstant(FieldOperand(rbx, rdx, times_pointer_size,
FixedArray::kHeaderSize + kPointerSize),
Smi::FromInt(1));
__ SmiAddConstant(
FieldOperand(rbx, rdx, times_pointer_size,
FeedbackVector::kFeedbackSlotsOffset + kPointerSize),
Smi::FromInt(1));
}
@ -777,8 +779,8 @@ void CallConstructStub::Generate(MacroAssembler* masm) {
Label feedback_register_initialized;
// Put the AllocationSite from the feedback vector into rbx, or undefined.
__ movp(rbx,
FieldOperand(rbx, rdx, times_pointer_size, FixedArray::kHeaderSize));
__ movp(rbx, FieldOperand(rbx, rdx, times_pointer_size,
FeedbackVector::kFeedbackSlotsOffset));
__ CompareRoot(FieldOperand(rbx, 0), Heap::kAllocationSiteMapRootIndex);
__ j(equal, &feedback_register_initialized, Label::kNear);
__ LoadRoot(rbx, Heap::kUndefinedValueRootIndex);

View File

@ -14,7 +14,7 @@ parameter count: 1
bytecode array length: 6
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 34 S> */ B(CreateArrayLiteral), U8(0), U8(4), U8(37),
/* 34 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
/* 50 S> */ B(Return),
]
constant pool: [
@ -34,17 +34,17 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0),
/* 45 S> */ B(CreateArrayLiteral), U8(0), U8(5), U8(37),
/* 45 S> */ B(CreateArrayLiteral), U8(0), U8(1), U8(37),
B(Star), R(2),
B(LdaZero),
B(Star), R(1),
B(Ldar), R(0),
/* 54 E> */ B(StaKeyedPropertySloppy), R(2), R(1), U8(6),
/* 54 E> */ B(StaKeyedPropertySloppy), R(2), R(1), U8(2),
B(LdaSmi), I8(1),
B(Star), R(1),
B(Ldar), R(0),
/* 59 E> */ B(AddSmi), I8(1), U8(4),
B(StaKeyedPropertySloppy), R(2), R(1), U8(6),
/* 59 E> */ B(AddSmi), I8(1), U8(0),
B(StaKeyedPropertySloppy), R(2), R(1), U8(2),
B(Ldar), R(2),
/* 65 S> */ B(Return),
]
@ -63,7 +63,7 @@ parameter count: 1
bytecode array length: 6
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 34 S> */ B(CreateArrayLiteral), U8(0), U8(6), U8(4),
/* 34 S> */ B(CreateArrayLiteral), U8(0), U8(2), U8(4),
/* 61 S> */ B(Return),
]
constant pool: [
@ -83,29 +83,29 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0),
/* 45 S> */ B(CreateArrayLiteral), U8(0), U8(11), U8(4),
/* 45 S> */ B(CreateArrayLiteral), U8(0), U8(7), U8(4),
B(Star), R(2),
B(LdaZero),
B(Star), R(1),
B(CreateArrayLiteral), U8(1), U8(4), U8(37),
B(CreateArrayLiteral), U8(1), U8(0), U8(37),
B(Star), R(4),
B(LdaZero),
B(Star), R(3),
B(Ldar), R(0),
/* 56 E> */ B(StaKeyedPropertySloppy), R(4), R(3), U8(5),
/* 56 E> */ B(StaKeyedPropertySloppy), R(4), R(3), U8(1),
B(Ldar), R(4),
B(StaKeyedPropertySloppy), R(2), R(1), U8(12),
B(StaKeyedPropertySloppy), R(2), R(1), U8(8),
B(LdaSmi), I8(1),
B(Star), R(1),
B(CreateArrayLiteral), U8(2), U8(8), U8(37),
B(CreateArrayLiteral), U8(2), U8(4), U8(37),
B(Star), R(4),
B(LdaZero),
B(Star), R(3),
B(Ldar), R(0),
/* 68 E> */ B(AddSmi), I8(2), U8(7),
B(StaKeyedPropertySloppy), R(4), R(3), U8(9),
/* 68 E> */ B(AddSmi), I8(2), U8(3),
B(StaKeyedPropertySloppy), R(4), R(3), U8(5),
B(Ldar), R(4),
B(StaKeyedPropertySloppy), R(2), R(1), U8(12),
B(StaKeyedPropertySloppy), R(2), R(1), U8(8),
B(Ldar), R(2),
/* 76 S> */ B(Return),
]

View File

@ -783,7 +783,7 @@ bytecodes: [
B(Star), R(0),
/* 2591 S> */ B(LdaConstant), U8(255),
B(Star), R(0),
/* 2601 S> */ B(Wide), B(CreateArrayLiteral), U16(256), U16(4), U8(37),
/* 2601 S> */ B(Wide), B(CreateArrayLiteral), U16(256), U16(0), U8(37),
/* 2618 S> */ B(Return),
]
constant pool: [

View File

@ -73,11 +73,11 @@ bytecodes: [
/* 46 S> */ B(LdaSmi), I8(100),
B(Mov), R(0), R(1),
B(Star), R(0),
/* 52 E> */ B(Add), R(1), U8(4),
/* 52 E> */ B(Add), R(1), U8(0),
B(Star), R(1),
B(LdaSmi), I8(101),
B(Star), R(0),
/* 64 E> */ B(Add), R(1), U8(5),
/* 64 E> */ B(Add), R(1), U8(1),
B(Star), R(0),
/* 86 S> */ B(Return),
]
@ -102,13 +102,13 @@ bytecodes: [
B(Star), R(0),
/* 46 S> */ B(LdaSmi), I8(56),
B(Star), R(0),
/* 59 E> */ B(Sub), R(0), U8(4),
/* 59 E> */ B(Sub), R(0), U8(0),
B(Star), R(1),
B(LdaSmi), I8(57),
B(Star), R(0),
/* 63 E> */ B(Add), R(1), U8(5),
/* 63 E> */ B(Add), R(1), U8(1),
B(Star), R(0),
/* 75 S> */ B(Inc), U8(6),
/* 75 S> */ B(Inc), U8(2),
B(Star), R(0),
/* 89 S> */ B(Return),
]
@ -133,15 +133,15 @@ bytecodes: [
/* 54 S> */ B(LdaSmi), I8(1),
B(Mov), R(0), R(2),
B(Star), R(0),
/* 56 E> */ B(Add), R(2), U8(4),
/* 56 E> */ B(Add), R(2), U8(0),
B(Star), R(2),
B(LdaSmi), I8(2),
B(Star), R(0),
/* 66 E> */ B(Add), R(2), U8(5),
/* 66 E> */ B(Add), R(2), U8(1),
B(Star), R(2),
B(LdaSmi), I8(3),
B(Star), R(0),
/* 76 E> */ B(Add), R(2), U8(6),
/* 76 E> */ B(Add), R(2), U8(2),
B(Star), R(1),
/* 96 S> */ B(Return),
]
@ -166,15 +166,15 @@ bytecodes: [
/* 54 S> */ B(LdaSmi), I8(1),
B(Mov), R(0), R(1),
B(Star), R(0),
/* 56 E> */ B(Add), R(1), U8(4),
/* 56 E> */ B(Add), R(1), U8(0),
B(Star), R(1),
B(LdaSmi), I8(2),
B(Star), R(0),
/* 66 E> */ B(Add), R(1), U8(5),
/* 66 E> */ B(Add), R(1), U8(1),
B(Star), R(1),
B(LdaSmi), I8(3),
B(Star), R(0),
/* 76 E> */ B(Add), R(1), U8(6),
/* 76 E> */ B(Add), R(1), U8(2),
B(Star), R(0),
/* 96 S> */ B(Return),
]
@ -200,30 +200,30 @@ bytecodes: [
/* 54 S> */ B(LdaSmi), I8(1),
B(Mov), R(0), R(2),
B(Star), R(0),
/* 63 E> */ B(Add), R(2), U8(4),
/* 63 E> */ B(Add), R(2), U8(0),
B(Star), R(2),
B(Ldar), R(0),
/* 78 E> */ B(AddSmi), I8(1), U8(5),
/* 78 E> */ B(AddSmi), I8(1), U8(1),
B(Star), R(3),
B(LdaSmi), I8(2),
B(Star), R(1),
/* 83 E> */ B(Mul), R(3), U8(6),
/* 73 E> */ B(Add), R(2), U8(7),
/* 83 E> */ B(Mul), R(3), U8(2),
/* 73 E> */ B(Add), R(2), U8(3),
B(Star), R(2),
B(LdaSmi), I8(3),
B(Star), R(1),
/* 93 E> */ B(Add), R(2), U8(8),
/* 93 E> */ B(Add), R(2), U8(4),
B(Star), R(2),
B(LdaSmi), I8(4),
B(Star), R(0),
/* 103 E> */ B(Add), R(2), U8(9),
/* 103 E> */ B(Add), R(2), U8(5),
B(Star), R(2),
B(LdaSmi), I8(5),
B(Star), R(1),
/* 113 E> */ B(Add), R(2), U8(10),
/* 113 E> */ B(Add), R(2), U8(6),
B(Star), R(2),
B(Ldar), R(1),
/* 123 E> */ B(Add), R(2), U8(11),
/* 123 E> */ B(Add), R(2), U8(7),
/* 127 S> */ B(Return),
]
constant pool: [
@ -246,20 +246,20 @@ bytecodes: [
/* 46 S> */ B(LdaSmi), I8(1),
B(Star), R(1),
B(Ldar), R(0),
/* 55 E> */ B(Add), R(1), U8(4),
/* 55 E> */ B(Add), R(1), U8(0),
B(Star), R(1),
B(Ldar), R(0),
B(ToNumber), R(2), U8(5),
B(ToNumber), R(2), U8(1),
B(Ldar), R(2),
B(Inc), U8(5),
B(Inc), U8(1),
B(Star), R(0),
B(Ldar), R(2),
/* 59 E> */ B(Add), R(1), U8(6),
/* 59 E> */ B(Add), R(1), U8(2),
B(Star), R(1),
B(Ldar), R(0),
B(Inc), U8(7),
B(Inc), U8(3),
B(Star), R(0),
/* 67 E> */ B(Add), R(1), U8(8),
/* 67 E> */ B(Add), R(1), U8(4),
/* 75 S> */ B(Return),
]
constant pool: [

View File

@ -321,11 +321,11 @@ bytecodes: [
B(Star), R(6),
B(Mov), R(context), R(18),
B(Mov), R(context), R(19),
/* 36 S> */ B(CreateArrayLiteral), U8(4), U8(4), U8(37),
/* 36 S> */ B(CreateArrayLiteral), U8(4), U8(0), U8(37),
B(Star), R(20),
B(LdaNamedProperty), R(20), U8(5), U8(5),
B(LdaNamedProperty), R(20), U8(5), U8(1),
B(Star), R(21),
B(CallProperty0), R(21), R(20), U8(7),
B(CallProperty0), R(21), R(20), U8(3),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(4),
@ -337,17 +337,17 @@ bytecodes: [
B(LdaSmi), I8(81),
B(Star), R(20),
B(CallRuntime), U16(Runtime::kAbort), R(20), U8(1),
/* 31 S> */ B(LdaNamedProperty), R(4), U8(7), U8(11),
/* 31 S> */ B(LdaNamedProperty), R(4), U8(7), U8(7),
B(Star), R(20),
B(CallProperty0), R(20), R(4), U8(9),
B(CallProperty0), R(20), R(4), U8(5),
B(Star), R(5),
/* 31 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(5), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(8), U8(13),
B(LdaNamedProperty), R(5), U8(8), U8(9),
B(JumpIfToBooleanTrue), U8(77),
B(LdaNamedProperty), R(5), U8(9), U8(15),
B(LdaNamedProperty), R(5), U8(9), U8(11),
B(Star), R(7),
B(LdaSmi), I8(2),
B(Star), R(6),
@ -387,7 +387,7 @@ bytecodes: [
B(Ldar), R(19),
B(PushContext), R(20),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(17),
B(TestEqualStrict), R(6), U8(13),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
@ -405,15 +405,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(18),
B(LdaZero),
B(TestEqualStrict), R(6), U8(18),
B(TestEqualStrict), R(6), U8(14),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(4), U8(14), U8(19),
B(LdaNamedProperty), R(4), U8(14), U8(15),
B(Star), R(8),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(22),
B(TestEqualStrict), R(6), U8(18),
B(JumpIfFalse), U8(61),
B(Ldar), R(8),
B(TestTypeOf), U8(5),
@ -604,20 +604,20 @@ bytecodes: [
B(Star), R(2),
B(LdaUndefined),
B(Star), R(3),
B(LdaGlobal), U8(9), U8(6),
B(LdaGlobal), U8(9), U8(2),
B(Star), R(17),
/* 56 E> */ B(CallUndefinedReceiver0), R(17), U8(4),
/* 56 E> */ B(CallUndefinedReceiver0), R(17), U8(0),
B(Star), R(15),
B(LdaNamedProperty), R(15), U8(10), U8(12),
B(LdaNamedProperty), R(15), U8(10), U8(8),
B(JumpIfUndefined), U8(17),
B(JumpIfNull), U8(15),
B(Star), R(16),
B(CallProperty0), R(16), R(15), U8(14),
B(CallProperty0), R(16), R(15), U8(10),
B(JumpIfJSReceiver), U8(23),
B(CallRuntime), U16(Runtime::kThrowSymbolAsyncIteratorInvalid), R(0), U8(0),
B(LdaNamedProperty), R(15), U8(11), U8(8),
B(LdaNamedProperty), R(15), U8(11), U8(4),
B(Star), R(16),
B(CallProperty0), R(16), R(15), U8(10),
B(CallProperty0), R(16), R(15), U8(6),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateAsyncFromSyncIterator), R(16), U8(1),
B(Star), R(4),
@ -631,19 +631,19 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kAbort), R(15), U8(1),
B(StackCheck),
B(LdaZero),
B(TestEqualStrict), R(2), U8(20),
B(TestEqualStrict), R(2), U8(16),
B(Mov), R(2), R(15),
B(JumpIfTrue), U8(18),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(15), U8(24),
B(TestEqualStrict), R(15), U8(20),
B(JumpIfTrue), U8(83),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(15), U8(33),
B(TestEqualStrict), R(15), U8(29),
B(JumpIfTrue), U8(167),
B(JumpConstant), U8(24),
B(LdaNamedProperty), R(4), U8(18), U8(18),
B(LdaNamedProperty), R(4), U8(18), U8(14),
B(Star), R(16),
B(CallProperty1), R(16), R(4), R(1), U8(16),
B(CallProperty1), R(16), R(4), R(1), U8(12),
B(Star), R(17),
B(Mov), R(9), R(16),
B(CallJSRuntime), U8(%async_generator_await_uncaught), R(16), U8(2),
@ -667,7 +667,7 @@ bytecodes: [
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(JumpConstant), U8(25),
B(LdaNamedProperty), R(4), U8(19), U8(21),
B(LdaNamedProperty), R(4), U8(19), U8(17),
B(Star), R(3),
B(TestUndetectable),
B(JumpIfFalse), U8(10),
@ -702,11 +702,11 @@ bytecodes: [
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(JumpConstant), U8(26),
B(LdaNamedProperty), R(4), U8(20), U8(25),
B(LdaNamedProperty), R(4), U8(20), U8(21),
B(Star), R(5),
B(TestUndetectable),
B(JumpIfFalse), U8(212),
B(LdaNamedProperty), R(4), U8(19), U8(28),
B(LdaNamedProperty), R(4), U8(19), U8(24),
B(Star), R(6),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
@ -714,7 +714,7 @@ bytecodes: [
B(LdaZero),
B(Star), R(16),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(16), U8(31),
B(TestEqualStrict), R(16), U8(27),
B(JumpIfFalse), U8(106),
B(Ldar), R(6),
B(TestTypeOf), U8(5),
@ -817,10 +817,10 @@ bytecodes: [
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(Jump), U8(2),
B(LdaNamedProperty), R(3), U8(27), U8(34),
B(LdaNamedProperty), R(3), U8(27), U8(30),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(57),
B(LdaNamedProperty), R(3), U8(28), U8(36),
B(LdaNamedProperty), R(3), U8(28), U8(32),
B(Star), R(3),
B(LdaFalse),
B(Star), R(17),
@ -839,14 +839,14 @@ bytecodes: [
B(Star), R(2),
B(Wide), B(JumpLoop), U16(561), I16(0),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(2), U8(38),
B(TestEqualStrict), R(2), U8(34),
B(JumpIfFalse), U8(13),
B(LdaNamedProperty), R(3), U8(28), U8(39),
B(LdaNamedProperty), R(3), U8(28), U8(35),
B(Star), R(12),
B(LdaZero),
B(Star), R(11),
B(Jump), U8(67),
B(LdaNamedProperty), R(3), U8(28), U8(41),
B(LdaNamedProperty), R(3), U8(28), U8(37),
B(Star), R(8),
B(LdaUndefined),
B(Star), R(12),

View File

@ -18,7 +18,7 @@ bytecodes: [
B(Star), R(0),
/* 45 S> */ B(JumpIfToBooleanTrue), U8(8),
B(LdaZero),
/* 56 E> */ B(TestLessThan), R(0), U8(4),
/* 56 E> */ B(TestLessThan), R(0), U8(0),
B(JumpIfFalse), U8(5),
/* 63 S> */ B(LdaSmi), I8(1),
/* 72 S> */ B(Return),
@ -43,7 +43,7 @@ bytecodes: [
B(Star), R(0),
/* 45 S> */ B(JumpIfToBooleanFalse), U8(11),
B(LdaZero),
/* 56 E> */ B(TestLessThan), R(0), U8(4),
/* 56 E> */ B(TestLessThan), R(0), U8(0),
B(JumpIfFalse), U8(5),
/* 63 S> */ B(LdaSmi), I8(1),
/* 72 S> */ B(Return),
@ -68,7 +68,7 @@ bytecodes: [
B(Star), R(0),
/* 45 S> */ B(JumpIfToBooleanTrue), U8(8),
B(LdaZero),
/* 57 E> */ B(TestLessThan), R(0), U8(4),
/* 57 E> */ B(TestLessThan), R(0), U8(0),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(2),
B(Jump), U8(4),

View File

@ -69,21 +69,21 @@ bytecodes: [
/* 53 S> */ B(LdaSmi), I8(1),
B(Star), R(1),
/* 65 S> */ B(LdaSmi), I8(10),
/* 65 E> */ B(TestLessThan), R(0), U8(4),
/* 65 E> */ B(TestLessThan), R(0), U8(0),
B(JumpIfFalse), U8(38),
/* 56 E> */ B(StackCheck),
/* 75 S> */ B(Ldar), R(1),
/* 81 E> */ B(MulSmi), I8(12), U8(5),
/* 81 E> */ B(MulSmi), I8(12), U8(1),
B(Star), R(1),
/* 89 S> */ B(Ldar), R(0),
/* 95 E> */ B(AddSmi), I8(1), U8(6),
/* 95 E> */ B(AddSmi), I8(1), U8(2),
B(Star), R(0),
/* 102 S> */ B(LdaSmi), I8(3),
/* 108 E> */ B(TestEqual), R(0), U8(7),
/* 108 E> */ B(TestEqual), R(0), U8(3),
B(JumpIfFalse), U8(4),
/* 114 S> */ B(Jump), U8(11),
/* 126 S> */ B(LdaSmi), I8(4),
/* 132 E> */ B(TestEqual), R(0), U8(8),
/* 132 E> */ B(TestEqual), R(0), U8(4),
B(JumpIfFalse), U8(4),
/* 138 S> */ B(Jump), U8(5),
B(JumpLoop), U8(40), I8(0),
@ -117,27 +117,27 @@ bytecodes: [
B(Star), R(0),
/* 45 E> */ B(StackCheck),
/* 62 S> */ B(LdaZero),
/* 68 E> */ B(TestLessThan), R(0), U8(4),
/* 68 E> */ B(TestLessThan), R(0), U8(0),
B(JumpIfFalse), U8(4),
/* 73 S> */ B(Jump), U8(45),
/* 85 S> */ B(LdaSmi), I8(3),
/* 91 E> */ B(TestEqual), R(0), U8(5),
/* 91 E> */ B(TestEqual), R(0), U8(1),
B(JumpIfFalse), U8(4),
/* 97 S> */ B(Jump), U8(39),
/* 106 S> */ B(LdaSmi), I8(4),
/* 112 E> */ B(TestEqual), R(0), U8(6),
/* 112 E> */ B(TestEqual), R(0), U8(2),
B(JumpIfFalse), U8(4),
/* 118 S> */ B(Jump), U8(30),
/* 127 S> */ B(LdaSmi), I8(10),
/* 133 E> */ B(TestEqual), R(0), U8(7),
/* 133 E> */ B(TestEqual), R(0), U8(3),
B(JumpIfFalse), U8(4),
/* 140 S> */ B(Jump), U8(18),
/* 152 S> */ B(LdaSmi), I8(5),
/* 158 E> */ B(TestEqual), R(0), U8(8),
/* 158 E> */ B(TestEqual), R(0), U8(4),
B(JumpIfFalse), U8(4),
/* 164 S> */ B(Jump), U8(12),
/* 173 S> */ B(Ldar), R(0),
/* 179 E> */ B(AddSmi), I8(1), U8(9),
/* 179 E> */ B(AddSmi), I8(1), U8(5),
B(Star), R(0),
B(JumpLoop), U8(52), I8(0),
/* 186 S> */ B(Ldar), R(0),
@ -170,19 +170,19 @@ bytecodes: [
B(Star), R(0),
/* 45 E> */ B(StackCheck),
/* 71 S> */ B(LdaSmi), I8(3),
/* 71 E> */ B(TestLessThan), R(0), U8(4),
/* 71 E> */ B(TestLessThan), R(0), U8(0),
B(JumpIfFalse), U8(22),
/* 62 E> */ B(StackCheck),
/* 82 S> */ B(LdaSmi), I8(2),
/* 88 E> */ B(TestEqual), R(0), U8(5),
/* 88 E> */ B(TestEqual), R(0), U8(1),
B(JumpIfFalse), U8(4),
/* 94 S> */ B(Jump), U8(12),
/* 105 S> */ B(Ldar), R(0),
/* 111 E> */ B(AddSmi), I8(1), U8(6),
/* 111 E> */ B(AddSmi), I8(1), U8(2),
B(Star), R(0),
B(JumpLoop), U8(24), I8(1),
/* 122 S> */ B(Ldar), R(0),
/* 128 E> */ B(AddSmi), I8(1), U8(7),
/* 128 E> */ B(AddSmi), I8(1), U8(3),
B(Star), R(0),
/* 135 S> */ B(Jump), U8(2),
/* 144 S> */ B(Ldar), R(0),
@ -216,10 +216,10 @@ bytecodes: [
B(JumpIfToBooleanFalse), U8(20),
/* 57 E> */ B(StackCheck),
/* 71 S> */ B(Ldar), R(1),
/* 77 E> */ B(MulSmi), I8(12), U8(4),
/* 77 E> */ B(MulSmi), I8(12), U8(0),
B(Star), R(1),
/* 85 S> */ B(Ldar), R(0),
/* 91 E> */ B(SubSmi), I8(1), U8(5),
/* 91 E> */ B(SubSmi), I8(1), U8(1),
B(Star), R(0),
B(JumpLoop), U8(19), I8(0),
/* 98 S> */ B(Ldar), R(1),
@ -252,21 +252,21 @@ bytecodes: [
B(Star), R(1),
/* 56 E> */ B(StackCheck),
/* 63 S> */ B(Ldar), R(1),
/* 69 E> */ B(MulSmi), I8(10), U8(4),
/* 69 E> */ B(MulSmi), I8(10), U8(0),
B(Star), R(1),
/* 77 S> */ B(LdaSmi), I8(5),
/* 83 E> */ B(TestEqual), R(0), U8(5),
/* 83 E> */ B(TestEqual), R(0), U8(1),
B(JumpIfFalse), U8(4),
/* 89 S> */ B(Jump), U8(28),
/* 98 S> */ B(LdaSmi), I8(6),
/* 104 E> */ B(TestEqual), R(0), U8(6),
/* 104 E> */ B(TestEqual), R(0), U8(2),
B(JumpIfFalse), U8(4),
/* 110 S> */ B(Jump), U8(9),
/* 122 S> */ B(Ldar), R(0),
/* 128 E> */ B(AddSmi), I8(1), U8(7),
/* 128 E> */ B(AddSmi), I8(1), U8(3),
B(Star), R(0),
/* 144 S> */ B(LdaSmi), I8(10),
/* 144 E> */ B(TestLessThan), R(0), U8(8),
/* 144 E> */ B(TestLessThan), R(0), U8(4),
B(JumpIfFalse), U8(5),
B(JumpLoop), U8(40), I8(0),
/* 151 S> */ B(Ldar), R(1),
@ -298,10 +298,10 @@ bytecodes: [
B(Star), R(1),
/* 57 E> */ B(StackCheck),
/* 64 S> */ B(Ldar), R(1),
/* 70 E> */ B(MulSmi), I8(12), U8(4),
/* 70 E> */ B(MulSmi), I8(12), U8(0),
B(Star), R(1),
/* 78 S> */ B(Ldar), R(0),
/* 84 E> */ B(SubSmi), I8(1), U8(5),
/* 84 E> */ B(SubSmi), I8(1), U8(1),
B(Star), R(0),
/* 98 S> */ B(JumpIfToBooleanFalse), U8(5),
B(JumpLoop), U8(17), I8(0),
@ -334,17 +334,17 @@ bytecodes: [
/* 53 S> */ B(LdaSmi), I8(1),
B(Star), R(1),
/* 56 E> */ B(StackCheck),
/* 69 S> */ B(MulSmi), I8(10), U8(4),
/* 69 S> */ B(MulSmi), I8(10), U8(0),
B(Star), R(1),
/* 77 S> */ B(LdaSmi), I8(5),
/* 83 E> */ B(TestEqual), R(0), U8(5),
/* 83 E> */ B(TestEqual), R(0), U8(1),
B(JumpIfFalse), U8(4),
/* 89 S> */ B(Jump), U8(18),
/* 98 S> */ B(Ldar), R(0),
/* 104 E> */ B(AddSmi), I8(1), U8(6),
/* 104 E> */ B(AddSmi), I8(1), U8(2),
B(Star), R(0),
/* 111 S> */ B(LdaSmi), I8(6),
/* 117 E> */ B(TestEqual), R(0), U8(7),
/* 117 E> */ B(TestEqual), R(0), U8(3),
B(JumpIfFalse), U8(4),
/* 123 S> */ B(Jump), U8(2),
/* 150 S> */ B(Ldar), R(1),
@ -377,17 +377,17 @@ bytecodes: [
B(Star), R(1),
/* 56 E> */ B(StackCheck),
/* 63 S> */ B(Ldar), R(1),
/* 69 E> */ B(MulSmi), I8(10), U8(4),
/* 69 E> */ B(MulSmi), I8(10), U8(0),
B(Star), R(1),
/* 77 S> */ B(LdaSmi), I8(5),
/* 83 E> */ B(TestEqual), R(0), U8(5),
/* 83 E> */ B(TestEqual), R(0), U8(1),
B(JumpIfFalse), U8(4),
/* 89 S> */ B(Jump), U8(21),
/* 98 S> */ B(Ldar), R(0),
/* 104 E> */ B(AddSmi), I8(1), U8(6),
/* 104 E> */ B(AddSmi), I8(1), U8(2),
B(Star), R(0),
/* 111 S> */ B(LdaSmi), I8(6),
/* 117 E> */ B(TestEqual), R(0), U8(7),
/* 117 E> */ B(TestEqual), R(0), U8(3),
B(JumpIfFalse), U8(4),
/* 123 S> */ B(Jump), U8(2),
B(JumpLoop), U8(33), I8(0),
@ -417,15 +417,15 @@ bytecodes: [
B(Star), R(0),
/* 45 E> */ B(StackCheck),
/* 58 S> */ B(LdaSmi), I8(1),
/* 64 E> */ B(TestEqual), R(0), U8(4),
/* 64 E> */ B(TestEqual), R(0), U8(0),
B(JumpIfFalse), U8(4),
/* 70 S> */ B(Jump), U8(21),
/* 79 S> */ B(LdaSmi), I8(2),
/* 85 E> */ B(TestEqual), R(0), U8(5),
/* 85 E> */ B(TestEqual), R(0), U8(1),
B(JumpIfFalse), U8(4),
/* 91 S> */ B(Jump), U8(9),
/* 103 S> */ B(Ldar), R(0),
/* 109 E> */ B(AddSmi), I8(1), U8(6),
/* 109 E> */ B(AddSmi), I8(1), U8(2),
B(Star), R(0),
B(JumpLoop), U8(26), I8(0),
B(LdaUndefined),
@ -453,15 +453,15 @@ bytecodes: [
B(Star), R(0),
/* 34 E> */ B(StackCheck),
/* 56 S> */ B(LdaSmi), I8(1),
/* 62 E> */ B(TestEqual), R(0), U8(4),
/* 62 E> */ B(TestEqual), R(0), U8(0),
B(JumpIfFalse), U8(4),
/* 68 S> */ B(Jump), U8(21),
/* 77 S> */ B(LdaSmi), I8(2),
/* 83 E> */ B(TestEqual), R(0), U8(5),
/* 83 E> */ B(TestEqual), R(0), U8(1),
B(JumpIfFalse), U8(4),
/* 89 S> */ B(Jump), U8(9),
/* 101 S> */ B(Ldar), R(0),
/* 107 E> */ B(AddSmi), I8(1), U8(6),
/* 107 E> */ B(AddSmi), I8(1), U8(2),
B(Star), R(0),
B(JumpLoop), U8(26), I8(0),
B(LdaUndefined),
@ -489,15 +489,15 @@ bytecodes: [
B(Star), R(0),
/* 45 E> */ B(StackCheck),
/* 68 S> */ B(LdaSmi), I8(1),
/* 74 E> */ B(TestEqual), R(0), U8(5),
/* 74 E> */ B(TestEqual), R(0), U8(1),
B(JumpIfFalse), U8(4),
/* 80 S> */ B(Jump), U8(21),
/* 89 S> */ B(LdaSmi), I8(2),
/* 95 E> */ B(TestEqual), R(0), U8(6),
/* 95 E> */ B(TestEqual), R(0), U8(2),
B(JumpIfFalse), U8(4),
/* 101 S> */ B(Jump), U8(2),
/* 55 S> */ B(Ldar), R(0),
/* 59 E> */ B(AddSmi), I8(1), U8(4),
/* 59 E> */ B(AddSmi), I8(1), U8(0),
B(Star), R(0),
B(JumpLoop), U8(26), I8(0),
B(LdaUndefined),
@ -524,15 +524,15 @@ bytecodes: [
B(Star), R(0),
/* 34 E> */ B(StackCheck),
/* 66 S> */ B(LdaSmi), I8(1),
/* 72 E> */ B(TestEqual), R(0), U8(5),
/* 72 E> */ B(TestEqual), R(0), U8(1),
B(JumpIfFalse), U8(4),
/* 78 S> */ B(Jump), U8(21),
/* 87 S> */ B(LdaSmi), I8(2),
/* 93 E> */ B(TestEqual), R(0), U8(6),
/* 93 E> */ B(TestEqual), R(0), U8(2),
B(JumpIfFalse), U8(4),
/* 99 S> */ B(Jump), U8(2),
/* 53 S> */ B(Ldar), R(0),
/* 57 E> */ B(AddSmi), I8(1), U8(4),
/* 57 E> */ B(AddSmi), I8(1), U8(0),
B(Star), R(0),
B(JumpLoop), U8(26), I8(0),
B(LdaUndefined),
@ -561,15 +561,15 @@ bytecodes: [
/* 58 S> */ B(LdaZero),
B(Star), R(1),
/* 63 S> */ B(LdaSmi), I8(100),
/* 63 E> */ B(TestLessThan), R(1), U8(4),
/* 63 E> */ B(TestLessThan), R(1), U8(0),
B(JumpIfFalse), U8(22),
/* 45 E> */ B(StackCheck),
/* 85 S> */ B(Ldar), R(0),
/* 91 E> */ B(AddSmi), I8(1), U8(6),
/* 91 E> */ B(AddSmi), I8(1), U8(2),
B(Star), R(0),
/* 98 S> */ B(Jump), U8(2),
/* 72 S> */ B(Ldar), R(1),
/* 76 E> */ B(AddSmi), I8(1), U8(5),
/* 76 E> */ B(AddSmi), I8(1), U8(1),
B(Star), R(1),
B(JumpLoop), U8(24), I8(0),
B(LdaUndefined),
@ -601,10 +601,10 @@ bytecodes: [
B(JumpIfToBooleanFalse), U8(19),
/* 45 E> */ B(StackCheck),
/* 74 S> */ B(Ldar), R(0),
/* 80 E> */ B(MulSmi), I8(12), U8(5),
/* 80 E> */ B(MulSmi), I8(12), U8(1),
B(Star), R(0),
/* 67 S> */ B(Ldar), R(1),
B(Dec), U8(4),
B(Dec), U8(0),
B(Star), R(1),
B(JumpLoop), U8(18), I8(0),
/* 88 S> */ B(Ldar), R(0),
@ -660,14 +660,14 @@ bytecodes: [
B(Star), R(1),
/* 45 E> */ B(StackCheck),
/* 76 S> */ B(Ldar), R(0),
/* 82 E> */ B(AddSmi), I8(1), U8(5),
/* 82 E> */ B(AddSmi), I8(1), U8(1),
B(Star), R(0),
/* 89 S> */ B(LdaSmi), I8(20),
/* 95 E> */ B(TestEqual), R(0), U8(6),
/* 95 E> */ B(TestEqual), R(0), U8(2),
B(JumpIfFalse), U8(4),
/* 102 S> */ B(Jump), U8(11),
/* 69 S> */ B(Ldar), R(1),
B(Inc), U8(4),
B(Inc), U8(0),
B(Star), R(1),
B(JumpLoop), U8(23), I8(0),
/* 112 S> */ B(Ldar), R(0),
@ -705,7 +705,7 @@ bytecodes: [
B(PushContext), R(3),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(1), U8(4), U8(2),
B(CreateClosure), U8(1), U8(0), U8(2),
B(Star), R(0),
/* 73 S> */ B(LdaSmi), I8(1),
/* 73 E> */ B(StaCurrentContextSlot), U8(4),
@ -715,7 +715,7 @@ bytecodes: [
/* 113 S> */ B(PopContext), R(3),
B(Jump), U8(10),
/* 126 S> */ B(LdaCurrentContextSlot), U8(4),
B(Inc), U8(5),
B(Inc), U8(1),
/* 127 E> */ B(StaCurrentContextSlot), U8(4),
B(PopContext), R(3),
B(JumpLoop), U8(43), I8(0),

View File

@ -22,7 +22,7 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaZero),
B(Star), R(0),
/* 62 S> */ B(AddSmi), I8(1), U8(4),
/* 62 S> */ B(AddSmi), I8(1), U8(0),
B(Star), R(0),
/* 69 S> */ B(Jump), U8(2),
/* 97 S> */ B(Ldar), R(0),
@ -56,31 +56,31 @@ bytecodes: [
/* 71 S> */ B(LdaZero),
B(Star), R(1),
/* 76 S> */ B(LdaSmi), I8(10),
/* 76 E> */ B(TestLessThan), R(1), U8(4),
/* 76 E> */ B(TestLessThan), R(1), U8(0),
B(JumpIfFalse), U8(54),
/* 58 E> */ B(StackCheck),
/* 106 S> */ B(LdaZero),
B(Star), R(2),
/* 111 S> */ B(LdaSmi), I8(3),
/* 111 E> */ B(TestLessThan), R(2), U8(6),
/* 111 E> */ B(TestLessThan), R(2), U8(2),
B(JumpIfFalse), U8(34),
/* 93 E> */ B(StackCheck),
/* 129 S> */ B(Ldar), R(0),
B(Inc), U8(8),
B(Inc), U8(4),
B(Star), R(0),
/* 142 S> */ B(Ldar), R(2),
/* 148 E> */ B(Add), R(1), U8(9),
/* 148 E> */ B(Add), R(1), U8(5),
B(Star), R(3),
B(LdaSmi), I8(12),
/* 152 E> */ B(TestEqual), R(3), U8(10),
/* 152 E> */ B(TestEqual), R(3), U8(6),
B(JumpIfFalse), U8(4),
/* 161 S> */ B(Jump), U8(20),
/* 118 S> */ B(Ldar), R(2),
B(Inc), U8(7),
B(Inc), U8(3),
B(Star), R(2),
B(JumpLoop), U8(36), I8(1),
/* 84 S> */ B(Ldar), R(1),
B(Inc), U8(5),
B(Inc), U8(1),
B(Star), R(1),
B(JumpLoop), U8(56), I8(0),
/* 188 S> */ B(Ldar), R(0),
@ -109,7 +109,7 @@ bytecodes: [
B(PushContext), R(2),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(1), U8(4), U8(2),
B(CreateClosure), U8(1), U8(0), U8(2),
B(Star), R(0),
/* 53 S> */ B(LdaSmi), I8(10),
/* 53 E> */ B(StaCurrentContextSlot), U8(4),
@ -156,7 +156,7 @@ bytecodes: [
B(PushContext), R(3),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(1), U8(4), U8(2),
B(CreateClosure), U8(1), U8(0), U8(2),
B(Star), R(0),
/* 76 S> */ B(LdaSmi), I8(2),
/* 76 E> */ B(StaCurrentContextSlot), U8(4),

View File

@ -14,13 +14,13 @@ parameter count: 1
bytecode array length: 25
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 34 S> */ B(LdaGlobal), U8(0), U8(6),
/* 34 S> */ B(LdaGlobal), U8(0), U8(2),
B(Star), R(1),
/* 39 E> */ B(LdaNamedProperty), R(1), U8(1), U8(8),
/* 39 E> */ B(LdaNamedProperty), R(1), U8(1), U8(4),
B(Star), R(0),
B(CreateArrayLiteral), U8(2), U8(10), U8(37),
B(CreateArrayLiteral), U8(2), U8(6), U8(37),
B(Star), R(2),
/* 39 E> */ B(CallWithSpread), R(0), R(1), U8(2), U8(4),
/* 39 E> */ B(CallWithSpread), R(0), R(1), U8(2), U8(0),
B(LdaUndefined),
/* 58 S> */ B(Return),
]
@ -41,15 +41,15 @@ parameter count: 1
bytecode array length: 28
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 34 S> */ B(LdaGlobal), U8(0), U8(6),
/* 34 S> */ B(LdaGlobal), U8(0), U8(2),
B(Star), R(1),
/* 39 E> */ B(LdaNamedProperty), R(1), U8(1), U8(8),
/* 39 E> */ B(LdaNamedProperty), R(1), U8(1), U8(4),
B(Star), R(0),
B(LdaZero),
B(Star), R(2),
B(CreateArrayLiteral), U8(2), U8(10), U8(37),
B(CreateArrayLiteral), U8(2), U8(6), U8(37),
B(Star), R(3),
/* 39 E> */ B(CallWithSpread), R(0), R(1), U8(3), U8(4),
/* 39 E> */ B(CallWithSpread), R(0), R(1), U8(3), U8(0),
B(LdaUndefined),
/* 61 S> */ B(Return),
]
@ -72,21 +72,21 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 34 S> */ B(LdaUndefined),
B(Star), R(1),
/* 34 E> */ B(LdaGlobal), U8(0), U8(4),
/* 34 E> */ B(LdaGlobal), U8(0), U8(0),
B(Star), R(0),
B(LdaNamedProperty), R(0), U8(1), U8(6),
B(LdaNamedProperty), R(0), U8(1), U8(2),
B(Star), R(2),
B(LdaUndefined),
B(Star), R(4),
B(CreateArrayLiteral), U8(2), U8(8), U8(37),
B(CreateArrayLiteral), U8(2), U8(4), U8(37),
B(Star), R(5),
B(LdaUndefined),
B(Star), R(6),
B(CreateArrayLiteral), U8(3), U8(9), U8(37),
B(CreateArrayLiteral), U8(3), U8(5), U8(37),
B(Star), R(7),
B(CallJSRuntime), U8(%spread_iterable), R(6), U8(2),
B(Star), R(6),
B(CreateArrayLiteral), U8(4), U8(10), U8(37),
B(CreateArrayLiteral), U8(4), U8(6), U8(37),
B(Star), R(7),
B(CallJSRuntime), U8(%spread_arguments), R(4), U8(4),
B(Star), R(4),

View File

@ -17,9 +17,9 @@ parameter count: 1
bytecode array length: 10
bytecodes: [
/* 27 E> */ B(StackCheck),
/* 32 S> */ B(LdaGlobal), U8(0), U8(6),
/* 32 S> */ B(LdaGlobal), U8(0), U8(2),
B(Star), R(0),
/* 39 E> */ B(CallUndefinedReceiver0), R(0), U8(4),
/* 39 E> */ B(CallUndefinedReceiver0), R(0), U8(0),
/* 43 S> */ B(Return),
]
constant pool: [
@ -39,7 +39,7 @@ parameter count: 1
bytecode array length: 24
bytecodes: [
/* 34 E> */ B(StackCheck),
/* 39 S> */ B(LdaGlobal), U8(0), U8(6),
/* 39 S> */ B(LdaGlobal), U8(0), U8(2),
B(Star), R(0),
B(LdaSmi), I8(1),
B(Star), R(1),
@ -47,7 +47,7 @@ bytecodes: [
B(Star), R(2),
B(LdaSmi), I8(3),
B(Star), R(3),
/* 46 E> */ B(CallUndefinedReceiver), R(0), R(1), U8(3), U8(4),
/* 46 E> */ B(CallUndefinedReceiver), R(0), R(1), U8(3), U8(0),
/* 57 S> */ B(Return),
]
constant pool: [

View File

@ -22,9 +22,9 @@ bytecodes: [
B(Ldar), R(new_target),
B(StaCurrentContextSlot), U8(5),
/* 30 E> */ B(StackCheck),
/* 34 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 34 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
/* 36 E> */ B(StaLookupSlot), U8(1), U8(0),
/* 52 S> */ B(LdaLookupGlobalSlot), U8(2), U8(7), U8(1),
/* 52 S> */ B(LdaLookupGlobalSlot), U8(2), U8(3), U8(1),
B(Star), R(1),
B(LdaConstant), U8(3),
B(Star), R(2),
@ -39,10 +39,10 @@ bytecodes: [
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(3), U8(6),
B(Star), R(1),
/* 52 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(5),
/* 62 S> */ B(LdaLookupGlobalSlot), U8(1), U8(11), U8(1),
/* 52 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(1),
/* 62 S> */ B(LdaLookupGlobalSlot), U8(1), U8(7), U8(1),
B(Star), R(1),
/* 69 E> */ B(CallUndefinedReceiver0), R(1), U8(9),
/* 69 E> */ B(CallUndefinedReceiver0), R(1), U8(5),
/* 73 S> */ B(Return),
]
constant pool: [

View File

@ -17,9 +17,9 @@ parameter count: 1
bytecode array length: 12
bytecodes: [
/* 45 E> */ B(StackCheck),
/* 50 S> */ B(LdaGlobal), U8(0), U8(6),
/* 50 S> */ B(LdaGlobal), U8(0), U8(2),
B(Star), R(0),
/* 57 E> */ B(Construct), R(0), R(0), U8(0), U8(4),
/* 57 E> */ B(Construct), R(0), R(0), U8(0), U8(0),
/* 67 S> */ B(Return),
]
constant pool: [
@ -39,12 +39,12 @@ parameter count: 1
bytecode array length: 18
bytecodes: [
/* 58 E> */ B(StackCheck),
/* 63 S> */ B(LdaGlobal), U8(0), U8(6),
/* 63 S> */ B(LdaGlobal), U8(0), U8(2),
B(Star), R(0),
B(LdaSmi), I8(3),
B(Star), R(1),
B(Ldar), R(0),
/* 70 E> */ B(Construct), R(0), R(1), U8(1), U8(4),
/* 70 E> */ B(Construct), R(0), R(1), U8(1), U8(0),
/* 81 S> */ B(Return),
]
constant pool: [
@ -69,7 +69,7 @@ parameter count: 1
bytecode array length: 26
bytecodes: [
/* 100 E> */ B(StackCheck),
/* 105 S> */ B(LdaGlobal), U8(0), U8(6),
/* 105 S> */ B(LdaGlobal), U8(0), U8(2),
B(Star), R(0),
B(LdaSmi), I8(3),
B(Star), R(1),
@ -78,7 +78,7 @@ bytecodes: [
B(LdaSmi), I8(5),
B(Star), R(3),
B(Ldar), R(0),
/* 112 E> */ B(Construct), R(0), R(1), U8(3), U8(4),
/* 112 E> */ B(Construct), R(0), R(1), U8(3), U8(0),
/* 129 S> */ B(Return),
]
constant pool: [

View File

@ -77,7 +77,7 @@ bytecodes: [
/* 10 E> */ B(StackCheck),
/* 15 S> */ B(LdaUndefined),
B(Star), R(0),
B(CreateArrayLiteral), U8(0), U8(4), U8(37),
B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(Star), R(1),
B(CallJSRuntime), U8(%spread_iterable), R(0), U8(2),
/* 43 S> */ B(Return),

View File

@ -27,15 +27,15 @@ bytecodes: [
B(Mov), R(closure), R(0),
/* 99 E> */ B(StackCheck),
/* 104 S> */ B(LdaConstant), U8(0),
/* 111 E> */ B(LdaKeyedProperty), R(closure), U8(6),
/* 111 E> */ B(LdaKeyedProperty), R(closure), U8(2),
B(Star), R(4),
B(LdaConstant), U8(1),
B(Star), R(5),
B(Mov), R(this), R(3),
/* 117 E> */ B(CallRuntime), U16(Runtime::kLoadFromSuper), R(3), U8(3),
B(Star), R(1),
/* 117 E> */ B(CallAnyReceiver), R(1), R(this), U8(1), U8(4),
/* 126 E> */ B(AddSmi), I8(1), U8(10),
/* 117 E> */ B(CallAnyReceiver), R(1), R(this), U8(1), U8(0),
/* 126 E> */ B(AddSmi), I8(1), U8(6),
/* 130 S> */ B(Return),
]
constant pool: [
@ -67,7 +67,7 @@ bytecodes: [
B(Mov), R(closure), R(0),
/* 125 E> */ B(StackCheck),
/* 130 S> */ B(LdaConstant), U8(0),
/* 130 E> */ B(LdaKeyedProperty), R(closure), U8(4),
/* 130 E> */ B(LdaKeyedProperty), R(closure), U8(0),
B(Star), R(2),
B(LdaConstant), U8(1),
B(Star), R(3),
@ -76,7 +76,7 @@ bytecodes: [
B(Mov), R(this), R(1),
/* 138 E> */ B(CallRuntime), U16(Runtime::kStoreToSuper_Strict), R(1), U8(4),
/* 143 S> */ B(LdaConstant), U8(0),
/* 150 E> */ B(LdaKeyedProperty), R(closure), U8(6),
/* 150 E> */ B(LdaKeyedProperty), R(closure), U8(2),
B(Star), R(2),
B(LdaConstant), U8(1),
B(Star), R(3),
@ -117,7 +117,7 @@ bytecodes: [
B(LdaSmi), I8(1),
B(Star), R(3),
B(Ldar), R(0),
/* 118 E> */ B(Construct), R(2), R(3), U8(1), U8(4),
/* 118 E> */ B(Construct), R(2), R(3), U8(1), U8(0),
B(Star), R(2),
B(Ldar), R(this),
/* 118 E> */ B(ThrowSuperAlreadyCalledIfNotHole),
@ -125,7 +125,7 @@ bytecodes: [
/* 128 S> */ B(Ldar), R(this),
B(ThrowSuperNotCalledIfHole),
B(LdaSmi), I8(2),
/* 136 E> */ B(StaNamedPropertyStrict), R(2), U8(0), U8(6),
/* 136 E> */ B(StaNamedPropertyStrict), R(2), U8(0), U8(2),
B(Ldar), R(this),
B(ThrowSuperNotCalledIfHole),
/* 141 S> */ B(Return),
@ -160,7 +160,7 @@ bytecodes: [
/* 117 S> */ B(Ldar), R(1),
B(GetSuperConstructor), R(2),
B(Ldar), R(0),
/* 117 E> */ B(Construct), R(2), R(0), U8(0), U8(4),
/* 117 E> */ B(Construct), R(2), R(0), U8(0), U8(0),
B(Star), R(2),
B(Ldar), R(this),
/* 117 E> */ B(ThrowSuperAlreadyCalledIfNotHole),
@ -168,7 +168,7 @@ bytecodes: [
/* 126 S> */ B(Ldar), R(this),
B(ThrowSuperNotCalledIfHole),
B(LdaSmi), I8(2),
/* 134 E> */ B(StaNamedPropertyStrict), R(2), U8(0), U8(6),
/* 134 E> */ B(StaNamedPropertyStrict), R(2), U8(0), U8(2),
B(Ldar), R(this),
B(ThrowSuperNotCalledIfHole),
/* 139 S> */ B(Return),

View File

@ -17,7 +17,7 @@ parameter count: 1
bytecode array length: 67
bytecodes: [
/* 30 E> */ B(StackCheck),
B(CreateClosure), U8(0), U8(4), U8(2),
B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(2),
B(LdaTheHole),
B(Star), R(3),
@ -30,12 +30,12 @@ bytecodes: [
B(Star), R(3),
B(LdaConstant), U8(1),
B(Star), R(5),
B(CreateClosure), U8(2), U8(5), U8(2),
B(CreateClosure), U8(2), U8(1), U8(2),
B(Star), R(6),
B(LdaSmi), I8(2),
B(Star), R(7),
B(Ldar), R(6),
B(StaDataPropertyInLiteral), R(3), R(5), U8(1), U8(6),
B(StaDataPropertyInLiteral), R(3), R(5), U8(1), U8(2),
B(CallRuntime), U16(Runtime::kInstallClassNameAccessor), R(2), U8(1),
B(CallRuntime), U16(Runtime::kToFastProperties), R(2), U8(1),
B(Star), R(0),
@ -63,7 +63,7 @@ parameter count: 1
bytecode array length: 67
bytecodes: [
/* 30 E> */ B(StackCheck),
B(CreateClosure), U8(0), U8(4), U8(2),
B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(2),
B(LdaTheHole),
B(Star), R(3),
@ -76,12 +76,12 @@ bytecodes: [
B(Star), R(3),
B(LdaConstant), U8(1),
B(Star), R(5),
B(CreateClosure), U8(2), U8(5), U8(2),
B(CreateClosure), U8(2), U8(1), U8(2),
B(Star), R(6),
B(LdaSmi), I8(2),
B(Star), R(7),
B(Ldar), R(6),
B(StaDataPropertyInLiteral), R(3), R(5), U8(1), U8(6),
B(StaDataPropertyInLiteral), R(3), R(5), U8(1), U8(2),
B(CallRuntime), U16(Runtime::kInstallClassNameAccessor), R(2), U8(1),
B(CallRuntime), U16(Runtime::kToFastProperties), R(2), U8(1),
B(Star), R(0),
@ -117,7 +117,7 @@ bytecodes: [
/* 43 E> */ B(StaCurrentContextSlot), U8(4),
/* 57 S> */ B(LdaConstant), U8(1),
/* 57 E> */ B(StaCurrentContextSlot), U8(5),
B(CreateClosure), U8(2), U8(4), U8(2),
B(CreateClosure), U8(2), U8(0), U8(2),
B(Star), R(3),
B(LdaTheHole),
B(Star), R(4),
@ -130,12 +130,12 @@ bytecodes: [
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
/* 75 E> */ B(ToName), R(6),
B(CreateClosure), U8(3), U8(5), U8(2),
B(CreateClosure), U8(3), U8(1), U8(2),
B(Star), R(7),
B(LdaSmi), I8(2),
B(Star), R(8),
B(Ldar), R(7),
B(StaDataPropertyInLiteral), R(4), R(6), U8(3), U8(7),
B(StaDataPropertyInLiteral), R(4), R(6), U8(3), U8(3),
B(LdaImmutableCurrentContextSlot), U8(5),
/* 106 E> */ B(ToName), R(6),
B(LdaConstant), U8(4),
@ -143,8 +143,8 @@ bytecodes: [
B(Mov), R(3), R(5),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0),
B(CreateClosure), U8(5), U8(6), U8(2),
B(StaDataPropertyInLiteral), R(5), R(6), U8(3), U8(9),
B(CreateClosure), U8(5), U8(2), U8(2),
B(StaDataPropertyInLiteral), R(5), R(6), U8(3), U8(5),
B(CallRuntime), U16(Runtime::kInstallClassNameAccessorWithCheck), R(3), U8(1),
B(CallRuntime), U16(Runtime::kToFastProperties), R(3), U8(1),
B(Star), R(0),
@ -178,7 +178,7 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 46 S> */ B(LdaZero),
/* 46 E> */ B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(0), U8(4), U8(2),
B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(3),
B(LdaTheHole),
B(Star), R(4),
@ -193,7 +193,7 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kToFastProperties), R(3), U8(1),
B(Star), R(0),
B(Star), R(1),
/* 94 S> */ B(Construct), R(1), R(0), U8(0), U8(5),
/* 94 S> */ B(Construct), R(1), R(0), U8(0), U8(1),
/* 102 S> */ B(Return),
]
constant pool: [
@ -212,7 +212,7 @@ parameter count: 1
bytecode array length: 92
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 34 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 34 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(2),
B(LdaTheHole),
B(Star), R(3),
@ -224,7 +224,7 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(4),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kToFastProperties), R(2), U8(1),
B(CreateClosure), U8(1), U8(5), U8(2),
B(CreateClosure), U8(1), U8(1), U8(2),
B(Star), R(2),
B(LdaTheHole),
B(Star), R(3),
@ -237,12 +237,12 @@ bytecodes: [
B(Star), R(3),
B(LdaConstant), U8(2),
B(Star), R(5),
B(CreateClosure), U8(3), U8(6), U8(2),
B(CreateClosure), U8(3), U8(2), U8(2),
B(Star), R(6),
B(LdaSmi), I8(2),
B(Star), R(7),
B(Ldar), R(6),
B(StaDataPropertyInLiteral), R(4), R(5), U8(1), U8(7),
B(StaDataPropertyInLiteral), R(4), R(5), U8(1), U8(3),
B(CallRuntime), U16(Runtime::kToFastProperties), R(2), U8(1),
B(Star), R(0),
B(Star), R(1),

View File

@ -276,7 +276,7 @@ bytecodes: [
B(JumpIfUndefined), U8(12),
/* 64 E> */ B(StackCheck),
/* 92 S> */ B(Ldar), R(1),
B(Inc), U8(7),
B(Inc), U8(3),
B(Star), R(1),
B(JumpLoop), U8(11), I8(0),
B(LdaUndefined),

View File

@ -16,7 +16,7 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0),
/* 45 S> */ B(AddSmi), I8(2), U8(4),
/* 45 S> */ B(AddSmi), I8(2), U8(0),
B(Star), R(0),
B(LdaUndefined),
/* 53 S> */ B(Return),
@ -37,7 +37,7 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0),
/* 45 S> */ B(DivSmi), I8(2), U8(4),
/* 45 S> */ B(DivSmi), I8(2), U8(0),
B(Star), R(0),
B(LdaUndefined),
/* 53 S> */ B(Return),
@ -56,11 +56,11 @@ parameter count: 1
bytecode array length: 22
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(1),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(1),
B(Mov), R(1), R(0),
/* 54 S> */ B(LdaNamedProperty), R(1), U8(1), U8(5),
B(MulSmi), I8(2), U8(7),
/* 61 E> */ B(StaNamedPropertySloppy), R(1), U8(1), U8(8),
/* 54 S> */ B(LdaNamedProperty), R(1), U8(1), U8(1),
B(MulSmi), I8(2), U8(3),
/* 61 E> */ B(StaNamedPropertySloppy), R(1), U8(1), U8(4),
B(LdaUndefined),
/* 67 S> */ B(Return),
]
@ -80,13 +80,13 @@ parameter count: 1
bytecode array length: 25
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(1),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(1),
B(Mov), R(1), R(0),
/* 52 S> */ B(LdaSmi), I8(1),
B(Star), R(2),
B(LdaKeyedProperty), R(1), U8(5),
B(BitwiseXorSmi), I8(2), U8(7),
/* 57 E> */ B(StaKeyedPropertySloppy), R(1), R(2), U8(8),
B(LdaKeyedProperty), R(1), U8(1),
B(BitwiseXorSmi), I8(2), U8(3),
/* 57 E> */ B(StaKeyedPropertySloppy), R(1), R(2), U8(4),
B(LdaUndefined),
/* 63 S> */ B(Return),
]
@ -109,9 +109,9 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
/* 42 E> */ B(StaCurrentContextSlot), U8(4),
/* 45 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 45 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
/* 75 S> */ B(LdaCurrentContextSlot), U8(4),
B(BitwiseOrSmi), I8(24), U8(5),
B(BitwiseOrSmi), I8(24), U8(1),
/* 77 E> */ B(StaCurrentContextSlot), U8(4),
B(LdaUndefined),
/* 84 S> */ B(Return),

View File

@ -51,7 +51,7 @@ bytecodes: [
/* 34 S> */ B(LdaZero),
B(Star), R(0),
B(LdaSmi), I8(1),
/* 43 E> */ B(TestLessThan), R(0), U8(4),
/* 43 E> */ B(TestLessThan), R(0), U8(0),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(2),
B(Jump), U8(4),

View File

@ -17,7 +17,7 @@ bytecodes: [
B(PushContext), R(1),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(0), U8(4), U8(2),
B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0),
/* 30 E> */ B(StackCheck),
/* 44 S> */ B(LdaSmi), I8(10),
@ -43,7 +43,7 @@ bytecodes: [
B(PushContext), R(1),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(0), U8(4), U8(2),
B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0),
/* 30 E> */ B(StackCheck),
/* 44 S> */ B(LdaSmi), I8(10),
@ -69,7 +69,7 @@ bytecodes: [
B(PushContext), R(1),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(0), U8(4), U8(2),
B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0),
/* 30 E> */ B(StackCheck),
/* 44 S> */ B(LdaSmi), I8(20),
@ -100,7 +100,7 @@ bytecodes: [
B(PushContext), R(1),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(0), U8(4), U8(2),
B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0),
/* 30 E> */ B(StackCheck),
/* 44 S> */ B(LdaSmi), I8(10),

View File

@ -20,7 +20,7 @@ bytecodes: [
B(Ldar), R(arg0),
B(StaCurrentContextSlot), U8(4),
/* 10 E> */ B(StackCheck),
/* 19 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 19 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
/* 51 S> */ B(Return),
]
constant pool: [
@ -43,7 +43,7 @@ bytecodes: [
B(Ldar), R(arg0),
B(StaCurrentContextSlot), U8(4),
/* 10 E> */ B(StackCheck),
/* 27 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 27 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0),
/* 53 S> */ B(LdaCurrentContextSlot), U8(4),
/* 65 S> */ B(Return),
@ -70,7 +70,7 @@ bytecodes: [
B(Ldar), R(arg2),
B(StaCurrentContextSlot), U8(4),
/* 10 E> */ B(StackCheck),
/* 29 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 29 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
/* 60 S> */ B(Return),
]
constant pool: [
@ -93,7 +93,7 @@ bytecodes: [
/* 10 E> */ B(StackCheck),
/* 26 S> */ B(Ldar), R(this),
/* 26 E> */ B(StaCurrentContextSlot), U8(4),
/* 32 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 32 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
/* 64 S> */ B(Return),
]
constant pool: [

View File

@ -16,7 +16,7 @@ bytecodes: [
B(CreateFunctionContext), U8(1),
B(PushContext), R(0),
/* 30 E> */ B(StackCheck),
/* 41 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 41 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
/* 70 S> */ B(Return),
]
constant pool: [
@ -38,7 +38,7 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
/* 42 E> */ B(StaCurrentContextSlot), U8(4),
/* 45 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 45 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
/* 74 S> */ B(Return),
]
constant pool: [
@ -62,7 +62,7 @@ bytecodes: [
/* 42 E> */ B(StaCurrentContextSlot), U8(4),
/* 53 S> */ B(LdaSmi), I8(2),
/* 53 E> */ B(StaCurrentContextSlot), U8(5),
/* 56 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 56 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
/* 91 S> */ B(Return),
]
constant pool: [
@ -82,9 +82,9 @@ bytecodes: [
B(CreateFunctionContext), U8(1),
B(PushContext), R(0),
/* 30 E> */ B(StackCheck),
/* 41 S> */ B(CreateClosure), U8(0), U8(6), U8(2),
/* 41 S> */ B(CreateClosure), U8(0), U8(2), U8(2),
B(Star), R(1),
/* 64 E> */ B(CallUndefinedReceiver0), R(1), U8(4),
/* 64 E> */ B(CallUndefinedReceiver0), R(1), U8(0),
/* 68 S> */ B(LdaCurrentContextSlot), U8(4),
/* 77 S> */ B(Return),
]
@ -118,7 +118,7 @@ bytecodes: [
B(StaCurrentContextSlot), U8(4),
/* 69 S> */ B(LdaSmi), I8(2),
/* 69 E> */ B(StaCurrentContextSlot), U8(4),
/* 72 S> */ B(CreateClosure), U8(1), U8(4), U8(2),
/* 72 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
/* 101 S> */ B(Return),
]
constant pool: [
@ -898,9 +898,9 @@ bytecodes: [
/* 3421 E> */ B(StaCurrentContextSlot), U8(254),
/* 3435 S> */ B(LdaZero),
/* 3435 E> */ B(StaCurrentContextSlot), U8(255),
/* 3438 S> */ B(LdaGlobal), U8(0), U8(6),
/* 3438 S> */ B(LdaGlobal), U8(0), U8(2),
B(Star), R(1),
/* 3438 E> */ B(CallUndefinedReceiver0), R(1), U8(4),
/* 3438 E> */ B(CallUndefinedReceiver0), R(1), U8(0),
/* 3454 S> */ B(LdaSmi), I8(100),
/* 3454 E> */ B(Wide), B(StaCurrentContextSlot), U16(256),
/* 3459 S> */ B(Wide), B(LdaCurrentContextSlot), U16(256),

View File

@ -16,7 +16,7 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0),
/* 45 S> */ B(Inc), U8(4),
/* 45 S> */ B(Inc), U8(0),
B(Star), R(0),
/* 56 S> */ B(Return),
]
@ -36,9 +36,9 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0),
/* 45 S> */ B(ToNumber), R(1), U8(4),
/* 45 S> */ B(ToNumber), R(1), U8(0),
B(Ldar), R(1),
B(Inc), U8(4),
B(Inc), U8(0),
B(Star), R(0),
B(Ldar), R(1),
/* 56 S> */ B(Return),
@ -59,7 +59,7 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0),
/* 45 S> */ B(Dec), U8(4),
/* 45 S> */ B(Dec), U8(0),
B(Star), R(0),
/* 56 S> */ B(Return),
]
@ -79,9 +79,9 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
B(Star), R(0),
/* 45 S> */ B(ToNumber), R(1), U8(4),
/* 45 S> */ B(ToNumber), R(1), U8(0),
B(Ldar), R(1),
B(Dec), U8(4),
B(Dec), U8(0),
B(Star), R(0),
B(Ldar), R(1),
/* 56 S> */ B(Return),
@ -100,13 +100,13 @@ parameter count: 1
bytecode array length: 27
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(1),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(1),
B(Mov), R(1), R(0),
/* 54 S> */ B(LdaNamedProperty), R(1), U8(1), U8(5),
B(ToNumber), R(2), U8(9),
/* 54 S> */ B(LdaNamedProperty), R(1), U8(1), U8(1),
B(ToNumber), R(2), U8(5),
B(Ldar), R(2),
B(Inc), U8(9),
/* 66 E> */ B(StaNamedPropertySloppy), R(1), U8(1), U8(7),
B(Inc), U8(5),
/* 66 E> */ B(StaNamedPropertySloppy), R(1), U8(1), U8(3),
B(Ldar), R(2),
/* 69 S> */ B(Return),
]
@ -126,11 +126,11 @@ parameter count: 1
bytecode array length: 20
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(1),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(1),
B(Mov), R(1), R(0),
/* 54 S> */ B(LdaNamedProperty), R(1), U8(1), U8(5),
B(Dec), U8(9),
/* 65 E> */ B(StaNamedPropertySloppy), R(1), U8(1), U8(7),
/* 54 S> */ B(LdaNamedProperty), R(1), U8(1), U8(1),
B(Dec), U8(5),
/* 65 E> */ B(StaNamedPropertySloppy), R(1), U8(1), U8(3),
/* 69 S> */ B(Return),
]
constant pool: [
@ -151,14 +151,14 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 45 S> */ B(LdaConstant), U8(0),
B(Star), R(0),
/* 60 S> */ B(CreateObjectLiteral), U8(1), U8(4), U8(41), R(2),
/* 60 S> */ B(CreateObjectLiteral), U8(1), U8(0), U8(41), R(2),
B(Mov), R(2), R(1),
/* 72 S> */ B(Ldar), R(0),
/* 81 E> */ B(LdaKeyedProperty), R(2), U8(5),
B(ToNumber), R(4), U8(9),
/* 81 E> */ B(LdaKeyedProperty), R(2), U8(1),
B(ToNumber), R(4), U8(5),
B(Ldar), R(4),
B(Dec), U8(9),
/* 86 E> */ B(StaKeyedPropertySloppy), R(2), R(0), U8(7),
B(Dec), U8(5),
/* 86 E> */ B(StaKeyedPropertySloppy), R(2), R(0), U8(3),
B(Ldar), R(4),
/* 89 S> */ B(Return),
]
@ -180,12 +180,12 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 45 S> */ B(LdaConstant), U8(0),
B(Star), R(0),
/* 60 S> */ B(CreateObjectLiteral), U8(1), U8(4), U8(41), R(2),
/* 60 S> */ B(CreateObjectLiteral), U8(1), U8(0), U8(41), R(2),
B(Mov), R(2), R(1),
/* 72 S> */ B(Ldar), R(0),
/* 83 E> */ B(LdaKeyedProperty), R(2), U8(5),
B(Inc), U8(9),
/* 87 E> */ B(StaKeyedPropertySloppy), R(2), R(0), U8(7),
/* 83 E> */ B(LdaKeyedProperty), R(2), U8(1),
B(Inc), U8(5),
/* 87 E> */ B(StaKeyedPropertySloppy), R(2), R(0), U8(3),
/* 89 S> */ B(Return),
]
constant pool: [
@ -208,10 +208,10 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
/* 42 E> */ B(StaCurrentContextSlot), U8(4),
/* 53 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 53 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0),
/* 78 S> */ B(LdaCurrentContextSlot), U8(4),
B(Inc), U8(5),
B(Inc), U8(1),
/* 87 E> */ B(StaCurrentContextSlot), U8(4),
/* 89 S> */ B(Return),
]
@ -234,12 +234,12 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(1),
/* 42 E> */ B(StaCurrentContextSlot), U8(4),
/* 53 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 53 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0),
/* 78 S> */ B(LdaCurrentContextSlot), U8(4),
B(ToNumber), R(2), U8(5),
B(ToNumber), R(2), U8(1),
B(Ldar), R(2),
B(Dec), U8(5),
B(Dec), U8(1),
/* 86 E> */ B(StaCurrentContextSlot), U8(4),
B(Ldar), R(2),
/* 89 S> */ B(Return),
@ -261,15 +261,15 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 44 S> */ B(LdaSmi), I8(1),
B(Star), R(0),
/* 55 S> */ B(CreateArrayLiteral), U8(0), U8(4), U8(37),
/* 55 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(Star), R(1),
/* 63 S> */ B(Ldar), R(0),
B(ToNumber), R(3), U8(5),
B(ToNumber), R(3), U8(1),
B(Ldar), R(3),
B(Inc), U8(5),
B(Inc), U8(1),
B(Star), R(0),
B(LdaSmi), I8(2),
/* 79 E> */ B(StaKeyedPropertySloppy), R(1), R(3), U8(6),
/* 79 E> */ B(StaKeyedPropertySloppy), R(1), R(3), U8(2),
/* 83 S> */ B(Return),
]
constant pool: [

View File

@ -38,7 +38,7 @@ bytecodes: [
B(Star), R(0),
/* 10 E> */ B(StackCheck),
/* 15 S> */ B(LdaZero),
/* 31 E> */ B(LdaKeyedProperty), R(0), U8(4),
/* 31 E> */ B(LdaKeyedProperty), R(0), U8(0),
/* 35 S> */ B(Return),
]
constant pool: [
@ -82,7 +82,7 @@ bytecodes: [
B(Star), R(0),
/* 10 E> */ B(StackCheck),
/* 16 S> */ B(LdaZero),
/* 32 E> */ B(LdaKeyedProperty), R(0), U8(4),
/* 32 E> */ B(LdaKeyedProperty), R(0), U8(0),
/* 36 S> */ B(Return),
]
constant pool: [

View File

@ -63,7 +63,7 @@ bytecodes: [
B(Mov), R(arg0), R(1),
B(Mov), R(0), R(2),
/* 29 S> */ B(LdaZero),
/* 44 E> */ B(LdaKeyedProperty), R(2), U8(4),
/* 44 E> */ B(LdaKeyedProperty), R(2), U8(0),
/* 48 S> */ B(Return),
]
constant pool: [
@ -88,11 +88,11 @@ bytecodes: [
B(Mov), R(arg0), R(1),
B(Mov), R(0), R(2),
/* 29 S> */ B(LdaZero),
/* 44 E> */ B(LdaKeyedProperty), R(2), U8(4),
/* 44 E> */ B(LdaKeyedProperty), R(2), U8(0),
B(Star), R(4),
B(LdaZero),
/* 59 E> */ B(LdaKeyedProperty), R(3), U8(6),
/* 48 E> */ B(Add), R(4), U8(8),
/* 59 E> */ B(LdaKeyedProperty), R(3), U8(2),
/* 48 E> */ B(Add), R(4), U8(4),
/* 63 S> */ B(Return),
]
constant pool: [

View File

@ -22,7 +22,7 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kDeclareGlobalsForInterpreter), R(1), U8(3),
/* 0 E> */ B(StackCheck),
/* 8 S> */ B(LdaSmi), I8(1),
/* 8 E> */ B(StaGlobalSloppy), U8(1), U8(6),
/* 8 E> */ B(StaGlobalSloppy), U8(1), U8(2),
B(LdaUndefined),
/* 10 S> */ B(Return),
]
@ -74,9 +74,9 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kDeclareGlobalsForInterpreter), R(1), U8(3),
/* 0 E> */ B(StackCheck),
/* 8 S> */ B(LdaSmi), I8(1),
/* 8 E> */ B(StaGlobalSloppy), U8(1), U8(6),
/* 8 E> */ B(StaGlobalSloppy), U8(1), U8(2),
/* 11 S> */ B(LdaSmi), I8(2),
/* 12 E> */ B(StaGlobalSloppy), U8(1), U8(8),
/* 12 E> */ B(StaGlobalSloppy), U8(1), U8(4),
B(Star), R(0),
/* 15 S> */ B(Return),
]
@ -103,9 +103,9 @@ bytecodes: [
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kDeclareGlobalsForInterpreter), R(1), U8(3),
/* 0 E> */ B(StackCheck),
/* 16 S> */ B(LdaGlobal), U8(1), U8(4),
/* 16 S> */ B(LdaGlobal), U8(1), U8(0),
B(Star), R(1),
/* 16 E> */ B(CallUndefinedReceiver0), R(1), U8(7),
/* 16 E> */ B(CallUndefinedReceiver0), R(1), U8(3),
B(Star), R(0),
/* 20 S> */ B(Return),
]

View File

@ -14,7 +14,7 @@ parameter count: 1
bytecode array length: 14
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(1),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(1),
B(Mov), R(1), R(0),
/* 56 S> */ B(LdaConstant), U8(1),
B(DeletePropertySloppy), R(1),
@ -36,7 +36,7 @@ parameter count: 1
bytecode array length: 14
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 56 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(1),
/* 56 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(1),
B(Mov), R(1), R(0),
/* 70 S> */ B(LdaConstant), U8(1),
B(DeletePropertyStrict), R(1),
@ -58,7 +58,7 @@ parameter count: 1
bytecode array length: 14
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(1),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(1),
B(Mov), R(1), R(0),
/* 56 S> */ B(LdaSmi), I8(2),
B(DeletePropertySloppy), R(1),
@ -103,10 +103,10 @@ bytecodes: [
B(CreateFunctionContext), U8(1),
B(PushContext), R(0),
/* 30 E> */ B(StackCheck),
/* 56 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(1),
/* 56 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(1),
B(Ldar), R(1),
/* 56 E> */ B(StaCurrentContextSlot), U8(4),
/* 64 S> */ B(CreateClosure), U8(1), U8(5), U8(2),
/* 64 S> */ B(CreateClosure), U8(1), U8(1), U8(2),
/* 93 S> */ B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(1),
B(LdaSmi), I8(1),

View File

@ -57,7 +57,7 @@ bytecodes: [
/* 34 E> */ B(StackCheck),
/* 56 S> */ B(LdaSmi), I8(10),
B(Star), R(0),
/* 69 S> */ B(Inc), U8(4),
/* 69 S> */ B(Inc), U8(0),
B(Star), R(0),
B(Star), R(1),
/* 74 S> */ B(Jump), U8(2),

View File

@ -22,7 +22,7 @@ bytecodes: [
B(Ldar), R(new_target),
B(StaCurrentContextSlot), U8(5),
/* 30 E> */ B(StackCheck),
/* 34 S> */ B(LdaLookupGlobalSlot), U8(0), U8(6), U8(1),
/* 34 S> */ B(LdaLookupGlobalSlot), U8(0), U8(2), U8(1),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(2),
@ -37,7 +37,7 @@ bytecodes: [
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(3), U8(6),
B(Star), R(1),
/* 41 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(4),
/* 41 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(0),
/* 52 S> */ B(Return),
]
constant pool: [

View File

@ -49,18 +49,18 @@ bytecodes: [
B(Star), R(6),
B(Mov), R(context), R(19),
B(Mov), R(context), R(20),
/* 43 S> */ B(CreateArrayLiteral), U8(3), U8(4), U8(37),
/* 43 S> */ B(CreateArrayLiteral), U8(3), U8(0), U8(37),
B(Star), R(21),
B(LdaNamedProperty), R(21), U8(4), U8(9),
B(LdaNamedProperty), R(21), U8(4), U8(5),
B(JumpIfUndefined), U8(17),
B(JumpIfNull), U8(15),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(11),
B(CallProperty0), R(22), R(21), U8(7),
B(JumpIfJSReceiver), U8(23),
B(CallRuntime), U16(Runtime::kThrowSymbolAsyncIteratorInvalid), R(0), U8(0),
B(LdaNamedProperty), R(21), U8(5), U8(5),
B(LdaNamedProperty), R(21), U8(5), U8(1),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(7),
B(CallProperty0), R(22), R(21), U8(3),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_CreateAsyncFromSyncIterator), R(22), U8(1),
B(Star), R(4),
@ -72,9 +72,9 @@ bytecodes: [
B(LdaSmi), I8(81),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kAbort), R(21), U8(1),
/* 40 S> */ B(LdaNamedProperty), R(4), U8(7), U8(15),
/* 40 S> */ B(LdaNamedProperty), R(4), U8(7), U8(11),
B(Star), R(21),
B(CallProperty0), R(21), R(4), U8(13),
B(CallProperty0), R(21), R(4), U8(9),
B(Star), R(22),
B(Mov), R(11), R(21),
B(Mov), R(10), R(23),
@ -98,9 +98,9 @@ bytecodes: [
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(8), U8(17),
B(LdaNamedProperty), R(5), U8(8), U8(13),
B(JumpIfToBooleanTrue), U8(25),
B(LdaNamedProperty), R(5), U8(9), U8(19),
B(LdaNamedProperty), R(5), U8(9), U8(15),
B(Star), R(7),
B(LdaSmi), I8(2),
B(Star), R(6),
@ -120,7 +120,7 @@ bytecodes: [
B(Ldar), R(20),
B(PushContext), R(21),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(21),
B(TestEqualStrict), R(6), U8(17),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
@ -138,15 +138,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(19),
B(LdaZero),
B(TestEqualStrict), R(6), U8(22),
B(TestEqualStrict), R(6), U8(18),
B(JumpIfTrue), U8(199),
B(LdaNamedProperty), R(4), U8(12), U8(23),
B(LdaNamedProperty), R(4), U8(12), U8(19),
B(Star), R(8),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(188),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(26),
B(TestEqualStrict), R(6), U8(22),
B(JumpIfFalse), U8(109),
B(Ldar), R(8),
B(TestTypeOf), U8(5),
@ -352,18 +352,18 @@ bytecodes: [
B(Star), R(6),
B(Mov), R(context), R(19),
B(Mov), R(context), R(20),
/* 43 S> */ B(CreateArrayLiteral), U8(3), U8(4), U8(37),
/* 43 S> */ B(CreateArrayLiteral), U8(3), U8(0), U8(37),
B(Star), R(21),
B(LdaNamedProperty), R(21), U8(4), U8(9),
B(LdaNamedProperty), R(21), U8(4), U8(5),
B(JumpIfUndefined), U8(17),
B(JumpIfNull), U8(15),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(11),
B(CallProperty0), R(22), R(21), U8(7),
B(JumpIfJSReceiver), U8(23),
B(CallRuntime), U16(Runtime::kThrowSymbolAsyncIteratorInvalid), R(0), U8(0),
B(LdaNamedProperty), R(21), U8(5), U8(5),
B(LdaNamedProperty), R(21), U8(5), U8(1),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(7),
B(CallProperty0), R(22), R(21), U8(3),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_CreateAsyncFromSyncIterator), R(22), U8(1),
B(Star), R(4),
@ -375,9 +375,9 @@ bytecodes: [
B(LdaSmi), I8(81),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kAbort), R(21), U8(1),
/* 40 S> */ B(LdaNamedProperty), R(4), U8(7), U8(15),
/* 40 S> */ B(LdaNamedProperty), R(4), U8(7), U8(11),
B(Star), R(21),
B(CallProperty0), R(21), R(4), U8(13),
B(CallProperty0), R(21), R(4), U8(9),
B(Star), R(22),
B(Mov), R(11), R(21),
B(Mov), R(10), R(23),
@ -401,9 +401,9 @@ bytecodes: [
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(8), U8(17),
B(LdaNamedProperty), R(5), U8(8), U8(13),
B(JumpIfToBooleanTrue), U8(27),
B(LdaNamedProperty), R(5), U8(9), U8(19),
B(LdaNamedProperty), R(5), U8(9), U8(15),
B(Star), R(7),
B(LdaSmi), I8(2),
B(Star), R(6),
@ -424,7 +424,7 @@ bytecodes: [
B(Ldar), R(20),
B(PushContext), R(21),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(21),
B(TestEqualStrict), R(6), U8(17),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
@ -442,15 +442,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(19),
B(LdaZero),
B(TestEqualStrict), R(6), U8(22),
B(TestEqualStrict), R(6), U8(18),
B(JumpIfTrue), U8(199),
B(LdaNamedProperty), R(4), U8(12), U8(23),
B(LdaNamedProperty), R(4), U8(12), U8(19),
B(Star), R(8),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(188),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(26),
B(TestEqualStrict), R(6), U8(22),
B(JumpIfFalse), U8(109),
B(Ldar), R(8),
B(TestTypeOf), U8(5),
@ -673,18 +673,18 @@ bytecodes: [
B(Star), R(6),
B(Mov), R(context), R(19),
B(Mov), R(context), R(20),
/* 43 S> */ B(CreateArrayLiteral), U8(3), U8(4), U8(37),
/* 43 S> */ B(CreateArrayLiteral), U8(3), U8(0), U8(37),
B(Star), R(21),
B(LdaNamedProperty), R(21), U8(4), U8(9),
B(LdaNamedProperty), R(21), U8(4), U8(5),
B(JumpIfUndefined), U8(17),
B(JumpIfNull), U8(15),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(11),
B(CallProperty0), R(22), R(21), U8(7),
B(JumpIfJSReceiver), U8(23),
B(CallRuntime), U16(Runtime::kThrowSymbolAsyncIteratorInvalid), R(0), U8(0),
B(LdaNamedProperty), R(21), U8(5), U8(5),
B(LdaNamedProperty), R(21), U8(5), U8(1),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(7),
B(CallProperty0), R(22), R(21), U8(3),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_CreateAsyncFromSyncIterator), R(22), U8(1),
B(Star), R(4),
@ -696,9 +696,9 @@ bytecodes: [
B(LdaSmi), I8(81),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kAbort), R(21), U8(1),
/* 40 S> */ B(LdaNamedProperty), R(4), U8(7), U8(15),
/* 40 S> */ B(LdaNamedProperty), R(4), U8(7), U8(11),
B(Star), R(21),
B(CallProperty0), R(21), R(4), U8(13),
B(CallProperty0), R(21), R(4), U8(9),
B(Star), R(22),
B(Mov), R(11), R(21),
B(Mov), R(10), R(23),
@ -722,9 +722,9 @@ bytecodes: [
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(8), U8(17),
B(LdaNamedProperty), R(5), U8(8), U8(13),
B(JumpIfToBooleanTrue), U8(43),
B(LdaNamedProperty), R(5), U8(9), U8(19),
B(LdaNamedProperty), R(5), U8(9), U8(15),
B(Star), R(7),
B(LdaSmi), I8(2),
B(Star), R(6),
@ -732,11 +732,11 @@ bytecodes: [
/* 23 E> */ B(StackCheck),
B(Mov), R(3), R(0),
/* 63 S> */ B(LdaSmi), I8(10),
/* 69 E> */ B(TestEqual), R(0), U8(21),
/* 69 E> */ B(TestEqual), R(0), U8(17),
B(JumpIfFalse), U8(4),
/* 76 S> */ B(Jump), U8(14),
/* 90 S> */ B(LdaSmi), I8(20),
/* 96 E> */ B(TestEqual), R(0), U8(22),
/* 96 E> */ B(TestEqual), R(0), U8(18),
B(JumpIfFalse), U8(4),
/* 103 S> */ B(Jump), U8(8),
B(LdaZero),
@ -752,7 +752,7 @@ bytecodes: [
B(Ldar), R(20),
B(PushContext), R(21),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(23),
B(TestEqualStrict), R(6), U8(19),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
@ -770,15 +770,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(19),
B(LdaZero),
B(TestEqualStrict), R(6), U8(24),
B(TestEqualStrict), R(6), U8(20),
B(JumpIfTrue), U8(199),
B(LdaNamedProperty), R(4), U8(12), U8(25),
B(LdaNamedProperty), R(4), U8(12), U8(21),
B(Star), R(8),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(188),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(28),
B(TestEqualStrict), R(6), U8(24),
B(JumpIfFalse), U8(109),
B(Ldar), R(8),
B(TestTypeOf), U8(5),
@ -961,38 +961,38 @@ bytecodes: [
B(Star), R(8),
B(Mov), R(context), R(11),
B(Mov), R(context), R(12),
/* 31 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(13),
/* 31 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(13),
B(Mov), R(13), R(1),
B(LdaZero),
B(Star), R(4),
B(Mov), R(context), R(15),
B(Mov), R(context), R(16),
/* 68 S> */ B(CreateArrayLiteral), U8(1), U8(5), U8(37),
/* 68 S> */ B(CreateArrayLiteral), U8(1), U8(1), U8(37),
B(Star), R(17),
B(LdaNamedProperty), R(17), U8(2), U8(6),
B(LdaNamedProperty), R(17), U8(2), U8(2),
B(Star), R(18),
B(CallProperty0), R(18), R(17), U8(8),
B(CallProperty0), R(18), R(17), U8(4),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(2),
/* 59 S> */ B(LdaNamedProperty), R(2), U8(3), U8(12),
/* 59 S> */ B(LdaNamedProperty), R(2), U8(3), U8(8),
B(Star), R(17),
B(CallProperty0), R(17), R(2), U8(10),
B(CallProperty0), R(17), R(2), U8(6),
B(Star), R(3),
/* 59 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(3), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(LdaNamedProperty), R(3), U8(4), U8(14),
B(LdaNamedProperty), R(3), U8(4), U8(10),
B(JumpIfToBooleanTrue), U8(30),
/* 58 E> */ B(LdaNamedProperty), R(3), U8(5), U8(16),
/* 58 E> */ B(LdaNamedProperty), R(3), U8(5), U8(12),
B(Star), R(5),
B(LdaSmi), I8(2),
B(Star), R(4),
B(Ldar), R(5),
B(StaNamedPropertySloppy), R(1), U8(6), U8(18),
B(StaNamedPropertySloppy), R(1), U8(6), U8(14),
/* 53 E> */ B(StackCheck),
/* 87 S> */ B(LdaNamedProperty), R(1), U8(6), U8(20),
/* 87 S> */ B(LdaNamedProperty), R(1), U8(6), U8(16),
B(Star), R(14),
B(LdaZero),
B(Star), R(13),
@ -1007,7 +1007,7 @@ bytecodes: [
B(Ldar), R(16),
B(PushContext), R(17),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(4), U8(22),
B(TestEqualStrict), R(4), U8(18),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(4),
@ -1025,15 +1025,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(15),
B(LdaZero),
B(TestEqualStrict), R(4), U8(23),
B(TestEqualStrict), R(4), U8(19),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(2), U8(9), U8(24),
B(LdaNamedProperty), R(2), U8(9), U8(20),
B(Star), R(6),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(4), U8(27),
B(TestEqualStrict), R(4), U8(23),
B(JumpIfFalse), U8(61),
B(Ldar), R(6),
B(TestTypeOf), U8(5),

View File

@ -76,7 +76,7 @@ bytecodes: [
B(Star), R(7),
/* 63 S> */ B(ForInContinue), R(7), R(6),
B(JumpIfFalse), U8(22),
B(ForInNext), R(3), R(7), R(4), U8(4),
B(ForInNext), R(3), R(7), R(4), U8(0),
B(JumpIfUndefined), U8(8),
B(Star), R(1),
/* 54 E> */ B(StackCheck),
@ -106,7 +106,7 @@ bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaZero),
B(Star), R(0),
/* 59 S> */ B(CreateArrayLiteral), U8(0), U8(4), U8(37),
/* 59 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(JumpIfUndefined), U8(46),
B(JumpIfNull), U8(44),
B(ToObject), R(3),
@ -115,13 +115,13 @@ bytecodes: [
B(Star), R(7),
/* 54 S> */ B(ForInContinue), R(7), R(6),
B(JumpIfFalse), U8(31),
B(ForInNext), R(3), R(7), R(4), U8(6),
B(ForInNext), R(3), R(7), R(4), U8(2),
B(JumpIfUndefined), U8(17),
B(Star), R(1),
/* 45 E> */ B(StackCheck),
B(Star), R(2),
/* 70 S> */ B(Ldar), R(1),
/* 75 E> */ B(Add), R(0), U8(5),
/* 75 E> */ B(Add), R(0), U8(1),
B(Mov), R(0), R(8),
B(Star), R(0),
/* 72 E> */ B(ForInStep), R(7),
@ -149,9 +149,9 @@ parameter count: 1
bytecode array length: 85
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(1),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(1),
B(Mov), R(1), R(0),
/* 77 S> */ B(CreateArrayLiteral), U8(1), U8(5), U8(37),
/* 77 S> */ B(CreateArrayLiteral), U8(1), U8(1), U8(37),
B(JumpIfUndefined), U8(70),
B(JumpIfNull), U8(68),
B(ToObject), R(1),
@ -160,22 +160,22 @@ bytecodes: [
B(Star), R(5),
/* 68 S> */ B(ForInContinue), R(5), R(4),
B(JumpIfFalse), U8(55),
B(ForInNext), R(1), R(5), R(2), U8(16),
B(ForInNext), R(1), R(5), R(2), U8(12),
B(JumpIfUndefined), U8(41),
B(Star), R(6),
B(Ldar), R(6),
/* 67 E> */ B(StaNamedPropertySloppy), R(0), U8(2), U8(14),
/* 67 E> */ B(StaNamedPropertySloppy), R(0), U8(2), U8(10),
/* 62 E> */ B(StackCheck),
/* 100 S> */ B(LdaNamedProperty), R(0), U8(2), U8(8),
/* 100 S> */ B(LdaNamedProperty), R(0), U8(2), U8(4),
B(Star), R(6),
B(LdaSmi), I8(10),
/* 106 E> */ B(TestEqual), R(6), U8(10),
/* 106 E> */ B(TestEqual), R(6), U8(6),
B(JumpIfFalse), U8(4),
/* 113 S> */ B(Jump), U8(17),
/* 130 S> */ B(LdaNamedProperty), R(0), U8(2), U8(11),
/* 130 S> */ B(LdaNamedProperty), R(0), U8(2), U8(7),
B(Star), R(6),
B(LdaSmi), I8(20),
/* 136 E> */ B(TestEqual), R(6), U8(13),
/* 136 E> */ B(TestEqual), R(6), U8(9),
B(JumpIfFalse), U8(4),
/* 143 S> */ B(Jump), U8(9),
B(ForInStep), R(5),
@ -202,9 +202,9 @@ parameter count: 1
bytecode array length: 62
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(CreateArrayLiteral), U8(0), U8(4), U8(37),
/* 42 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(Star), R(0),
/* 72 S> */ B(CreateArrayLiteral), U8(1), U8(5), U8(37),
/* 72 S> */ B(CreateArrayLiteral), U8(1), U8(1), U8(37),
B(JumpIfUndefined), U8(49),
B(JumpIfNull), U8(47),
B(ToObject), R(1),
@ -213,16 +213,16 @@ bytecodes: [
B(Star), R(5),
/* 65 S> */ B(ForInContinue), R(5), R(4),
B(JumpIfFalse), U8(34),
B(ForInNext), R(1), R(5), R(2), U8(12),
B(ForInNext), R(1), R(5), R(2), U8(8),
B(JumpIfUndefined), U8(20),
B(Star), R(6),
B(LdaZero),
B(Star), R(8),
B(Ldar), R(6),
/* 64 E> */ B(StaKeyedPropertySloppy), R(0), R(8), U8(10),
/* 64 E> */ B(StaKeyedPropertySloppy), R(0), R(8), U8(6),
/* 59 E> */ B(StackCheck),
/* 83 S> */ B(LdaSmi), I8(3),
/* 91 E> */ B(LdaKeyedProperty), R(0), U8(8),
/* 91 E> */ B(LdaKeyedProperty), R(0), U8(4),
/* 95 S> */ B(Return),
B(ForInStep), R(5),
B(Star), R(5),

View File

@ -18,25 +18,25 @@ bytecodes: [
B(Star), R(4),
B(Mov), R(context), R(10),
B(Mov), R(context), R(11),
/* 48 S> */ B(CreateArrayLiteral), U8(0), U8(4), U8(37),
/* 48 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(Star), R(12),
B(LdaNamedProperty), R(12), U8(1), U8(5),
B(LdaNamedProperty), R(12), U8(1), U8(1),
B(Star), R(13),
B(CallProperty0), R(13), R(12), U8(7),
B(CallProperty0), R(13), R(12), U8(3),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(2),
/* 43 S> */ B(LdaNamedProperty), R(2), U8(2), U8(11),
/* 43 S> */ B(LdaNamedProperty), R(2), U8(2), U8(7),
B(Star), R(12),
B(CallProperty0), R(12), R(2), U8(9),
B(CallProperty0), R(12), R(2), U8(5),
B(Star), R(3),
/* 43 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(3), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(LdaNamedProperty), R(3), U8(3), U8(13),
B(LdaNamedProperty), R(3), U8(3), U8(9),
B(JumpIfToBooleanTrue), U8(25),
B(LdaNamedProperty), R(3), U8(4), U8(15),
B(LdaNamedProperty), R(3), U8(4), U8(11),
B(Star), R(5),
B(LdaSmi), I8(2),
B(Star), R(4),
@ -53,7 +53,7 @@ bytecodes: [
B(PushContext), R(12),
B(Star), R(11),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(4), U8(17),
B(TestEqualStrict), R(4), U8(13),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(4),
@ -71,15 +71,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(10),
B(LdaZero),
B(TestEqualStrict), R(4), U8(18),
B(TestEqualStrict), R(4), U8(14),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(2), U8(7), U8(19),
B(LdaNamedProperty), R(2), U8(7), U8(15),
B(Star), R(6),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(4), U8(22),
B(TestEqualStrict), R(4), U8(18),
B(JumpIfFalse), U8(61),
B(Ldar), R(6),
B(TestTypeOf), U8(5),
@ -158,24 +158,24 @@ bytecodes: [
B(Star), R(5),
B(Mov), R(context), R(11),
B(Mov), R(context), R(12),
/* 68 S> */ B(LdaNamedProperty), R(0), U8(1), U8(4),
/* 68 S> */ B(LdaNamedProperty), R(0), U8(1), U8(0),
B(Star), R(14),
B(CallProperty0), R(14), R(0), U8(6),
B(CallProperty0), R(14), R(0), U8(2),
B(Mov), R(0), R(13),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(3),
/* 63 S> */ B(LdaNamedProperty), R(3), U8(2), U8(10),
/* 63 S> */ B(LdaNamedProperty), R(3), U8(2), U8(6),
B(Star), R(13),
B(CallProperty0), R(13), R(3), U8(8),
B(CallProperty0), R(13), R(3), U8(4),
B(Star), R(4),
/* 63 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(4), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(4), U8(1),
B(LdaNamedProperty), R(4), U8(3), U8(12),
B(LdaNamedProperty), R(4), U8(3), U8(8),
B(JumpIfToBooleanTrue), U8(27),
B(LdaNamedProperty), R(4), U8(4), U8(14),
B(LdaNamedProperty), R(4), U8(4), U8(10),
B(Star), R(6),
B(LdaSmi), I8(2),
B(Star), R(5),
@ -193,7 +193,7 @@ bytecodes: [
B(PushContext), R(13),
B(Star), R(12),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(5), U8(16),
B(TestEqualStrict), R(5), U8(12),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(5),
@ -211,15 +211,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(11),
B(LdaZero),
B(TestEqualStrict), R(5), U8(17),
B(TestEqualStrict), R(5), U8(13),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(3), U8(7), U8(18),
B(LdaNamedProperty), R(3), U8(7), U8(14),
B(Star), R(7),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(5), U8(21),
B(TestEqualStrict), R(5), U8(17),
B(JumpIfFalse), U8(61),
B(Ldar), R(7),
B(TestTypeOf), U8(5),
@ -302,25 +302,25 @@ bytecodes: [
B(Star), R(4),
B(Mov), R(context), R(10),
B(Mov), R(context), R(11),
/* 48 S> */ B(CreateArrayLiteral), U8(0), U8(4), U8(37),
/* 48 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
B(Star), R(12),
B(LdaNamedProperty), R(12), U8(1), U8(5),
B(LdaNamedProperty), R(12), U8(1), U8(1),
B(Star), R(13),
B(CallProperty0), R(13), R(12), U8(7),
B(CallProperty0), R(13), R(12), U8(3),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(2),
/* 43 S> */ B(LdaNamedProperty), R(2), U8(2), U8(11),
/* 43 S> */ B(LdaNamedProperty), R(2), U8(2), U8(7),
B(Star), R(12),
B(CallProperty0), R(12), R(2), U8(9),
B(CallProperty0), R(12), R(2), U8(5),
B(Star), R(3),
/* 43 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(3), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(LdaNamedProperty), R(3), U8(3), U8(13),
B(LdaNamedProperty), R(3), U8(3), U8(9),
B(JumpIfToBooleanTrue), U8(43),
B(LdaNamedProperty), R(3), U8(4), U8(15),
B(LdaNamedProperty), R(3), U8(4), U8(11),
B(Star), R(5),
B(LdaSmi), I8(2),
B(Star), R(4),
@ -328,11 +328,11 @@ bytecodes: [
/* 34 E> */ B(StackCheck),
B(Mov), R(0), R(1),
/* 66 S> */ B(LdaSmi), I8(10),
/* 72 E> */ B(TestEqual), R(1), U8(17),
/* 72 E> */ B(TestEqual), R(1), U8(13),
B(JumpIfFalse), U8(4),
/* 79 S> */ B(Jump), U8(14),
/* 91 S> */ B(LdaSmi), I8(20),
/* 97 E> */ B(TestEqual), R(1), U8(18),
/* 97 E> */ B(TestEqual), R(1), U8(14),
B(JumpIfFalse), U8(4),
/* 104 S> */ B(Jump), U8(8),
B(LdaZero),
@ -345,7 +345,7 @@ bytecodes: [
B(PushContext), R(12),
B(Star), R(11),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(4), U8(19),
B(TestEqualStrict), R(4), U8(15),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(4),
@ -363,15 +363,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(10),
B(LdaZero),
B(TestEqualStrict), R(4), U8(20),
B(TestEqualStrict), R(4), U8(16),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(2), U8(7), U8(21),
B(LdaNamedProperty), R(2), U8(7), U8(17),
B(Star), R(6),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(4), U8(24),
B(TestEqualStrict), R(4), U8(20),
B(JumpIfFalse), U8(61),
B(Ldar), R(6),
B(TestTypeOf), U8(5),
@ -444,38 +444,38 @@ parameter count: 1
bytecode array length: 280
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(7),
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(7),
B(Mov), R(7), R(0),
B(LdaZero),
B(Star), R(3),
B(Mov), R(context), R(9),
B(Mov), R(context), R(10),
/* 77 S> */ B(CreateArrayLiteral), U8(1), U8(5), U8(37),
/* 77 S> */ B(CreateArrayLiteral), U8(1), U8(1), U8(37),
B(Star), R(11),
B(LdaNamedProperty), R(11), U8(2), U8(6),
B(LdaNamedProperty), R(11), U8(2), U8(2),
B(Star), R(12),
B(CallProperty0), R(12), R(11), U8(8),
B(CallProperty0), R(12), R(11), U8(4),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(1),
/* 68 S> */ B(LdaNamedProperty), R(1), U8(3), U8(12),
/* 68 S> */ B(LdaNamedProperty), R(1), U8(3), U8(8),
B(Star), R(11),
B(CallProperty0), R(11), R(1), U8(10),
B(CallProperty0), R(11), R(1), U8(6),
B(Star), R(2),
/* 68 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(2), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(2), U8(1),
B(LdaNamedProperty), R(2), U8(4), U8(14),
B(LdaNamedProperty), R(2), U8(4), U8(10),
B(JumpIfToBooleanTrue), U8(30),
/* 67 E> */ B(LdaNamedProperty), R(2), U8(5), U8(16),
/* 67 E> */ B(LdaNamedProperty), R(2), U8(5), U8(12),
B(Star), R(4),
B(LdaSmi), I8(2),
B(Star), R(3),
B(Ldar), R(4),
B(StaNamedPropertySloppy), R(0), U8(6), U8(18),
B(StaNamedPropertySloppy), R(0), U8(6), U8(14),
/* 62 E> */ B(StackCheck),
/* 96 S> */ B(LdaNamedProperty), R(0), U8(6), U8(20),
/* 96 S> */ B(LdaNamedProperty), R(0), U8(6), U8(16),
B(Star), R(8),
B(LdaZero),
B(Star), R(7),
@ -487,7 +487,7 @@ bytecodes: [
B(PushContext), R(11),
B(Star), R(10),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(3), U8(22),
B(TestEqualStrict), R(3), U8(18),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(3),
@ -505,15 +505,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(9),
B(LdaZero),
B(TestEqualStrict), R(3), U8(23),
B(TestEqualStrict), R(3), U8(19),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(1), U8(9), U8(24),
B(LdaNamedProperty), R(1), U8(9), U8(20),
B(Star), R(5),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(3), U8(27),
B(TestEqualStrict), R(3), U8(23),
B(JumpIfFalse), U8(61),
B(Ldar), R(5),
B(TestTypeOf), U8(5),

View File

@ -24,24 +24,24 @@ bytecodes: [
B(Star), R(6),
B(Mov), R(context), R(12),
B(Mov), R(context), R(13),
/* 34 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(4),
/* 34 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(0),
B(Star), R(15),
B(CallProperty0), R(15), R(arg0), U8(6),
B(CallProperty0), R(15), R(arg0), U8(2),
B(Mov), R(arg0), R(14),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(4),
/* 29 S> */ B(LdaNamedProperty), R(4), U8(1), U8(10),
/* 29 S> */ B(LdaNamedProperty), R(4), U8(1), U8(6),
B(Star), R(14),
B(CallProperty0), R(14), R(4), U8(8),
B(CallProperty0), R(14), R(4), U8(4),
B(Star), R(5),
/* 29 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(5), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(2), U8(12),
B(LdaNamedProperty), R(5), U8(2), U8(8),
B(JumpIfToBooleanTrue), U8(28),
B(LdaNamedProperty), R(5), U8(3), U8(14),
B(LdaNamedProperty), R(5), U8(3), U8(10),
B(Star), R(7),
B(LdaSmi), I8(2),
B(Star), R(6),
@ -59,7 +59,7 @@ bytecodes: [
B(PushContext), R(14),
B(Star), R(13),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(16),
B(TestEqualStrict), R(6), U8(12),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
@ -77,15 +77,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(12),
B(LdaZero),
B(TestEqualStrict), R(6), U8(17),
B(TestEqualStrict), R(6), U8(13),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(4), U8(6), U8(18),
B(LdaNamedProperty), R(4), U8(6), U8(14),
B(Star), R(8),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(21),
B(TestEqualStrict), R(6), U8(17),
B(JumpIfFalse), U8(61),
B(Ldar), R(8),
B(TestTypeOf), U8(5),
@ -180,23 +180,23 @@ bytecodes: [
B(Mov), R(context), R(12),
/* 34 S> */ B(LdaContextSlot), R(8), U8(4), U8(0),
B(Star), R(13),
B(LdaNamedProperty), R(13), U8(1), U8(4),
B(LdaNamedProperty), R(13), U8(1), U8(0),
B(Star), R(14),
B(CallProperty0), R(14), R(13), U8(6),
B(CallProperty0), R(14), R(13), U8(2),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(1),
/* 29 S> */ B(LdaNamedProperty), R(1), U8(2), U8(10),
/* 29 S> */ B(LdaNamedProperty), R(1), U8(2), U8(6),
B(Star), R(13),
B(CallProperty0), R(13), R(1), U8(8),
B(CallProperty0), R(13), R(1), U8(4),
B(Star), R(2),
/* 29 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(2), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(2), U8(1),
B(LdaNamedProperty), R(2), U8(3), U8(12),
B(LdaNamedProperty), R(2), U8(3), U8(8),
B(JumpIfToBooleanTrue), U8(78),
B(LdaNamedProperty), R(2), U8(4), U8(14),
B(LdaNamedProperty), R(2), U8(4), U8(10),
B(Star), R(4),
B(LdaSmi), I8(2),
B(Star), R(3),
@ -209,7 +209,7 @@ bytecodes: [
B(StaCurrentContextSlot), U8(4),
B(Ldar), R(4),
B(StaCurrentContextSlot), U8(4),
/* 41 S> */ B(LdaLookupGlobalSlot), U8(6), U8(18), U8(1),
/* 41 S> */ B(LdaLookupGlobalSlot), U8(6), U8(14), U8(1),
B(Star), R(14),
B(LdaConstant), U8(7),
B(Star), R(15),
@ -224,7 +224,7 @@ bytecodes: [
B(Mov), R(closure), R(18),
B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(16), U8(6),
B(Star), R(14),
/* 41 E> */ B(CallUndefinedReceiver1), R(14), R(15), U8(16),
/* 41 E> */ B(CallUndefinedReceiver1), R(14), R(15), U8(12),
B(PopContext), R(13),
B(LdaZero),
B(Star), R(3),
@ -236,7 +236,7 @@ bytecodes: [
B(PushContext), R(13),
B(Star), R(12),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(3), U8(20),
B(TestEqualStrict), R(3), U8(16),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(3),
@ -254,15 +254,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(11),
B(LdaZero),
B(TestEqualStrict), R(3), U8(21),
B(TestEqualStrict), R(3), U8(17),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(1), U8(10), U8(22),
B(LdaNamedProperty), R(1), U8(10), U8(18),
B(Star), R(5),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(3), U8(25),
B(TestEqualStrict), R(3), U8(21),
B(JumpIfFalse), U8(61),
B(Ldar), R(5),
B(TestTypeOf), U8(5),
@ -347,24 +347,24 @@ bytecodes: [
B(Star), R(4),
B(Mov), R(context), R(10),
B(Mov), R(context), R(11),
/* 34 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(4),
/* 34 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(0),
B(Star), R(13),
B(CallProperty0), R(13), R(arg0), U8(6),
B(CallProperty0), R(13), R(arg0), U8(2),
B(Mov), R(arg0), R(12),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(2),
/* 29 S> */ B(LdaNamedProperty), R(2), U8(1), U8(10),
/* 29 S> */ B(LdaNamedProperty), R(2), U8(1), U8(6),
B(Star), R(12),
B(CallProperty0), R(12), R(2), U8(8),
B(CallProperty0), R(12), R(2), U8(4),
B(Star), R(3),
/* 29 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(3), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(LdaNamedProperty), R(3), U8(2), U8(12),
B(LdaNamedProperty), R(3), U8(2), U8(8),
B(JumpIfToBooleanTrue), U8(46),
B(LdaNamedProperty), R(3), U8(3), U8(14),
B(LdaNamedProperty), R(3), U8(3), U8(10),
B(Star), R(5),
B(LdaSmi), I8(2),
B(Star), R(4),
@ -377,9 +377,9 @@ bytecodes: [
B(StaCurrentContextSlot), U8(4),
B(Ldar), R(5),
B(StaCurrentContextSlot), U8(4),
/* 41 S> */ B(CreateClosure), U8(5), U8(18), U8(2),
/* 41 S> */ B(CreateClosure), U8(5), U8(14), U8(2),
B(Star), R(13),
/* 67 E> */ B(CallUndefinedReceiver0), R(13), U8(16),
/* 67 E> */ B(CallUndefinedReceiver0), R(13), U8(12),
B(PopContext), R(12),
B(LdaZero),
B(Star), R(4),
@ -391,7 +391,7 @@ bytecodes: [
B(PushContext), R(12),
B(Star), R(11),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(4), U8(19),
B(TestEqualStrict), R(4), U8(15),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(4),
@ -409,15 +409,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(10),
B(LdaZero),
B(TestEqualStrict), R(4), U8(20),
B(TestEqualStrict), R(4), U8(16),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(2), U8(8), U8(21),
B(LdaNamedProperty), R(2), U8(8), U8(17),
B(Star), R(6),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(4), U8(24),
B(TestEqualStrict), R(4), U8(20),
B(JumpIfFalse), U8(61),
B(Ldar), R(6),
B(TestTypeOf), U8(5),
@ -501,24 +501,24 @@ bytecodes: [
B(Star), R(9),
B(Mov), R(context), R(15),
B(Mov), R(context), R(16),
/* 41 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(4),
/* 41 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(0),
B(Star), R(18),
B(CallProperty0), R(18), R(arg0), U8(6),
B(CallProperty0), R(18), R(arg0), U8(2),
B(Mov), R(arg0), R(17),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(7),
/* 36 S> */ B(LdaNamedProperty), R(7), U8(1), U8(10),
/* 36 S> */ B(LdaNamedProperty), R(7), U8(1), U8(6),
B(Star), R(17),
B(CallProperty0), R(17), R(7), U8(8),
B(CallProperty0), R(17), R(7), U8(4),
B(Star), R(8),
/* 36 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(8), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(8), U8(1),
B(LdaNamedProperty), R(8), U8(2), U8(12),
B(LdaNamedProperty), R(8), U8(2), U8(8),
B(JumpIfToBooleanTrue), U8(66),
B(LdaNamedProperty), R(8), U8(3), U8(14),
B(LdaNamedProperty), R(8), U8(3), U8(10),
B(Star), R(10),
B(LdaSmi), I8(2),
B(Star), R(9),
@ -535,12 +535,12 @@ bytecodes: [
B(Star), R(18),
B(CallRuntime), U16(Runtime::kNewTypeError), R(17), U8(2),
/* 31 E> */ B(Throw),
/* 31 S> */ B(LdaNamedProperty), R(6), U8(4), U8(18),
/* 31 S> */ B(LdaNamedProperty), R(6), U8(4), U8(14),
B(Star), R(1),
/* 34 S> */ B(LdaNamedProperty), R(6), U8(5), U8(20),
/* 34 S> */ B(LdaNamedProperty), R(6), U8(5), U8(16),
B(Star), R(2),
/* 56 S> */ B(Ldar), R(2),
/* 58 E> */ B(Add), R(1), U8(22),
/* 58 E> */ B(Add), R(1), U8(18),
B(Star), R(0),
B(LdaZero),
B(Star), R(9),
@ -552,7 +552,7 @@ bytecodes: [
B(PushContext), R(17),
B(Star), R(16),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(9), U8(23),
B(TestEqualStrict), R(9), U8(19),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(9),
@ -570,15 +570,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(15),
B(LdaZero),
B(TestEqualStrict), R(9), U8(24),
B(TestEqualStrict), R(9), U8(20),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(7), U8(8), U8(25),
B(LdaNamedProperty), R(7), U8(8), U8(21),
B(Star), R(11),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(9), U8(28),
B(TestEqualStrict), R(9), U8(24),
B(JumpIfFalse), U8(61),
B(Ldar), R(11),
B(TestTypeOf), U8(5),
@ -697,23 +697,23 @@ bytecodes: [
B(Mov), R(context), R(17),
/* 35 S> */ B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(18),
B(LdaNamedProperty), R(18), U8(3), U8(4),
B(LdaNamedProperty), R(18), U8(3), U8(0),
B(Star), R(19),
B(CallProperty0), R(19), R(18), U8(6),
B(CallProperty0), R(19), R(18), U8(2),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(5),
/* 30 S> */ B(LdaNamedProperty), R(5), U8(4), U8(10),
/* 30 S> */ B(LdaNamedProperty), R(5), U8(4), U8(6),
B(Star), R(18),
B(CallProperty0), R(18), R(5), U8(8),
B(CallProperty0), R(18), R(5), U8(4),
B(Star), R(6),
/* 30 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(6), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(6), U8(1),
B(LdaNamedProperty), R(6), U8(5), U8(12),
B(LdaNamedProperty), R(6), U8(5), U8(8),
B(JumpIfToBooleanTrue), U8(28),
B(LdaNamedProperty), R(6), U8(6), U8(14),
B(LdaNamedProperty), R(6), U8(6), U8(10),
B(Star), R(8),
B(LdaSmi), I8(2),
B(Star), R(7),
@ -731,7 +731,7 @@ bytecodes: [
B(PushContext), R(18),
B(Star), R(17),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(7), U8(16),
B(TestEqualStrict), R(7), U8(12),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(7),
@ -749,15 +749,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(16),
B(LdaZero),
B(TestEqualStrict), R(7), U8(17),
B(TestEqualStrict), R(7), U8(13),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(5), U8(9), U8(18),
B(LdaNamedProperty), R(5), U8(9), U8(14),
B(Star), R(9),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(7), U8(21),
B(TestEqualStrict), R(7), U8(17),
B(JumpIfFalse), U8(61),
B(Ldar), R(9),
B(TestTypeOf), U8(5),
@ -877,9 +877,9 @@ bytecodes: [
B(Mov), R(context), R(16),
/* 35 S> */ B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(17),
B(LdaNamedProperty), R(17), U8(4), U8(4),
B(LdaNamedProperty), R(17), U8(4), U8(0),
B(Star), R(18),
B(CallProperty0), R(18), R(17), U8(6),
B(CallProperty0), R(18), R(17), U8(2),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(4),
@ -891,17 +891,17 @@ bytecodes: [
B(LdaSmi), I8(81),
B(Star), R(17),
B(CallRuntime), U16(Runtime::kAbort), R(17), U8(1),
/* 30 S> */ B(LdaNamedProperty), R(4), U8(6), U8(10),
/* 30 S> */ B(LdaNamedProperty), R(4), U8(6), U8(6),
B(Star), R(17),
B(CallProperty0), R(17), R(4), U8(8),
B(CallProperty0), R(17), R(4), U8(4),
B(Star), R(5),
/* 30 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(5), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(7), U8(12),
B(LdaNamedProperty), R(5), U8(7), U8(8),
B(JumpIfToBooleanTrue), U8(74),
B(LdaNamedProperty), R(5), U8(8), U8(14),
B(LdaNamedProperty), R(5), U8(8), U8(10),
B(Star), R(7),
B(LdaSmi), I8(2),
B(Star), R(6),
@ -937,7 +937,7 @@ bytecodes: [
B(PushContext), R(17),
B(Star), R(16),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(16),
B(TestEqualStrict), R(6), U8(12),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
@ -955,15 +955,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(15),
B(LdaZero),
B(TestEqualStrict), R(6), U8(17),
B(TestEqualStrict), R(6), U8(13),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(4), U8(13), U8(18),
B(LdaNamedProperty), R(4), U8(13), U8(14),
B(Star), R(8),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(21),
B(TestEqualStrict), R(6), U8(17),
B(JumpIfFalse), U8(61),
B(Ldar), R(8),
B(TestTypeOf), U8(5),
@ -1066,23 +1066,23 @@ bytecodes: [
B(Mov), R(context), R(20),
/* 40 S> */ B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(21),
B(LdaNamedProperty), R(21), U8(0), U8(4),
B(LdaNamedProperty), R(21), U8(0), U8(0),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(6),
B(CallProperty0), R(22), R(21), U8(2),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(5),
/* 35 S> */ B(LdaNamedProperty), R(5), U8(1), U8(10),
/* 35 S> */ B(LdaNamedProperty), R(5), U8(1), U8(6),
B(Star), R(21),
B(CallProperty0), R(21), R(5), U8(8),
B(CallProperty0), R(21), R(5), U8(4),
B(Star), R(6),
/* 35 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(6), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(6), U8(1),
B(LdaNamedProperty), R(6), U8(2), U8(12),
B(LdaNamedProperty), R(6), U8(2), U8(8),
B(JumpIfToBooleanTrue), U8(28),
B(LdaNamedProperty), R(6), U8(3), U8(14),
B(LdaNamedProperty), R(6), U8(3), U8(10),
B(Star), R(8),
B(LdaSmi), I8(2),
B(Star), R(7),
@ -1103,7 +1103,7 @@ bytecodes: [
B(Ldar), R(20),
B(PushContext), R(21),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(7), U8(16),
B(TestEqualStrict), R(7), U8(12),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(7),
@ -1121,15 +1121,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(19),
B(LdaZero),
B(TestEqualStrict), R(7), U8(17),
B(TestEqualStrict), R(7), U8(13),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(5), U8(6), U8(18),
B(LdaNamedProperty), R(5), U8(6), U8(14),
B(Star), R(9),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(7), U8(21),
B(TestEqualStrict), R(7), U8(17),
B(JumpIfFalse), U8(61),
B(Ldar), R(9),
B(TestTypeOf), U8(5),
@ -1298,9 +1298,9 @@ bytecodes: [
B(Mov), R(context), R(21),
/* 40 S> */ B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(22),
B(LdaNamedProperty), R(22), U8(1), U8(4),
B(LdaNamedProperty), R(22), U8(1), U8(0),
B(Star), R(23),
B(CallProperty0), R(23), R(22), U8(6),
B(CallProperty0), R(23), R(22), U8(2),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(4),
@ -1312,17 +1312,17 @@ bytecodes: [
B(LdaSmi), I8(81),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kAbort), R(22), U8(1),
/* 35 S> */ B(LdaNamedProperty), R(4), U8(3), U8(10),
/* 35 S> */ B(LdaNamedProperty), R(4), U8(3), U8(6),
B(Star), R(22),
B(CallProperty0), R(22), R(4), U8(8),
B(CallProperty0), R(22), R(4), U8(4),
B(Star), R(5),
/* 35 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(5), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(4), U8(12),
B(LdaNamedProperty), R(5), U8(4), U8(8),
B(JumpIfToBooleanTrue), U8(72),
B(LdaNamedProperty), R(5), U8(5), U8(14),
B(LdaNamedProperty), R(5), U8(5), U8(10),
B(Star), R(7),
B(LdaSmi), I8(2),
B(Star), R(6),
@ -1360,7 +1360,7 @@ bytecodes: [
B(Ldar), R(21),
B(PushContext), R(22),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(16),
B(TestEqualStrict), R(6), U8(12),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
@ -1378,15 +1378,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(20),
B(LdaZero),
B(TestEqualStrict), R(6), U8(17),
B(TestEqualStrict), R(6), U8(13),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(4), U8(8), U8(18),
B(LdaNamedProperty), R(4), U8(8), U8(14),
B(Star), R(8),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(21),
B(TestEqualStrict), R(6), U8(17),
B(JumpIfFalse), U8(61),
B(Ldar), R(8),
B(TestTypeOf), U8(5),

View File

@ -14,7 +14,7 @@ parameter count: 1
bytecode array length: 6
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 34 S> */ B(CreateClosure), U8(0), U8(4), U8(2),
/* 34 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
/* 54 S> */ B(Return),
]
constant pool: [
@ -32,9 +32,9 @@ parameter count: 1
bytecode array length: 11
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 34 S> */ B(CreateClosure), U8(0), U8(6), U8(2),
/* 34 S> */ B(CreateClosure), U8(0), U8(2), U8(2),
B(Star), R(0),
/* 56 E> */ B(CallUndefinedReceiver0), R(0), U8(4),
/* 56 E> */ B(CallUndefinedReceiver0), R(0), U8(0),
/* 58 S> */ B(Return),
]
constant pool: [
@ -52,11 +52,11 @@ parameter count: 1
bytecode array length: 16
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 34 S> */ B(CreateClosure), U8(0), U8(6), U8(2),
/* 34 S> */ B(CreateClosure), U8(0), U8(2), U8(2),
B(Star), R(0),
B(LdaSmi), I8(1),
B(Star), R(1),
/* 67 E> */ B(CallUndefinedReceiver1), R(0), R(1), U8(4),
/* 67 E> */ B(CallUndefinedReceiver1), R(0), R(1), U8(0),
/* 70 S> */ B(Return),
]
constant pool: [

View File

@ -17,7 +17,7 @@ parameter count: 1
bytecode array length: 25
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(2),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(2),
B(Mov), R(2), R(0),
/* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1),
@ -47,7 +47,7 @@ parameter count: 1
bytecode array length: 25
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(2),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(2),
B(Mov), R(2), R(0),
/* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1),
@ -77,7 +77,7 @@ parameter count: 1
bytecode array length: 25
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(2),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(2),
B(Mov), R(2), R(0),
/* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1),
@ -107,7 +107,7 @@ parameter count: 1
bytecode array length: 25
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(2),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(2),
B(Mov), R(2), R(0),
/* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1),
@ -137,7 +137,7 @@ parameter count: 1
bytecode array length: 24
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(2),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(2),
B(Mov), R(2), R(0),
/* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1),
@ -166,7 +166,7 @@ parameter count: 1
bytecode array length: 24
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(2),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(2),
B(Mov), R(2), R(0),
/* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1),
@ -195,7 +195,7 @@ parameter count: 1
bytecode array length: 24
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(2),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(2),
B(Mov), R(2), R(0),
/* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1),
@ -224,7 +224,7 @@ parameter count: 1
bytecode array length: 24
bytecodes: [
/* 30 E> */ B(StackCheck),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(4), U8(41), R(2),
/* 46 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(2),
B(Mov), R(2), R(0),
/* 63 S> */ B(LdaSmi), I8(10),
B(Star), R(1),

View File

@ -178,11 +178,11 @@ bytecodes: [
B(Star), R(6),
B(Mov), R(context), R(14),
B(Mov), R(context), R(15),
/* 30 S> */ B(CreateArrayLiteral), U8(4), U8(4), U8(37),
/* 30 S> */ B(CreateArrayLiteral), U8(4), U8(0), U8(37),
B(Star), R(16),
B(LdaNamedProperty), R(16), U8(5), U8(5),
B(LdaNamedProperty), R(16), U8(5), U8(1),
B(Star), R(17),
B(CallProperty0), R(17), R(16), U8(7),
B(CallProperty0), R(17), R(16), U8(3),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(4),
@ -194,17 +194,17 @@ bytecodes: [
B(LdaSmi), I8(81),
B(Star), R(16),
B(CallRuntime), U16(Runtime::kAbort), R(16), U8(1),
/* 25 S> */ B(LdaNamedProperty), R(4), U8(7), U8(11),
/* 25 S> */ B(LdaNamedProperty), R(4), U8(7), U8(7),
B(Star), R(16),
B(CallProperty0), R(16), R(4), U8(9),
B(CallProperty0), R(16), R(4), U8(5),
B(Star), R(5),
/* 25 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(5), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(8), U8(13),
B(LdaNamedProperty), R(5), U8(8), U8(9),
B(JumpIfToBooleanTrue), U8(74),
B(LdaNamedProperty), R(5), U8(9), U8(15),
B(LdaNamedProperty), R(5), U8(9), U8(11),
B(Star), R(7),
B(LdaSmi), I8(2),
B(Star), R(6),
@ -240,7 +240,7 @@ bytecodes: [
B(PushContext), R(16),
B(Star), R(15),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(17),
B(TestEqualStrict), R(6), U8(13),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
@ -258,15 +258,15 @@ bytecodes: [
B(SetPendingMessage),
B(Star), R(14),
B(LdaZero),
B(TestEqualStrict), R(6), U8(18),
B(TestEqualStrict), R(6), U8(14),
B(JumpIfTrue), U8(104),
B(LdaNamedProperty), R(4), U8(14), U8(19),
B(LdaNamedProperty), R(4), U8(14), U8(15),
B(Star), R(8),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(93),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(22),
B(TestEqualStrict), R(6), U8(18),
B(JumpIfFalse), U8(61),
B(Ldar), R(8),
B(TestTypeOf), U8(5),
@ -382,13 +382,13 @@ bytecodes: [
/* 38 E> */ B(Throw),
B(Ldar), R(3),
/* 54 S> */ B(Return),
/* 43 S> */ B(LdaGlobal), U8(4), U8(6),
/* 43 S> */ B(LdaGlobal), U8(4), U8(2),
B(Star), R(9),
/* 50 E> */ B(CallUndefinedReceiver0), R(9), U8(4),
/* 50 E> */ B(CallUndefinedReceiver0), R(9), U8(0),
B(Star), R(7),
B(LdaNamedProperty), R(7), U8(5), U8(8),
B(LdaNamedProperty), R(7), U8(5), U8(4),
B(Star), R(8),
B(CallProperty0), R(8), R(7), U8(20),
B(CallProperty0), R(8), R(7), U8(16),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(5),
@ -406,36 +406,36 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kAbort), R(9), U8(1),
B(Ldar), R(4),
B(SwitchOnSmiNoFeedback), U8(7), U8(2), I8(1),
B(LdaNamedProperty), R(5), U8(9), U8(12),
B(LdaNamedProperty), R(5), U8(9), U8(8),
B(Star), R(9),
B(CallProperty1), R(9), R(5), R(6), U8(26),
B(CallProperty1), R(9), R(5), R(6), U8(22),
B(Jump), U8(65),
B(LdaNamedProperty), R(5), U8(10), U8(10),
B(LdaNamedProperty), R(5), U8(10), U8(6),
B(JumpIfUndefined), U8(13),
B(JumpIfNull), U8(11),
B(Star), R(9),
B(CallProperty1), R(9), R(5), R(6), U8(22),
B(CallProperty1), R(9), R(5), R(6), U8(18),
B(Jump), U8(48),
B(Ldar), R(6),
/* 54 S> */ B(Return),
B(LdaNamedProperty), R(5), U8(11), U8(14),
B(LdaNamedProperty), R(5), U8(11), U8(10),
B(JumpIfUndefined), U8(13),
B(JumpIfNull), U8(11),
B(Star), R(9),
B(CallProperty1), R(9), R(5), R(6), U8(28),
B(CallProperty1), R(9), R(5), R(6), U8(24),
B(Jump), U8(28),
B(LdaNamedProperty), R(5), U8(10), U8(10),
B(LdaNamedProperty), R(5), U8(10), U8(6),
B(Star), R(9),
B(JumpIfUndefined), U8(15),
B(JumpIfNull), U8(13),
B(CallProperty0), R(9), R(5), U8(24),
B(CallProperty0), R(9), R(5), U8(20),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(CallRuntime), U16(Runtime::kThrowThrowMethodMissing), R(0), U8(0),
B(Star), R(3),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(3), U8(1),
B(LdaNamedProperty), R(3), U8(12), U8(16),
B(LdaNamedProperty), R(3), U8(12), U8(12),
B(JumpIfToBooleanTrue), U8(33),
B(Ldar), R(3),
B(SuspendGenerator), R(1), R(0), U8(9), U8(1),
@ -448,7 +448,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(Star), R(4),
B(JumpLoop), U8(146), I8(0),
B(LdaNamedProperty), R(3), U8(13), U8(18),
B(LdaNamedProperty), R(3), U8(13), U8(14),
B(Star), R(5),
B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(4),

View File

@ -17,9 +17,9 @@ parameter count: 1
bytecode array length: 11
bytecodes: [
/* 26 E> */ B(StackCheck),
/* 31 S> */ B(LdaGlobal), U8(0), U8(4),
B(BitwiseAndSmi), I8(1), U8(6),
/* 45 E> */ B(StaGlobalSloppy), U8(0), U8(7),
/* 31 S> */ B(LdaGlobal), U8(0), U8(0),
B(BitwiseAndSmi), I8(1), U8(2),
/* 45 E> */ B(StaGlobalSloppy), U8(0), U8(3),
/* 50 S> */ B(Return),
]
constant pool: [
@ -39,9 +39,9 @@ parameter count: 1
bytecode array length: 11
bytecodes: [
/* 27 E> */ B(StackCheck),
/* 32 S> */ B(LdaGlobal), U8(0), U8(4),
B(AddSmi), I8(1), U8(6),
/* 51 E> */ B(StaGlobalSloppy), U8(0), U8(7),
/* 32 S> */ B(LdaGlobal), U8(0), U8(0),
B(AddSmi), I8(1), U8(2),
/* 51 E> */ B(StaGlobalSloppy), U8(0), U8(3),
/* 56 S> */ B(Return),
]
constant pool: [

View File

@ -17,9 +17,9 @@ parameter count: 1
bytecode array length: 10
bytecodes: [
/* 26 E> */ B(StackCheck),
/* 31 S> */ B(LdaGlobal), U8(0), U8(4),
B(Inc), U8(8),
/* 40 E> */ B(StaGlobalSloppy), U8(0), U8(6),
/* 31 S> */ B(LdaGlobal), U8(0), U8(0),
B(Inc), U8(4),
/* 40 E> */ B(StaGlobalSloppy), U8(0), U8(2),
/* 47 S> */ B(Return),
]
constant pool: [
@ -39,11 +39,11 @@ parameter count: 1
bytecode array length: 17
bytecodes: [
/* 26 E> */ B(StackCheck),
/* 31 S> */ B(LdaGlobal), U8(0), U8(4),
B(ToNumber), R(0), U8(8),
/* 31 S> */ B(LdaGlobal), U8(0), U8(0),
B(ToNumber), R(0), U8(4),
B(Ldar), R(0),
B(Dec), U8(8),
/* 44 E> */ B(StaGlobalSloppy), U8(0), U8(6),
B(Dec), U8(4),
/* 44 E> */ B(StaGlobalSloppy), U8(0), U8(2),
B(Ldar), R(0),
/* 47 S> */ B(Return),
]
@ -64,9 +64,9 @@ parameter count: 1
bytecode array length: 10
bytecodes: [
/* 27 E> */ B(StackCheck),
/* 46 S> */ B(LdaGlobal), U8(0), U8(4),
B(Dec), U8(8),
/* 55 E> */ B(StaGlobalStrict), U8(0), U8(6),
/* 46 S> */ B(LdaGlobal), U8(0), U8(0),
B(Dec), U8(4),
/* 55 E> */ B(StaGlobalStrict), U8(0), U8(2),
/* 67 S> */ B(Return),
]
constant pool: [
@ -86,11 +86,11 @@ parameter count: 1
bytecode array length: 17
bytecodes: [
/* 27 E> */ B(StackCheck),
/* 32 S> */ B(LdaGlobal), U8(0), U8(4),
B(ToNumber), R(0), U8(8),
/* 32 S> */ B(LdaGlobal), U8(0), U8(0),
B(ToNumber), R(0), U8(4),
B(Ldar), R(0),
B(Inc), U8(8),
/* 50 E> */ B(StaGlobalSloppy), U8(0), U8(6),
B(Inc), U8(4),
/* 50 E> */ B(StaGlobalSloppy), U8(0), U8(2),
B(Ldar), R(0),
/* 53 S> */ B(Return),
]

View File

@ -19,7 +19,7 @@ parameter count: 1
bytecode array length: 11
bytecodes: [
/* 32 E> */ B(StackCheck),
/* 39 S> */ B(LdaGlobal), U8(0), U8(4),
/* 39 S> */ B(LdaGlobal), U8(0), U8(0),
B(Star), R(0),
B(LdaConstant), U8(1),
B(DeletePropertySloppy), R(0),
@ -46,7 +46,7 @@ parameter count: 1
bytecode array length: 11
bytecodes: [
/* 28 E> */ B(StackCheck),
/* 51 S> */ B(LdaGlobal), U8(0), U8(4),
/* 51 S> */ B(LdaGlobal), U8(0), U8(0),
B(Star), R(0),
B(LdaSmi), I8(1),
B(DeletePropertyStrict), R(0),

View File

@ -121,7 +121,7 @@ bytecodes: [
B(Star), R(0),
/* 30 S> */ B(JumpIfToBooleanFalse), U8(11),
/* 43 S> */ B(Ldar), R(0),
B(AddSmi), I8(1), U8(4),
B(AddSmi), I8(1), U8(0),
B(Star), R(0),
B(Jump), U8(5),
/* 66 S> */ B(LdaSmi), I8(2),
@ -151,7 +151,7 @@ bytecode array length: 19
bytecodes: [
/* 10 E> */ B(StackCheck),
/* 18 S> */ B(LdaZero),
/* 24 E> */ B(TestLessThanOrEqual), R(arg0), U8(4),
/* 24 E> */ B(TestLessThanOrEqual), R(arg0), U8(0),
B(JumpIfFalse), U8(7),
/* 36 S> */ B(Wide), B(LdaSmi), I16(200),
/* 47 S> */ B(Return),
@ -266,7 +266,7 @@ bytecodes: [
/* 35 S> */ B(LdaZero),
B(Star), R(1),
/* 38 S> */ B(LdaConstant), U8(0),
/* 44 E> */ B(TestEqualStrict), R(0), U8(4),
/* 44 E> */ B(TestEqualStrict), R(0), U8(0),
B(JumpIfFalse), U8(10),
/* 58 S> */ B(Mov), R(0), R(1),
/* 1081 S> */ B(Wide), B(LdaSmi), I16(200),
@ -400,32 +400,32 @@ bytecode array length: 81
bytecodes: [
/* 10 E> */ B(StackCheck),
/* 21 S> */ B(Ldar), R(arg1),
/* 27 E> */ B(TestEqual), R(arg0), U8(4),
/* 27 E> */ B(TestEqual), R(arg0), U8(0),
B(JumpIfFalse), U8(5),
/* 35 S> */ B(LdaSmi), I8(1),
/* 44 S> */ B(Return),
/* 49 S> */ B(Ldar), R(arg1),
/* 55 E> */ B(TestEqualStrict), R(arg0), U8(5),
/* 55 E> */ B(TestEqualStrict), R(arg0), U8(1),
B(JumpIfFalse), U8(5),
/* 64 S> */ B(LdaSmi), I8(1),
/* 73 S> */ B(Return),
/* 78 S> */ B(Ldar), R(arg1),
/* 84 E> */ B(TestLessThan), R(arg0), U8(6),
/* 84 E> */ B(TestLessThan), R(arg0), U8(2),
B(JumpIfFalse), U8(5),
/* 91 S> */ B(LdaSmi), I8(1),
/* 100 S> */ B(Return),
/* 105 S> */ B(Ldar), R(arg1),
/* 111 E> */ B(TestGreaterThan), R(arg0), U8(7),
/* 111 E> */ B(TestGreaterThan), R(arg0), U8(3),
B(JumpIfFalse), U8(5),
/* 118 S> */ B(LdaSmi), I8(1),
/* 127 S> */ B(Return),
/* 132 S> */ B(Ldar), R(arg1),
/* 138 E> */ B(TestLessThanOrEqual), R(arg0), U8(8),
/* 138 E> */ B(TestLessThanOrEqual), R(arg0), U8(4),
B(JumpIfFalse), U8(5),
/* 146 S> */ B(LdaSmi), I8(1),
/* 155 S> */ B(Return),
/* 160 S> */ B(Ldar), R(arg1),
/* 166 E> */ B(TestGreaterThanOrEqual), R(arg0), U8(9),
/* 166 E> */ B(TestGreaterThanOrEqual), R(arg0), U8(5),
B(JumpIfFalse), U8(5),
/* 174 S> */ B(LdaSmi), I8(1),
/* 183 S> */ B(Return),
@ -498,18 +498,18 @@ bytecode array length: 36
bytecodes: [
/* 10 E> */ B(StackCheck),
/* 21 S> */ B(Ldar), R(arg1),
/* 27 E> */ B(TestEqual), R(arg0), U8(4),
/* 27 E> */ B(TestEqual), R(arg0), U8(0),
B(JumpIfTrue), U8(8),
B(LdaZero),
/* 37 E> */ B(TestLessThan), R(arg0), U8(5),
/* 37 E> */ B(TestLessThan), R(arg0), U8(1),
B(JumpIfFalse), U8(5),
/* 48 S> */ B(LdaSmi), I8(1),
/* 57 S> */ B(Return),
/* 67 S> */ B(LdaZero),
/* 73 E> */ B(TestGreaterThan), R(arg0), U8(6),
/* 73 E> */ B(TestGreaterThan), R(arg0), U8(2),
B(JumpIfFalse), U8(10),
B(LdaZero),
/* 82 E> */ B(TestGreaterThan), R(arg1), U8(7),
/* 82 E> */ B(TestGreaterThan), R(arg1), U8(3),
B(JumpIfFalse), U8(4),
/* 93 S> */ B(LdaZero),
/* 102 S> */ B(Return),

View File

@ -957,19 +957,19 @@ bytecodes: [
/* 4103 S> */ B(LdaZero),
B(Star), R(1),
/* 4108 S> */ B(LdaSmi), I8(3),
/* 4108 E> */ B(TestLessThan), R(1), U8(4),
/* 4108 E> */ B(TestLessThan), R(1), U8(0),
B(Wide), B(JumpIfFalse), U16(39),
/* 4090 E> */ B(StackCheck),
/* 4122 S> */ B(LdaSmi), I8(1),
/* 4128 E> */ B(TestEqual), R(1), U8(6),
/* 4128 E> */ B(TestEqual), R(1), U8(2),
B(Wide), B(JumpIfFalse), U16(7),
/* 4134 S> */ B(Wide), B(Jump), U16(16),
/* 4146 S> */ B(LdaSmi), I8(2),
/* 4152 E> */ B(TestEqual), R(1), U8(7),
/* 4152 E> */ B(TestEqual), R(1), U8(3),
B(Wide), B(JumpIfFalse), U16(7),
/* 4158 S> */ B(Wide), B(Jump), U16(12),
/* 4114 S> */ B(Ldar), R(1),
B(Inc), U8(5),
B(Inc), U8(1),
B(Star), R(1),
B(JumpLoop), U8(42), I8(0),
/* 4167 S> */ B(LdaSmi), I8(3),

View File

@ -17,7 +17,7 @@ bytecodes: [
B(PushContext), R(1),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(0), U8(4), U8(2),
B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0),
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(10),
@ -43,7 +43,7 @@ bytecodes: [
B(PushContext), R(1),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(0), U8(4), U8(2),
B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0),
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(10),
@ -69,7 +69,7 @@ bytecodes: [
B(PushContext), R(1),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(0), U8(4), U8(2),
B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0),
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(20),
@ -101,7 +101,7 @@ bytecodes: [
B(PushContext), R(1),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
B(CreateClosure), U8(0), U8(4), U8(2),
B(CreateClosure), U8(0), U8(0), U8(2),
B(Star), R(0),
/* 30 E> */ B(StackCheck),
/* 42 S> */ B(LdaSmi), I8(10),

View File

@ -17,7 +17,7 @@ parameter count: 1
bytecode array length: 5
bytecodes: [
/* 21 E> */ B(StackCheck),
/* 26 S> */ B(LdaGlobal), U8(0), U8(4),
/* 26 S> */ B(LdaGlobal), U8(0), U8(0),
/* 35 S> */ B(Return),
]
constant pool: [
@ -37,7 +37,7 @@ parameter count: 1
bytecode array length: 5
bytecodes: [
/* 27 E> */ B(StackCheck),
/* 32 S> */ B(LdaGlobal), U8(0), U8(4),
/* 32 S> */ B(LdaGlobal), U8(0), U8(0),
/* 41 S> */ B(Return),
]
constant pool: [
@ -57,7 +57,7 @@ parameter count: 1
bytecode array length: 5
bytecodes: [
/* 17 E> */ B(StackCheck),
/* 22 S> */ B(LdaGlobal), U8(0), U8(4),
/* 22 S> */ B(LdaGlobal), U8(0), U8(0),
/* 31 S> */ B(Return),
]
constant pool: [
@ -204,138 +204,138 @@ snippet: "
"
frame size: 0
parameter count: 2
bytecode array length: 528
bytecode array length: 520
bytecodes: [
/* 17 E> */ B(StackCheck),
/* 27 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(4),
/* 37 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(6),
/* 47 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(8),
/* 57 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(10),
/* 67 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(12),
/* 77 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(14),
/* 87 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(16),
/* 97 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(18),
/* 107 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(20),
/* 117 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(22),
/* 127 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(24),
/* 137 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(26),
/* 147 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(28),
/* 157 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(30),
/* 167 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(32),
/* 177 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(34),
/* 187 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(36),
/* 197 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(38),
/* 207 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(40),
/* 217 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(42),
/* 227 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(44),
/* 237 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(46),
/* 247 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(48),
/* 257 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(50),
/* 267 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(52),
/* 277 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(54),
/* 287 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(56),
/* 297 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(58),
/* 307 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(60),
/* 317 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(62),
/* 327 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(64),
/* 337 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(66),
/* 347 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(68),
/* 357 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(70),
/* 367 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(72),
/* 377 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(74),
/* 387 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(76),
/* 397 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(78),
/* 407 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(80),
/* 417 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(82),
/* 427 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(84),
/* 437 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(86),
/* 447 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(88),
/* 457 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(90),
/* 467 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(92),
/* 477 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(94),
/* 487 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(96),
/* 497 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(98),
/* 507 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(100),
/* 517 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(102),
/* 527 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(104),
/* 537 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(106),
/* 547 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(108),
/* 557 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(110),
/* 567 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(112),
/* 577 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(114),
/* 587 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(116),
/* 597 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(118),
/* 607 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(120),
/* 617 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(122),
/* 627 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(124),
/* 637 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(126),
/* 647 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(128),
/* 657 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(130),
/* 667 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(132),
/* 677 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(134),
/* 687 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(136),
/* 697 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(138),
/* 707 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(140),
/* 717 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(142),
/* 727 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(144),
/* 737 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(146),
/* 747 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(148),
/* 757 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(150),
/* 767 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(152),
/* 777 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(154),
/* 787 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(156),
/* 797 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(158),
/* 807 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(160),
/* 817 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(162),
/* 827 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(164),
/* 837 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(166),
/* 847 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(168),
/* 857 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(170),
/* 867 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(172),
/* 877 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(174),
/* 887 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(176),
/* 897 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(178),
/* 907 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(180),
/* 917 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(182),
/* 927 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(184),
/* 937 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(186),
/* 947 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(188),
/* 957 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(190),
/* 967 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(192),
/* 977 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(194),
/* 987 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(196),
/* 997 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(198),
/* 1007 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(200),
/* 1017 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(202),
/* 1027 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(204),
/* 1037 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(206),
/* 1047 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(208),
/* 1057 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(210),
/* 1067 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(212),
/* 1077 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(214),
/* 1087 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(216),
/* 1097 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(218),
/* 1107 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(220),
/* 1117 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(222),
/* 1127 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(224),
/* 1137 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(226),
/* 1147 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(228),
/* 1157 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(230),
/* 1167 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(232),
/* 1177 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(234),
/* 1187 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(236),
/* 1197 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(238),
/* 1207 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(240),
/* 1217 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(242),
/* 1227 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(244),
/* 1237 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(246),
/* 1247 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(248),
/* 1257 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(250),
/* 1267 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(252),
/* 1277 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(254),
/* 1287 S> */ B(Wide), B(LdaNamedProperty), R16(arg0), U16(0), U16(256),
/* 1297 S> */ B(Wide), B(LdaNamedProperty), R16(arg0), U16(0), U16(258),
/* 1305 S> */ B(Wide), B(LdaGlobal), U16(1), U16(260),
/* 27 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(0),
/* 37 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(2),
/* 47 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(4),
/* 57 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(6),
/* 67 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(8),
/* 77 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(10),
/* 87 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(12),
/* 97 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(14),
/* 107 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(16),
/* 117 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(18),
/* 127 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(20),
/* 137 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(22),
/* 147 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(24),
/* 157 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(26),
/* 167 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(28),
/* 177 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(30),
/* 187 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(32),
/* 197 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(34),
/* 207 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(36),
/* 217 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(38),
/* 227 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(40),
/* 237 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(42),
/* 247 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(44),
/* 257 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(46),
/* 267 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(48),
/* 277 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(50),
/* 287 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(52),
/* 297 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(54),
/* 307 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(56),
/* 317 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(58),
/* 327 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(60),
/* 337 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(62),
/* 347 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(64),
/* 357 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(66),
/* 367 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(68),
/* 377 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(70),
/* 387 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(72),
/* 397 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(74),
/* 407 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(76),
/* 417 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(78),
/* 427 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(80),
/* 437 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(82),
/* 447 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(84),
/* 457 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(86),
/* 467 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(88),
/* 477 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(90),
/* 487 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(92),
/* 497 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(94),
/* 507 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(96),
/* 517 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(98),
/* 527 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(100),
/* 537 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(102),
/* 547 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(104),
/* 557 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(106),
/* 567 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(108),
/* 577 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(110),
/* 587 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(112),
/* 597 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(114),
/* 607 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(116),
/* 617 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(118),
/* 627 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(120),
/* 637 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(122),
/* 647 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(124),
/* 657 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(126),
/* 667 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(128),
/* 677 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(130),
/* 687 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(132),
/* 697 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(134),
/* 707 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(136),
/* 717 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(138),
/* 727 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(140),
/* 737 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(142),
/* 747 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(144),
/* 757 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(146),
/* 767 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(148),
/* 777 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(150),
/* 787 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(152),
/* 797 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(154),
/* 807 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(156),
/* 817 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(158),
/* 827 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(160),
/* 837 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(162),
/* 847 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(164),
/* 857 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(166),
/* 867 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(168),
/* 877 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(170),
/* 887 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(172),
/* 897 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(174),
/* 907 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(176),
/* 917 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(178),
/* 927 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(180),
/* 937 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(182),
/* 947 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(184),
/* 957 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(186),
/* 967 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(188),
/* 977 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(190),
/* 987 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(192),
/* 997 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(194),
/* 1007 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(196),
/* 1017 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(198),
/* 1027 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(200),
/* 1037 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(202),
/* 1047 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(204),
/* 1057 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(206),
/* 1067 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(208),
/* 1077 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(210),
/* 1087 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(212),
/* 1097 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(214),
/* 1107 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(216),
/* 1117 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(218),
/* 1127 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(220),
/* 1137 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(222),
/* 1147 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(224),
/* 1157 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(226),
/* 1167 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(228),
/* 1177 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(230),
/* 1187 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(232),
/* 1197 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(234),
/* 1207 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(236),
/* 1217 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(238),
/* 1227 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(240),
/* 1237 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(242),
/* 1247 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(244),
/* 1257 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(246),
/* 1267 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(248),
/* 1277 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(250),
/* 1287 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(252),
/* 1297 S> */ B(LdaNamedProperty), R(arg0), U8(0), U8(254),
/* 1305 S> */ B(Wide), B(LdaGlobal), U16(1), U16(256),
/* 1314 S> */ B(Return),
]
constant pool: [

View File

@ -37,7 +37,7 @@ bytecodes: [
/* 42 S> */ B(LdaZero),
B(Star), R(0),
/* 45 S> */ B(LdaSmi), I8(1),
/* 55 E> */ B(TestEqual), R(0), U8(4),
/* 55 E> */ B(TestEqual), R(0), U8(0),
B(JumpIfTrue), U8(4),
B(LdaSmi), I8(3),
/* 66 S> */ B(Return),
@ -79,7 +79,7 @@ bytecodes: [
/* 42 S> */ B(LdaZero),
B(Star), R(0),
/* 45 S> */ B(LdaZero),
/* 55 E> */ B(TestEqual), R(0), U8(4),
/* 55 E> */ B(TestEqual), R(0), U8(0),
B(JumpIfFalse), U8(4),
B(LdaSmi), I8(3),
/* 66 S> */ B(Return),
@ -556,7 +556,7 @@ bytecodes: [
/* 60 S> */ B(LdaSmi), I8(3),
B(Star), R(2),
/* 63 S> */ B(LdaSmi), I8(3),
/* 73 E> */ B(TestGreaterThan), R(0), U8(4),
/* 73 E> */ B(TestGreaterThan), R(0), U8(0),
B(JumpIfTrueConstant), U8(0),
B(LdaSmi), I8(1),
B(Star), R(1),
@ -743,7 +743,7 @@ bytecodes: [
/* 60 S> */ B(LdaSmi), I8(3),
B(Star), R(2),
/* 63 S> */ B(LdaSmi), I8(5),
/* 73 E> */ B(TestLessThan), R(0), U8(4),
/* 73 E> */ B(TestLessThan), R(0), U8(0),
B(JumpIfFalseConstant), U8(0),
B(LdaSmi), I8(1),
B(Star), R(1),

View File

@ -23,7 +23,7 @@ bytecodes: [
B(Ldar), R(new_target),
B(StaCurrentContextSlot), U8(5),
/* 10 E> */ B(StackCheck),
/* 14 S> */ B(LdaLookupGlobalSlot), U8(0), U8(6), U8(1),
/* 14 S> */ B(LdaLookupGlobalSlot), U8(0), U8(2), U8(1),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(2),
@ -38,8 +38,8 @@ bytecodes: [
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(3), U8(6),
B(Star), R(1),
/* 14 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(4),
/* 35 S> */ B(LdaLookupGlobalSlot), U8(2), U8(8), U8(1),
/* 14 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(0),
/* 35 S> */ B(LdaLookupGlobalSlot), U8(2), U8(4), U8(1),
/* 44 S> */ B(Return),
]
constant pool: [
@ -67,7 +67,7 @@ bytecodes: [
B(Ldar), R(new_target),
B(StaCurrentContextSlot), U8(5),
/* 10 E> */ B(StackCheck),
/* 14 S> */ B(LdaLookupGlobalSlot), U8(0), U8(6), U8(1),
/* 14 S> */ B(LdaLookupGlobalSlot), U8(0), U8(2), U8(1),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(2),
@ -82,8 +82,8 @@ bytecodes: [
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(3), U8(6),
B(Star), R(1),
/* 14 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(4),
/* 35 S> */ B(LdaLookupGlobalSlotInsideTypeof), U8(2), U8(8), U8(1),
/* 14 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(0),
/* 35 S> */ B(LdaLookupGlobalSlotInsideTypeof), U8(2), U8(4), U8(1),
B(TypeOf),
/* 51 S> */ B(Return),
]
@ -114,7 +114,7 @@ bytecodes: [
/* 10 E> */ B(StackCheck),
/* 14 S> */ B(LdaSmi), I8(20),
/* 16 E> */ B(StaLookupSlot), U8(0), U8(0),
/* 22 S> */ B(LdaLookupGlobalSlot), U8(1), U8(6), U8(1),
/* 22 S> */ B(LdaLookupGlobalSlot), U8(1), U8(2), U8(1),
B(Star), R(1),
B(LdaConstant), U8(2),
B(Star), R(2),
@ -129,7 +129,7 @@ bytecodes: [
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(3), U8(6),
B(Star), R(1),
/* 29 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(4),
/* 29 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(0),
/* 38 S> */ B(Return),
]
constant pool: [
@ -162,7 +162,7 @@ bytecodes: [
B(Ldar), R(new_target),
B(StaCurrentContextSlot), U8(5),
/* 38 E> */ B(StackCheck),
/* 44 S> */ B(LdaLookupGlobalSlot), U8(0), U8(6), U8(1),
/* 44 S> */ B(LdaLookupGlobalSlot), U8(0), U8(2), U8(1),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(2),
@ -177,7 +177,7 @@ bytecodes: [
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(3), U8(6),
B(Star), R(1),
/* 44 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(4),
/* 44 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(0),
/* 66 S> */ B(LdaLookupContextSlot), U8(2), U8(6), U8(1),
/* 75 S> */ B(Return),
]
@ -211,7 +211,7 @@ bytecodes: [
B(Ldar), R(new_target),
B(StaCurrentContextSlot), U8(5),
/* 34 E> */ B(StackCheck),
/* 40 S> */ B(LdaLookupGlobalSlot), U8(0), U8(6), U8(1),
/* 40 S> */ B(LdaLookupGlobalSlot), U8(0), U8(2), U8(1),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(2),
@ -226,8 +226,8 @@ bytecodes: [
B(Mov), R(closure), R(5),
B(CallRuntime), U16(Runtime::kResolvePossiblyDirectEval), R(3), U8(6),
B(Star), R(1),
/* 40 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(4),
/* 62 S> */ B(LdaLookupGlobalSlot), U8(2), U8(8), U8(1),
/* 40 E> */ B(CallUndefinedReceiver1), R(1), R(2), U8(0),
/* 62 S> */ B(LdaLookupGlobalSlot), U8(2), U8(4), U8(1),
/* 71 S> */ B(Return),
]
constant pool: [

Some files were not shown because too many files have changed in this diff Show More