Commit 894b95fe authored by Christian O. Andersson's avatar Christian O. Andersson Committed by Commit Bot

[ignition] Optimizing Smi only comparisons

There are various situations where we explicitly compare a SMI against
another SMI (e.g., BuildIndexedJump). This is also a common pattern for
generated code (e.g., comparing a loop variable with an integer). Instead
of using the generic equality/strict-equality stub for this, which is
expensive, this CL offers a simple comparison stub, repurposing the
TestEqualStrictNoFeedback bytecode to TestReferenceEqual

Bug: v8:5310
Change-Id: Ib2b47cd24d5386cf0d20d3bd794776dc6e3a02a5
Reviewed-on: https://chromium-review.googlesource.com/1007542Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
Commit-Queue: Christian O. Andersson <cricke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#52655}
parent f459a424
...@@ -2413,19 +2413,12 @@ void BytecodeGraphBuilder::VisitTestGreaterThanOrEqual() { ...@@ -2413,19 +2413,12 @@ void BytecodeGraphBuilder::VisitTestGreaterThanOrEqual() {
BuildCompareOp(javascript()->GreaterThanOrEqual(GetCompareOperationHint())); BuildCompareOp(javascript()->GreaterThanOrEqual(GetCompareOperationHint()));
} }
void BytecodeGraphBuilder::VisitTestEqualStrictNoFeedback() { void BytecodeGraphBuilder::VisitTestReferenceEqual() {
// TODO(5310): Currently this is used with both Smi operands and with
// string operands. We pass string operands for static property check in
// VisitClassLiteralProperties. This should be changed, so we only use this
// for Smi operations and lower it to SpeculativeNumberEqual[kSignedSmall]
PrepareEagerCheckpoint();
Node* left = Node* left =
environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
Node* right = environment()->LookupAccumulator(); Node* right = environment()->LookupAccumulator();
Node* result = NewNode(simplified()->ReferenceEqual(), left, right);
Node* node = NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), environment()->BindAccumulator(result);
left, right);
environment()->BindAccumulator(node, Environment::kAttachFrameState);
} }
void BytecodeGraphBuilder::BuildTestingOp(const Operator* op) { void BytecodeGraphBuilder::BuildTestingOp(const Operator* op) {
......
...@@ -548,7 +548,7 @@ bool BytecodeHasNoSideEffect(interpreter::Bytecode bytecode) { ...@@ -548,7 +548,7 @@ bool BytecodeHasNoSideEffect(interpreter::Bytecode bytecode) {
case Bytecode::kTestGreaterThanOrEqual: case Bytecode::kTestGreaterThanOrEqual:
case Bytecode::kTestInstanceOf: case Bytecode::kTestInstanceOf:
case Bytecode::kTestIn: case Bytecode::kTestIn:
case Bytecode::kTestEqualStrictNoFeedback: case Bytecode::kTestReferenceEqual:
case Bytecode::kTestUndetectable: case Bytecode::kTestUndetectable:
case Bytecode::kTestTypeOf: case Bytecode::kTestTypeOf:
case Bytecode::kTestUndefined: case Bytecode::kTestUndefined:
......
...@@ -511,9 +511,6 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::CompareOperation( ...@@ -511,9 +511,6 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::CompareOperation(
BytecodeArrayBuilder& BytecodeArrayBuilder::CompareOperation(Token::Value op, BytecodeArrayBuilder& BytecodeArrayBuilder::CompareOperation(Token::Value op,
Register reg) { Register reg) {
switch (op) { switch (op) {
case Token::Value::EQ_STRICT:
OutputTestEqualStrictNoFeedback(reg);
break;
case Token::Value::IN: case Token::Value::IN:
OutputTestIn(reg); OutputTestIn(reg);
break; break;
...@@ -523,6 +520,11 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::CompareOperation(Token::Value op, ...@@ -523,6 +520,11 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::CompareOperation(Token::Value op,
return *this; return *this;
} }
BytecodeArrayBuilder& BytecodeArrayBuilder::CompareReference(Register reg) {
OutputTestReferenceEqual(reg);
return *this;
}
BytecodeArrayBuilder& BytecodeArrayBuilder::CompareUndetectable() { BytecodeArrayBuilder& BytecodeArrayBuilder::CompareUndetectable() {
OutputTestUndetectable(); OutputTestUndetectable();
return *this; return *this;
......
...@@ -366,6 +366,7 @@ class V8_EXPORT_PRIVATE BytecodeArrayBuilder final { ...@@ -366,6 +366,7 @@ class V8_EXPORT_PRIVATE BytecodeArrayBuilder final {
BytecodeArrayBuilder& CompareOperation(Token::Value op, Register reg, BytecodeArrayBuilder& CompareOperation(Token::Value op, Register reg,
int feedback_slot); int feedback_slot);
BytecodeArrayBuilder& CompareOperation(Token::Value op, Register reg); BytecodeArrayBuilder& CompareOperation(Token::Value op, Register reg);
BytecodeArrayBuilder& CompareReference(Register reg);
BytecodeArrayBuilder& CompareUndetectable(); BytecodeArrayBuilder& CompareUndetectable();
BytecodeArrayBuilder& CompareUndefined(); BytecodeArrayBuilder& CompareUndefined();
BytecodeArrayBuilder& CompareNull(); BytecodeArrayBuilder& CompareNull();
......
...@@ -235,7 +235,7 @@ class BytecodeGenerator::ControlScope::DeferredCommands final { ...@@ -235,7 +235,7 @@ class BytecodeGenerator::ControlScope::DeferredCommands final {
builder() builder()
->LoadLiteral(Smi::FromInt(entry.token)) ->LoadLiteral(Smi::FromInt(entry.token))
.CompareOperation(Token::EQ_STRICT, token_register_) .CompareReference(token_register_)
.JumpIfFalse(ToBooleanMode::kAlreadyBoolean, &fall_through); .JumpIfFalse(ToBooleanMode::kAlreadyBoolean, &fall_through);
if (CommandUsesAccumulator(entry.command)) { if (CommandUsesAccumulator(entry.command)) {
...@@ -899,6 +899,7 @@ BytecodeGenerator::BytecodeGenerator( ...@@ -899,6 +899,7 @@ BytecodeGenerator::BytecodeGenerator(
execution_context_(nullptr), execution_context_(nullptr),
execution_result_(nullptr), execution_result_(nullptr),
incoming_new_target_or_generator_(), incoming_new_target_or_generator_(),
dummy_feedback_slot_(),
generator_jump_table_(nullptr), generator_jump_table_(nullptr),
suspend_count_(0), suspend_count_(0),
loop_depth_(0), loop_depth_(0),
...@@ -1846,10 +1847,13 @@ void BytecodeGenerator::BuildClassLiteral(ClassLiteral* expr) { ...@@ -1846,10 +1847,13 @@ void BytecodeGenerator::BuildClassLiteral(ClassLiteral* expr) {
// computed property name case in the parser. Since this is the only // computed property name case in the parser. Since this is the only
// case where we need to check for an own read only property we // case where we need to check for an own read only property we
// special case this so we do not need to do this for every property. // special case this so we do not need to do this for every property.
FeedbackSlot slot = GetDummyCompareICSlot();
BytecodeLabel done; BytecodeLabel done;
builder() builder()
->LoadLiteral(ast_string_constants()->prototype_string()) ->LoadLiteral(ast_string_constants()->prototype_string())
.CompareOperation(Token::Value::EQ_STRICT, key) .CompareOperation(Token::Value::EQ_STRICT, key,
feedback_index(slot))
.JumpIfFalse(ToBooleanMode::kAlreadyBoolean, &done) .JumpIfFalse(ToBooleanMode::kAlreadyBoolean, &done)
.CallRuntime(Runtime::kThrowStaticPrototypeError) .CallRuntime(Runtime::kThrowStaticPrototypeError)
.Bind(&done); .Bind(&done);
...@@ -3219,7 +3223,7 @@ void BytecodeGenerator::VisitYieldStar(YieldStar* expr) { ...@@ -3219,7 +3223,7 @@ void BytecodeGenerator::VisitYieldStar(YieldStar* expr) {
feedback_index(feedback_spec()->AddLoadICSlot())) feedback_index(feedback_spec()->AddLoadICSlot()))
.StoreAccumulatorInRegister(output_value) .StoreAccumulatorInRegister(output_value)
.LoadLiteral(Smi::FromInt(JSGeneratorObject::kReturn)) .LoadLiteral(Smi::FromInt(JSGeneratorObject::kReturn))
.CompareOperation(Token::EQ_STRICT, resume_mode) .CompareReference(resume_mode)
.JumpIfFalse(ToBooleanMode::kAlreadyBoolean, &completion_is_output_value) .JumpIfFalse(ToBooleanMode::kAlreadyBoolean, &completion_is_output_value)
.LoadAccumulatorWithRegister(output_value); .LoadAccumulatorWithRegister(output_value);
if (iterator_type == IteratorType::kAsync) { if (iterator_type == IteratorType::kAsync) {
...@@ -3288,7 +3292,7 @@ void BytecodeGenerator::BuildAwait(Expression* await_expr) { ...@@ -3288,7 +3292,7 @@ void BytecodeGenerator::BuildAwait(Expression* await_expr) {
.CallRuntime(Runtime::kInlineGeneratorGetResumeMode, generator_object()) .CallRuntime(Runtime::kInlineGeneratorGetResumeMode, generator_object())
.StoreAccumulatorInRegister(resume_mode) .StoreAccumulatorInRegister(resume_mode)
.LoadLiteral(Smi::FromInt(JSGeneratorObject::kNext)) .LoadLiteral(Smi::FromInt(JSGeneratorObject::kNext))
.CompareOperation(Token::EQ_STRICT, resume_mode) .CompareReference(resume_mode)
.JumpIfTrue(ToBooleanMode::kAlreadyBoolean, &resume_next); .JumpIfTrue(ToBooleanMode::kAlreadyBoolean, &resume_next);
// Resume with "throw" completion (rethrow the received value). // Resume with "throw" completion (rethrow the received value).
...@@ -5050,6 +5054,14 @@ FeedbackSlot BytecodeGenerator::GetCachedCreateClosureSlot( ...@@ -5050,6 +5054,14 @@ FeedbackSlot BytecodeGenerator::GetCachedCreateClosureSlot(
return slot; return slot;
} }
FeedbackSlot BytecodeGenerator::GetDummyCompareICSlot() {
if (!dummy_feedback_slot_.IsInvalid()) {
return dummy_feedback_slot_;
}
dummy_feedback_slot_ = feedback_spec()->AddCompareICSlot();
return dummy_feedback_slot_;
}
Runtime::FunctionId BytecodeGenerator::StoreToSuperRuntimeId() { Runtime::FunctionId BytecodeGenerator::StoreToSuperRuntimeId() {
return is_strict(language_mode()) ? Runtime::kStoreToSuper_Strict return is_strict(language_mode()) ? Runtime::kStoreToSuper_Strict
: Runtime::kStoreToSuper_Sloppy; : Runtime::kStoreToSuper_Sloppy;
......
...@@ -270,6 +270,7 @@ class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> { ...@@ -270,6 +270,7 @@ class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> {
FeedbackSlot GetCachedStoreGlobalICSlot(LanguageMode language_mode, FeedbackSlot GetCachedStoreGlobalICSlot(LanguageMode language_mode,
Variable* variable); Variable* variable);
FeedbackSlot GetCachedCreateClosureSlot(FunctionLiteral* literal); FeedbackSlot GetCachedCreateClosureSlot(FunctionLiteral* literal);
FeedbackSlot GetDummyCompareICSlot();
void AddToEagerLiteralsIfEager(FunctionLiteral* literal); void AddToEagerLiteralsIfEager(FunctionLiteral* literal);
...@@ -356,6 +357,10 @@ class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> { ...@@ -356,6 +357,10 @@ class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> {
Register incoming_new_target_or_generator_; Register incoming_new_target_or_generator_;
// Dummy feedback slot for compare operations, where we don't care about
// feedback
FeedbackSlot dummy_feedback_slot_;
BytecodeJumpTable* generator_jump_table_; BytecodeJumpTable* generator_jump_table_;
int suspend_count_; int suspend_count_;
int loop_depth_; int loop_depth_;
......
...@@ -209,7 +209,7 @@ namespace interpreter { ...@@ -209,7 +209,7 @@ namespace interpreter {
OperandType::kIdx) \ OperandType::kIdx) \
V(TestGreaterThanOrEqual, AccumulatorUse::kReadWrite, OperandType::kReg, \ V(TestGreaterThanOrEqual, AccumulatorUse::kReadWrite, OperandType::kReg, \
OperandType::kIdx) \ OperandType::kIdx) \
V(TestEqualStrictNoFeedback, AccumulatorUse::kReadWrite, OperandType::kReg) \ V(TestReferenceEqual, AccumulatorUse::kReadWrite, OperandType::kReg) \
V(TestInstanceOf, AccumulatorUse::kReadWrite, OperandType::kReg, \ V(TestInstanceOf, AccumulatorUse::kReadWrite, OperandType::kReg, \
OperandType::kIdx) \ OperandType::kIdx) \
V(TestIn, AccumulatorUse::kReadWrite, OperandType::kReg) \ V(TestIn, AccumulatorUse::kReadWrite, OperandType::kReg) \
......
...@@ -1797,18 +1797,14 @@ IGNITION_HANDLER(TestGreaterThanOrEqual, InterpreterCompareOpAssembler) { ...@@ -1797,18 +1797,14 @@ IGNITION_HANDLER(TestGreaterThanOrEqual, InterpreterCompareOpAssembler) {
CompareOpWithFeedback(Operation::kGreaterThanOrEqual); CompareOpWithFeedback(Operation::kGreaterThanOrEqual);
} }
// TestEqualStrictNoFeedback <src> // TestReferenceEqual <src>
// //
// Test if the value in the <src> register is strictly equal to the accumulator. // Test if the value in the <src> register is equal to the accumulator
// Type feedback is not collected. // by means of simple comparison. For SMIs and simple reference comparisons.
IGNITION_HANDLER(TestEqualStrictNoFeedback, InterpreterAssembler) { IGNITION_HANDLER(TestReferenceEqual, InterpreterAssembler) {
Node* lhs = LoadRegisterAtOperandIndex(0); Node* lhs = LoadRegisterAtOperandIndex(0);
Node* rhs = GetAccumulator(); Node* rhs = GetAccumulator();
// TODO(5310): This is called only when lhs and rhs are Smis (for ex: Node* result = SelectBooleanConstant(WordEqual(lhs, rhs));
// try-finally or generators) or strings (only when visiting
// ClassLiteralProperties). We should be able to optimize this and not perform
// the full strict equality.
Node* result = StrictEqual(lhs, rhs);
SetAccumulator(result); SetAccumulator(result);
Dispatch(); Dispatch();
} }
......
...@@ -46,7 +46,7 @@ bytecodes: [ ...@@ -46,7 +46,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1),
B(Star), R(6), B(Star), R(6),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(6), B(TestReferenceEqual), R(6),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(5), B(Ldar), R(5),
B(ReThrow), B(ReThrow),
...@@ -173,7 +173,7 @@ bytecodes: [ ...@@ -173,7 +173,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1),
B(Star), R(6), B(Star), R(6),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(6), B(TestReferenceEqual), R(6),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(5), B(Ldar), R(5),
B(ReThrow), B(ReThrow),
...@@ -411,7 +411,7 @@ bytecodes: [ ...@@ -411,7 +411,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
B(Star), R(16), B(Star), R(16),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(16), B(TestReferenceEqual), R(16),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(15), B(Ldar), R(15),
B(ReThrow), B(ReThrow),
...@@ -587,7 +587,7 @@ bytecodes: [ ...@@ -587,7 +587,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1),
B(Star), R(13), B(Star), R(13),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(13), B(TestReferenceEqual), R(13),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(12), B(Ldar), R(12),
B(ReThrow), B(ReThrow),
...@@ -605,7 +605,7 @@ bytecodes: [ ...@@ -605,7 +605,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1),
B(Star), R(13), B(Star), R(13),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(13), B(TestReferenceEqual), R(13),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(12), B(Ldar), R(12),
B(ReThrow), B(ReThrow),
...@@ -630,7 +630,7 @@ bytecodes: [ ...@@ -630,7 +630,7 @@ bytecodes: [
B(LdaNamedProperty), R(5), U8(16), U8(32), B(LdaNamedProperty), R(5), U8(16), U8(32),
B(Star), R(7), B(Star), R(7),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(6), B(TestReferenceEqual), R(6),
B(JumpIfFalse), U8(10), B(JumpIfFalse), U8(10),
B(LdaZero), B(LdaZero),
B(Star), R(1), B(Star), R(1),
...@@ -646,7 +646,7 @@ bytecodes: [ ...@@ -646,7 +646,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1),
B(Star), R(6), B(Star), R(6),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(6), B(TestReferenceEqual), R(6),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(5), B(Ldar), R(5),
B(ReThrow), B(ReThrow),
......
...@@ -88,7 +88,7 @@ snippet: " ...@@ -88,7 +88,7 @@ snippet: "
" "
frame size: 11 frame size: 11
parameter count: 1 parameter count: 1
bytecode array length: 75 bytecode array length: 76
bytecodes: [ bytecodes: [
B(CreateFunctionContext), U8(2), B(CreateFunctionContext), U8(2),
B(PushContext), R(2), B(PushContext), R(2),
...@@ -110,11 +110,11 @@ bytecodes: [ ...@@ -110,11 +110,11 @@ bytecodes: [
B(LdaImmutableCurrentContextSlot), U8(5), B(LdaImmutableCurrentContextSlot), U8(5),
/* 106 E> */ B(ToName), R(9), /* 106 E> */ B(ToName), R(9),
B(LdaConstant), U8(5), B(LdaConstant), U8(5),
B(TestEqualStrictNoFeedback), R(9), B(TestEqualStrict), R(9), U8(2),
B(Mov), R(3), R(5), B(Mov), R(3), R(5),
B(JumpIfFalse), U8(7), B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0), B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0),
B(CreateClosure), U8(6), U8(2), U8(2), B(CreateClosure), U8(6), U8(3), U8(2),
B(Star), R(10), B(Star), R(10),
B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(7), B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(7),
B(Star), R(4), B(Star), R(4),
......
...@@ -60,7 +60,7 @@ bytecodes: [ ...@@ -60,7 +60,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
B(Star), R(21), B(Star), R(21),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(21), B(TestReferenceEqual), R(21),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(20), B(Ldar), R(20),
B(ReThrow), B(ReThrow),
...@@ -144,7 +144,7 @@ bytecodes: [ ...@@ -144,7 +144,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
B(Star), R(21), B(Star), R(21),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(21), B(TestReferenceEqual), R(21),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(20), B(Ldar), R(20),
B(ReThrow), B(ReThrow),
...@@ -167,7 +167,7 @@ bytecodes: [ ...@@ -167,7 +167,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
B(Star), R(20), B(Star), R(20),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(20), B(TestReferenceEqual), R(20),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(19), B(Ldar), R(19),
B(ReThrow), B(ReThrow),
...@@ -179,7 +179,7 @@ bytecodes: [ ...@@ -179,7 +179,7 @@ bytecodes: [
B(Ldar), R(18), B(Ldar), R(18),
B(SetPendingMessage), B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(16), B(TestReferenceEqual), R(16),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(17), B(Ldar), R(17),
B(ReThrow), B(ReThrow),
...@@ -313,7 +313,7 @@ bytecodes: [ ...@@ -313,7 +313,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
B(Star), R(21), B(Star), R(21),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(21), B(TestReferenceEqual), R(21),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(20), B(Ldar), R(20),
B(ReThrow), B(ReThrow),
...@@ -398,7 +398,7 @@ bytecodes: [ ...@@ -398,7 +398,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
B(Star), R(21), B(Star), R(21),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(21), B(TestReferenceEqual), R(21),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(20), B(Ldar), R(20),
B(ReThrow), B(ReThrow),
...@@ -421,7 +421,7 @@ bytecodes: [ ...@@ -421,7 +421,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
B(Star), R(20), B(Star), R(20),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(20), B(TestReferenceEqual), R(20),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(19), B(Ldar), R(19),
B(ReThrow), B(ReThrow),
...@@ -582,7 +582,7 @@ bytecodes: [ ...@@ -582,7 +582,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
B(Star), R(21), B(Star), R(21),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(21), B(TestReferenceEqual), R(21),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(20), B(Ldar), R(20),
B(ReThrow), B(ReThrow),
...@@ -674,7 +674,7 @@ bytecodes: [ ...@@ -674,7 +674,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
B(Star), R(21), B(Star), R(21),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(21), B(TestReferenceEqual), R(21),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(20), B(Ldar), R(20),
B(ReThrow), B(ReThrow),
...@@ -697,7 +697,7 @@ bytecodes: [ ...@@ -697,7 +697,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
B(Star), R(20), B(Star), R(20),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(20), B(TestReferenceEqual), R(20),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(19), B(Ldar), R(19),
B(ReThrow), B(ReThrow),
...@@ -709,7 +709,7 @@ bytecodes: [ ...@@ -709,7 +709,7 @@ bytecodes: [
B(Ldar), R(18), B(Ldar), R(18),
B(SetPendingMessage), B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(16), B(TestReferenceEqual), R(16),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(17), B(Ldar), R(17),
B(ReThrow), B(ReThrow),
......
...@@ -112,7 +112,7 @@ bytecodes: [ ...@@ -112,7 +112,7 @@ bytecodes: [
B(Ldar), R(11), B(Ldar), R(11),
B(SetPendingMessage), B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(9), B(TestReferenceEqual), R(9),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(10), B(Ldar), R(10),
B(ReThrow), B(ReThrow),
...@@ -392,7 +392,7 @@ bytecodes: [ ...@@ -392,7 +392,7 @@ bytecodes: [
B(Ldar), R(11), B(Ldar), R(11),
B(SetPendingMessage), B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(9), B(TestReferenceEqual), R(9),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(10), B(Ldar), R(10),
B(ReThrow), B(ReThrow),
......
...@@ -116,7 +116,7 @@ bytecodes: [ ...@@ -116,7 +116,7 @@ bytecodes: [
B(Ldar), R(13), B(Ldar), R(13),
B(SetPendingMessage), B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(11), B(TestReferenceEqual), R(11),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(12), B(Ldar), R(12),
B(ReThrow), B(ReThrow),
...@@ -287,7 +287,7 @@ bytecodes: [ ...@@ -287,7 +287,7 @@ bytecodes: [
B(Ldar), R(13), B(Ldar), R(13),
B(SetPendingMessage), B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(11), B(TestReferenceEqual), R(11),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(12), B(Ldar), R(12),
B(ReThrow), B(ReThrow),
...@@ -434,7 +434,7 @@ bytecodes: [ ...@@ -434,7 +434,7 @@ bytecodes: [
B(Ldar), R(11), B(Ldar), R(11),
B(SetPendingMessage), B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(9), B(TestReferenceEqual), R(9),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(10), B(Ldar), R(10),
B(ReThrow), B(ReThrow),
...@@ -585,7 +585,7 @@ bytecodes: [ ...@@ -585,7 +585,7 @@ bytecodes: [
B(Ldar), R(16), B(Ldar), R(16),
B(SetPendingMessage), B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(14), B(TestReferenceEqual), R(14),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(15), B(Ldar), R(15),
B(ReThrow), B(ReThrow),
...@@ -739,7 +739,7 @@ bytecodes: [ ...@@ -739,7 +739,7 @@ bytecodes: [
B(Ldar), R(15), B(Ldar), R(15),
B(SetPendingMessage), B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(13), B(TestReferenceEqual), R(13),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(14), B(Ldar), R(14),
B(ReThrow), B(ReThrow),
...@@ -1063,7 +1063,7 @@ bytecodes: [ ...@@ -1063,7 +1063,7 @@ bytecodes: [
B(Ldar), R(20), B(Ldar), R(20),
B(SetPendingMessage), B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(18), B(TestReferenceEqual), R(18),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(19), B(Ldar), R(19),
B(ReThrow), B(ReThrow),
...@@ -1203,7 +1203,7 @@ bytecodes: [ ...@@ -1203,7 +1203,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(2), U8(1),
B(Star), R(22), B(Star), R(22),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(22), B(TestReferenceEqual), R(22),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(21), B(Ldar), R(21),
B(ReThrow), B(ReThrow),
...@@ -1279,7 +1279,7 @@ bytecodes: [ ...@@ -1279,7 +1279,7 @@ bytecodes: [
B(Ldar), R(19), B(Ldar), R(19),
B(SetPendingMessage), B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(17), B(TestReferenceEqual), R(17),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(18), B(Ldar), R(18),
B(ReThrow), B(ReThrow),
......
...@@ -348,7 +348,7 @@ bytecodes: [ ...@@ -348,7 +348,7 @@ bytecodes: [
B(LdaNamedProperty), R(1), U8(12), U8(26), B(LdaNamedProperty), R(1), U8(12), U8(26),
B(Star), R(3), B(Star), R(3),
B(LdaSmi), I8(1), B(LdaSmi), I8(1),
B(TestEqualStrictNoFeedback), R(2), B(TestReferenceEqual), R(2),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(3), B(Ldar), R(3),
/* 54 S> */ B(Return), /* 54 S> */ B(Return),
......
...@@ -500,7 +500,7 @@ bytecodes: [ ...@@ -500,7 +500,7 @@ bytecodes: [
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1), B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(1), U8(1),
B(Star), R(8), B(Star), R(8),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(8), B(TestReferenceEqual), R(8),
B(JumpIfTrue), U8(5), B(JumpIfTrue), U8(5),
B(Ldar), R(7), B(Ldar), R(7),
B(ReThrow), B(ReThrow),
......
...@@ -29,7 +29,7 @@ snippet: " ...@@ -29,7 +29,7 @@ snippet: "
" "
frame size: 11 frame size: 11
parameter count: 1 parameter count: 1
bytecode array length: 193 bytecode array length: 195
bytecodes: [ bytecodes: [
/* 30 E> */ B(StackCheck), /* 30 E> */ B(StackCheck),
B(Ldar), R(closure), B(Ldar), R(closure),
...@@ -51,7 +51,7 @@ bytecodes: [ ...@@ -51,7 +51,7 @@ bytecodes: [
B(LdaConstant), U8(4), B(LdaConstant), U8(4),
B(Star), R(10), B(Star), R(10),
B(LdaConstant), U8(5), B(LdaConstant), U8(5),
B(TestEqualStrictNoFeedback), R(10), B(TestEqualStrict), R(10), U8(1),
B(Mov), R(5), R(7), B(Mov), R(5), R(7),
B(JumpIfFalse), U8(7), B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0), B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0),
...@@ -60,12 +60,12 @@ bytecodes: [ ...@@ -60,12 +60,12 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(5), B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(5),
B(Star), R(6), B(Star), R(6),
B(Mov), R(5), R(1), B(Mov), R(5), R(1),
B(CreateClosure), U8(6), U8(1), U8(2), B(CreateClosure), U8(6), U8(2), U8(2),
B(Star), R(7), B(Star), R(7),
B(StaNamedProperty), R(5), U8(7), U8(2), B(StaNamedProperty), R(5), U8(7), U8(3),
B(CreateClosure), U8(8), U8(4), U8(2), B(CreateClosure), U8(8), U8(5), U8(2),
B(Star), R(9), B(Star), R(9),
B(CallProperty0), R(9), R(1), U8(5), B(CallProperty0), R(9), R(1), U8(6),
B(PopContext), R(4), B(PopContext), R(4),
B(Mov), R(1), R(2), B(Mov), R(1), R(2),
B(Ldar), R(closure), B(Ldar), R(closure),
...@@ -77,7 +77,7 @@ bytecodes: [ ...@@ -77,7 +77,7 @@ bytecodes: [
B(StaCurrentContextSlot), U8(5), B(StaCurrentContextSlot), U8(5),
B(LdaTheHole), B(LdaTheHole),
B(Star), R(8), B(Star), R(8),
B(CreateClosure), U8(11), U8(7), U8(2), B(CreateClosure), U8(11), U8(8), U8(2),
B(Star), R(5), B(Star), R(5),
B(LdaConstant), U8(10), B(LdaConstant), U8(10),
B(Star), R(6), B(Star), R(6),
...@@ -87,7 +87,7 @@ bytecodes: [ ...@@ -87,7 +87,7 @@ bytecodes: [
B(LdaConstant), U8(4), B(LdaConstant), U8(4),
B(Star), R(10), B(Star), R(10),
B(LdaConstant), U8(5), B(LdaConstant), U8(5),
B(TestEqualStrictNoFeedback), R(10), B(TestEqualStrict), R(10), U8(1),
B(Mov), R(5), R(7), B(Mov), R(5), R(7),
B(JumpIfFalse), U8(7), B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0), B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0),
...@@ -96,18 +96,18 @@ bytecodes: [ ...@@ -96,18 +96,18 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(5), B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(5),
B(Star), R(6), B(Star), R(6),
B(Mov), R(5), R(0), B(Mov), R(5), R(0),
B(CreateClosure), U8(12), U8(8), U8(2), B(CreateClosure), U8(12), U8(9), U8(2),
B(Star), R(7), B(Star), R(7),
B(StaNamedProperty), R(5), U8(7), U8(9), B(StaNamedProperty), R(5), U8(7), U8(10),
B(CreateClosure), U8(13), U8(11), U8(2), B(CreateClosure), U8(13), U8(12), U8(2),
B(Star), R(9), B(Star), R(9),
B(CallProperty0), R(9), R(0), U8(12), B(CallProperty0), R(9), R(0), U8(13),
B(PopContext), R(4), B(PopContext), R(4),
B(Mov), R(0), R(3), B(Mov), R(0), R(3),
/* 197 S> */ B(Ldar), R(2), /* 197 S> */ B(Ldar), R(2),
/* 197 E> */ B(Construct), R(2), R(0), U8(0), U8(14), /* 197 E> */ B(Construct), R(2), R(0), U8(0), U8(15),
/* 206 S> */ B(Ldar), R(0), /* 206 S> */ B(Ldar), R(0),
/* 206 E> */ B(Construct), R(0), R(0), U8(0), U8(16), /* 206 E> */ B(Construct), R(0), R(0), U8(0), U8(17),
B(LdaUndefined), B(LdaUndefined),
/* 215 S> */ B(Return), /* 215 S> */ B(Return),
] ]
...@@ -168,7 +168,7 @@ snippet: " ...@@ -168,7 +168,7 @@ snippet: "
" "
frame size: 15 frame size: 15
parameter count: 1 parameter count: 1
bytecode array length: 346 bytecode array length: 349
bytecodes: [ bytecodes: [
/* 30 E> */ B(StackCheck), /* 30 E> */ B(StackCheck),
B(Ldar), R(closure), B(Ldar), R(closure),
...@@ -197,7 +197,7 @@ bytecodes: [ ...@@ -197,7 +197,7 @@ bytecodes: [
B(LdaConstant), U8(6), B(LdaConstant), U8(6),
B(Star), R(12), B(Star), R(12),
B(LdaConstant), U8(7), B(LdaConstant), U8(7),
B(TestEqualStrictNoFeedback), R(12), B(TestEqualStrict), R(12), U8(2),
B(Mov), R(13), R(10), B(Mov), R(13), R(10),
B(Mov), R(7), R(9), B(Mov), R(7), R(9),
B(JumpIfFalse), U8(7), B(JumpIfFalse), U8(7),
...@@ -207,12 +207,12 @@ bytecodes: [ ...@@ -207,12 +207,12 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(5), B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(5),
B(Star), R(8), B(Star), R(8),
B(Mov), R(7), R(2), B(Mov), R(7), R(2),
B(CreateClosure), U8(8), U8(2), U8(2), B(CreateClosure), U8(8), U8(3), U8(2),
B(Star), R(9), B(Star), R(9),
B(StaNamedProperty), R(7), U8(9), U8(3), B(StaNamedProperty), R(7), U8(9), U8(4),
B(CreateClosure), U8(10), U8(5), U8(2), B(CreateClosure), U8(10), U8(6), U8(2),
B(Star), R(11), B(Star), R(11),
B(CallProperty0), R(11), R(2), U8(6), B(CallProperty0), R(11), R(2), U8(7),
B(PopContext), R(6), B(PopContext), R(6),
B(Mov), R(2), R(3), B(Mov), R(2), R(3),
B(Ldar), R(closure), B(Ldar), R(closure),
...@@ -224,14 +224,14 @@ bytecodes: [ ...@@ -224,14 +224,14 @@ bytecodes: [
B(StaCurrentContextSlot), U8(5), B(StaCurrentContextSlot), U8(5),
B(LdaTheHole), B(LdaTheHole),
B(Star), R(14), B(Star), R(14),
B(CreateClosure), U8(14), U8(8), U8(2), B(CreateClosure), U8(14), U8(9), U8(2),
B(Star), R(11), B(Star), R(11),
B(LdaConstant), U8(13), B(LdaConstant), U8(13),
B(Star), R(12), B(Star), R(12),
B(Mov), R(11), R(13), B(Mov), R(11), R(13),
B(CallRuntime), U16(Runtime::kDefineClass), R(12), U8(3), B(CallRuntime), U16(Runtime::kDefineClass), R(12), U8(3),
B(Star), R(12), B(Star), R(12),
B(CreateClosure), U8(15), U8(9), U8(2), B(CreateClosure), U8(15), U8(10), U8(2),
B(Star), R(7), B(Star), R(7),
B(LdaConstant), U8(12), B(LdaConstant), U8(12),
B(Star), R(8), B(Star), R(8),
...@@ -241,24 +241,24 @@ bytecodes: [ ...@@ -241,24 +241,24 @@ bytecodes: [
B(LdaConstant), U8(6), B(LdaConstant), U8(6),
B(Star), R(12), B(Star), R(12),
B(LdaConstant), U8(7), B(LdaConstant), U8(7),
B(TestEqualStrictNoFeedback), R(12), B(TestEqualStrict), R(12), U8(2),
B(Mov), R(7), R(9), B(Mov), R(7), R(9),
B(Mov), R(13), R(10), B(Mov), R(13), R(10),
B(JumpIfFalse), U8(7), B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0), B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0),
B(Ldar), R(12), B(Ldar), R(12),
B(StaCurrentContextSlot), U8(5), B(StaCurrentContextSlot), U8(5),
B(CreateClosure), U8(16), U8(10), U8(2), B(CreateClosure), U8(16), U8(11), U8(2),
B(Star), R(13), B(Star), R(13),
B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(6), B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(6),
B(Star), R(8), B(Star), R(8),
B(Mov), R(7), R(1), B(Mov), R(7), R(1),
B(CreateClosure), U8(17), U8(11), U8(2), B(CreateClosure), U8(17), U8(12), U8(2),
B(Star), R(9), B(Star), R(9),
B(StaNamedProperty), R(7), U8(9), U8(12), B(StaNamedProperty), R(7), U8(9), U8(13),
B(CreateClosure), U8(18), U8(14), U8(2), B(CreateClosure), U8(18), U8(15), U8(2),
B(Star), R(11), B(Star), R(11),
B(CallProperty0), R(11), R(1), U8(15), B(CallProperty0), R(11), R(1), U8(16),
B(PopContext), R(6), B(PopContext), R(6),
B(Mov), R(1), R(4), B(Mov), R(1), R(4),
B(Ldar), R(closure), B(Ldar), R(closure),
...@@ -268,7 +268,7 @@ bytecodes: [ ...@@ -268,7 +268,7 @@ bytecodes: [
B(StaCurrentContextSlot), U8(4), B(StaCurrentContextSlot), U8(4),
B(LdaTheHole), B(LdaTheHole),
B(StaCurrentContextSlot), U8(5), B(StaCurrentContextSlot), U8(5),
/* 313 E> */ B(CreateClosure), U8(21), U8(17), U8(2), /* 313 E> */ B(CreateClosure), U8(21), U8(18), U8(2),
B(Star), R(7), B(Star), R(7),
B(LdaConstant), U8(20), B(LdaConstant), U8(20),
B(Star), R(8), B(Star), R(8),
...@@ -278,7 +278,7 @@ bytecodes: [ ...@@ -278,7 +278,7 @@ bytecodes: [
B(LdaConstant), U8(6), B(LdaConstant), U8(6),
B(Star), R(12), B(Star), R(12),
B(LdaConstant), U8(7), B(LdaConstant), U8(7),
B(TestEqualStrictNoFeedback), R(12), B(TestEqualStrict), R(12), U8(2),
B(Mov), R(1), R(10), B(Mov), R(1), R(10),
B(Mov), R(7), R(9), B(Mov), R(7), R(9),
B(JumpIfFalse), U8(7), B(JumpIfFalse), U8(7),
...@@ -288,22 +288,22 @@ bytecodes: [ ...@@ -288,22 +288,22 @@ bytecodes: [
B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(5), B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(5),
B(Star), R(8), B(Star), R(8),
B(Mov), R(7), R(0), B(Mov), R(7), R(0),
B(CreateClosure), U8(22), U8(18), U8(2), B(CreateClosure), U8(22), U8(19), U8(2),
B(Star), R(9), B(Star), R(9),
B(StaNamedProperty), R(7), U8(9), U8(19), B(StaNamedProperty), R(7), U8(9), U8(20),
B(CreateClosure), U8(23), U8(21), U8(2), B(CreateClosure), U8(23), U8(22), U8(2),
B(Star), R(11), B(Star), R(11),
B(Ldar), R(0), B(Ldar), R(0),
B(StaNamedProperty), R(11), U8(24), U8(22), B(StaNamedProperty), R(11), U8(24), U8(23),
B(CallProperty0), R(11), R(0), U8(24), B(CallProperty0), R(11), R(0), U8(25),
B(PopContext), R(6), B(PopContext), R(6),
B(Mov), R(0), R(5), B(Mov), R(0), R(5),
/* 456 S> */ B(Ldar), R(3), /* 456 S> */ B(Ldar), R(3),
/* 456 E> */ B(Construct), R(3), R(0), U8(0), U8(26), /* 456 E> */ B(Construct), R(3), R(0), U8(0), U8(27),
/* 465 S> */ B(Ldar), R(4), /* 465 S> */ B(Ldar), R(4),
/* 465 E> */ B(Construct), R(4), R(0), U8(0), U8(28), /* 465 E> */ B(Construct), R(4), R(0), U8(0), U8(29),
/* 474 S> */ B(Ldar), R(0), /* 474 S> */ B(Ldar), R(0),
/* 474 E> */ B(Construct), R(0), R(0), U8(0), U8(30), /* 474 E> */ B(Construct), R(0), R(0), U8(0), U8(31),
B(LdaUndefined), B(LdaUndefined),
/* 483 S> */ B(Return), /* 483 S> */ B(Return),
] ]
......
...@@ -35,7 +35,7 @@ bytecodes: [ ...@@ -35,7 +35,7 @@ bytecodes: [
B(Ldar), R(3), B(Ldar), R(3),
/* 72 E> */ B(SetPendingMessage), /* 72 E> */ B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(1), B(TestReferenceEqual), R(1),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(2), B(Ldar), R(2),
B(ReThrow), B(ReThrow),
...@@ -91,7 +91,7 @@ bytecodes: [ ...@@ -91,7 +91,7 @@ bytecodes: [
B(Ldar), R(3), B(Ldar), R(3),
/* 92 E> */ B(SetPendingMessage), /* 92 E> */ B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(1), B(TestReferenceEqual), R(1),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(2), B(Ldar), R(2),
B(ReThrow), B(ReThrow),
...@@ -162,7 +162,7 @@ bytecodes: [ ...@@ -162,7 +162,7 @@ bytecodes: [
B(Ldar), R(3), B(Ldar), R(3),
/* 116 E> */ B(SetPendingMessage), /* 116 E> */ B(SetPendingMessage),
B(LdaZero), B(LdaZero),
B(TestEqualStrictNoFeedback), R(1), B(TestReferenceEqual), R(1),
B(JumpIfFalse), U8(5), B(JumpIfFalse), U8(5),
B(Ldar), R(2), B(Ldar), R(2),
B(ReThrow), B(ReThrow),
......
...@@ -249,7 +249,6 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { ...@@ -249,7 +249,6 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) {
// Emit test operator invocations. // Emit test operator invocations.
builder.CompareOperation(Token::Value::EQ, reg, 1) builder.CompareOperation(Token::Value::EQ, reg, 1)
.CompareOperation(Token::Value::EQ_STRICT, reg, 2) .CompareOperation(Token::Value::EQ_STRICT, reg, 2)
.CompareOperation(Token::Value::EQ_STRICT, reg)
.CompareOperation(Token::Value::LT, reg, 3) .CompareOperation(Token::Value::LT, reg, 3)
.CompareOperation(Token::Value::GT, reg, 4) .CompareOperation(Token::Value::GT, reg, 4)
.CompareOperation(Token::Value::LTE, reg, 5) .CompareOperation(Token::Value::LTE, reg, 5)
...@@ -257,6 +256,7 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { ...@@ -257,6 +256,7 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) {
.CompareTypeOf(TestTypeOfFlags::LiteralFlag::kNumber) .CompareTypeOf(TestTypeOfFlags::LiteralFlag::kNumber)
.CompareOperation(Token::Value::INSTANCEOF, reg, 7) .CompareOperation(Token::Value::INSTANCEOF, reg, 7)
.CompareOperation(Token::Value::IN, reg) .CompareOperation(Token::Value::IN, reg)
.CompareReference(reg)
.CompareUndetectable() .CompareUndetectable()
.CompareUndefined() .CompareUndefined()
.CompareNull(); .CompareNull();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment