Index: src/interpreter/interpreter.cc |
diff --git a/src/interpreter/interpreter.cc b/src/interpreter/interpreter.cc |
index eee21247166f6e3a8ab33a5f3ad4519c257da227..fff1f37dd2ef346d0b3ac58588e8ceb83b26cda1 100644 |
--- a/src/interpreter/interpreter.cc |
+++ b/src/interpreter/interpreter.cc |
@@ -1044,7 +1044,7 @@ void Interpreter::DoCompareOpWithFeedback(Token::Value compare_op, |
__ Bind(&gather_type_feedback); |
{ |
- Variable var_type_feedback(assembler, MachineRepresentation::kWord32); |
+ Variable var_type_feedback(assembler, MachineRepresentation::kTaggedSigned); |
Label lhs_is_not_smi(assembler), lhs_is_not_number(assembler), |
lhs_is_not_string(assembler), gather_rhs_type(assembler), |
update_feedback(assembler); |
@@ -1052,7 +1052,7 @@ void Interpreter::DoCompareOpWithFeedback(Token::Value compare_op, |
__ GotoUnless(__ TaggedIsSmi(lhs), &lhs_is_not_smi); |
var_type_feedback.Bind( |
- __ Int32Constant(CompareOperationFeedback::kSignedSmall)); |
+ __ SmiConstant(CompareOperationFeedback::kSignedSmall)); |
__ Goto(&gather_rhs_type); |
__ Bind(&lhs_is_not_smi); |
@@ -1060,8 +1060,7 @@ void Interpreter::DoCompareOpWithFeedback(Token::Value compare_op, |
Node* lhs_map = __ LoadMap(lhs); |
__ GotoUnless(__ IsHeapNumberMap(lhs_map), &lhs_is_not_number); |
- var_type_feedback.Bind( |
- __ Int32Constant(CompareOperationFeedback::kNumber)); |
+ var_type_feedback.Bind(__ SmiConstant(CompareOperationFeedback::kNumber)); |
__ Goto(&gather_rhs_type); |
__ Bind(&lhs_is_not_number); |
@@ -1074,7 +1073,7 @@ void Interpreter::DoCompareOpWithFeedback(Token::Value compare_op, |
&lhs_is_not_oddball); |
var_type_feedback.Bind( |
- __ Int32Constant(CompareOperationFeedback::kNumberOrOddball)); |
+ __ SmiConstant(CompareOperationFeedback::kNumberOrOddball)); |
__ Goto(&gather_rhs_type); |
__ Bind(&lhs_is_not_oddball); |
@@ -1086,9 +1085,9 @@ void Interpreter::DoCompareOpWithFeedback(Token::Value compare_op, |
if (Token::IsOrderedRelationalCompareOp(compare_op)) { |
var_type_feedback.Bind( |
- __ Int32Constant(CompareOperationFeedback::kString)); |
+ __ SmiConstant(CompareOperationFeedback::kString)); |
} else { |
- var_type_feedback.Bind(__ SelectInt32Constant( |
+ var_type_feedback.Bind(__ SelectSmiConstant( |
__ Word32Equal( |
__ Word32And(lhs_instance_type, |
__ Int32Constant(kIsNotInternalizedMask)), |
@@ -1099,8 +1098,7 @@ void Interpreter::DoCompareOpWithFeedback(Token::Value compare_op, |
__ Goto(&gather_rhs_type); |
__ Bind(&lhs_is_not_string); |
- var_type_feedback.Bind( |
- __ Int32Constant(CompareOperationFeedback::kAny)); |
+ var_type_feedback.Bind(__ SmiConstant(CompareOperationFeedback::kAny)); |
__ Goto(&gather_rhs_type); |
} |
} |
@@ -1111,9 +1109,9 @@ void Interpreter::DoCompareOpWithFeedback(Token::Value compare_op, |
__ GotoUnless(__ TaggedIsSmi(rhs), &rhs_is_not_smi); |
- var_type_feedback.Bind(__ Word32Or( |
- var_type_feedback.value(), |
- __ Int32Constant(CompareOperationFeedback::kSignedSmall))); |
+ var_type_feedback.Bind( |
+ __ SmiOr(var_type_feedback.value(), |
+ __ SmiConstant(CompareOperationFeedback::kSignedSmall))); |
__ Goto(&update_feedback); |
__ Bind(&rhs_is_not_smi); |
@@ -1122,8 +1120,8 @@ void Interpreter::DoCompareOpWithFeedback(Token::Value compare_op, |
__ GotoUnless(__ IsHeapNumberMap(rhs_map), &rhs_is_not_number); |
var_type_feedback.Bind( |
- __ Word32Or(var_type_feedback.value(), |
- __ Int32Constant(CompareOperationFeedback::kNumber))); |
+ __ SmiOr(var_type_feedback.value(), |
+ __ SmiConstant(CompareOperationFeedback::kNumber))); |
__ Goto(&update_feedback); |
__ Bind(&rhs_is_not_number); |
@@ -1135,9 +1133,9 @@ void Interpreter::DoCompareOpWithFeedback(Token::Value compare_op, |
__ Int32Constant(ODDBALL_TYPE)), |
&rhs_is_not_oddball); |
- var_type_feedback.Bind(__ Word32Or( |
+ var_type_feedback.Bind(__ SmiOr( |
var_type_feedback.value(), |
- __ Int32Constant(CompareOperationFeedback::kNumberOrOddball))); |
+ __ SmiConstant(CompareOperationFeedback::kNumberOrOddball))); |
__ Goto(&update_feedback); |
__ Bind(&rhs_is_not_oddball); |
@@ -1148,13 +1146,13 @@ void Interpreter::DoCompareOpWithFeedback(Token::Value compare_op, |
&rhs_is_not_string); |
if (Token::IsOrderedRelationalCompareOp(compare_op)) { |
- var_type_feedback.Bind(__ Word32Or( |
- var_type_feedback.value(), |
- __ Int32Constant(CompareOperationFeedback::kString))); |
+ var_type_feedback.Bind( |
+ __ SmiOr(var_type_feedback.value(), |
+ __ SmiConstant(CompareOperationFeedback::kString))); |
} else { |
- var_type_feedback.Bind(__ Word32Or( |
+ var_type_feedback.Bind(__ SmiOr( |
var_type_feedback.value(), |
- __ SelectInt32Constant( |
+ __ SelectSmiConstant( |
__ Word32Equal( |
__ Word32And(rhs_instance_type, |
__ Int32Constant(kIsNotInternalizedMask)), |
@@ -1166,7 +1164,7 @@ void Interpreter::DoCompareOpWithFeedback(Token::Value compare_op, |
__ Bind(&rhs_is_not_string); |
var_type_feedback.Bind( |
- __ Int32Constant(CompareOperationFeedback::kAny)); |
+ __ SmiConstant(CompareOperationFeedback::kAny)); |
__ Goto(&update_feedback); |
} |
} |
@@ -1262,8 +1260,9 @@ void Interpreter::DoBitwiseBinaryOp(Token::Value bitwise_op, |
Node* slot_index = __ BytecodeOperandIdx(1); |
Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
- Variable var_lhs_type_feedback(assembler, MachineRepresentation::kWord32), |
- var_rhs_type_feedback(assembler, MachineRepresentation::kWord32); |
+ Variable var_lhs_type_feedback(assembler, |
+ MachineRepresentation::kTaggedSigned), |
+ var_rhs_type_feedback(assembler, MachineRepresentation::kTaggedSigned); |
Node* lhs_value = __ TruncateTaggedToWord32WithFeedback( |
context, lhs, &var_lhs_type_feedback); |
Node* rhs_value = __ TruncateTaggedToWord32WithFeedback( |
@@ -1302,7 +1301,7 @@ void Interpreter::DoBitwiseBinaryOp(Token::Value bitwise_op, |
UNREACHABLE(); |
} |
- Node* result_type = __ SelectInt32Constant( |
+ Node* result_type = __ SelectSmiConstant( |
__ TaggedIsSmi(result), BinaryOperationFeedback::kSignedSmall, |
BinaryOperationFeedback::kNumber); |
@@ -1317,9 +1316,9 @@ void Interpreter::DoBitwiseBinaryOp(Token::Value bitwise_op, |
} |
Node* input_feedback = |
- __ Word32Or(var_lhs_type_feedback.value(), var_rhs_type_feedback.value()); |
- __ UpdateFeedback(__ Word32Or(result_type, input_feedback), |
- type_feedback_vector, slot_index); |
+ __ SmiOr(var_lhs_type_feedback.value(), var_rhs_type_feedback.value()); |
+ __ UpdateFeedback(__ SmiOr(result_type, input_feedback), type_feedback_vector, |
+ slot_index); |
__ SetAccumulator(result); |
__ Dispatch(); |
} |
@@ -1405,7 +1404,7 @@ void Interpreter::DoAddSmi(InterpreterAssembler* assembler) { |
__ Branch(overflow, &slowpath, &if_notoverflow); |
__ Bind(&if_notoverflow); |
{ |
- __ UpdateFeedback(__ Int32Constant(BinaryOperationFeedback::kSignedSmall), |
+ __ UpdateFeedback(__ SmiConstant(BinaryOperationFeedback::kSignedSmall), |
type_feedback_vector, slot_index); |
var_result.Bind(__ BitcastWordToTaggedSigned(__ Projection(0, pair))); |
__ Goto(&end); |
@@ -1459,7 +1458,7 @@ void Interpreter::DoSubSmi(InterpreterAssembler* assembler) { |
__ Branch(overflow, &slowpath, &if_notoverflow); |
__ Bind(&if_notoverflow); |
{ |
- __ UpdateFeedback(__ Int32Constant(BinaryOperationFeedback::kSignedSmall), |
+ __ UpdateFeedback(__ SmiConstant(BinaryOperationFeedback::kSignedSmall), |
type_feedback_vector, slot_index); |
var_result.Bind(__ BitcastWordToTaggedSigned(__ Projection(0, pair))); |
__ Goto(&end); |
@@ -1494,16 +1493,17 @@ void Interpreter::DoBitwiseOrSmi(InterpreterAssembler* assembler) { |
Node* context = __ GetContext(); |
Node* slot_index = __ BytecodeOperandIdx(2); |
Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
- Variable var_lhs_type_feedback(assembler, MachineRepresentation::kWord32); |
+ Variable var_lhs_type_feedback(assembler, |
+ MachineRepresentation::kTaggedSigned); |
Node* lhs_value = __ TruncateTaggedToWord32WithFeedback( |
context, left, &var_lhs_type_feedback); |
Node* rhs_value = __ SmiToWord32(right); |
Node* value = __ Word32Or(lhs_value, rhs_value); |
Node* result = __ ChangeInt32ToTagged(value); |
- Node* result_type = __ SelectInt32Constant( |
+ Node* result_type = __ SelectSmiConstant( |
__ TaggedIsSmi(result), BinaryOperationFeedback::kSignedSmall, |
BinaryOperationFeedback::kNumber); |
- __ UpdateFeedback(__ Word32Or(result_type, var_lhs_type_feedback.value()), |
+ __ UpdateFeedback(__ SmiOr(result_type, var_lhs_type_feedback.value()), |
type_feedback_vector, slot_index); |
__ SetAccumulator(result); |
__ Dispatch(); |
@@ -1520,16 +1520,17 @@ void Interpreter::DoBitwiseAndSmi(InterpreterAssembler* assembler) { |
Node* context = __ GetContext(); |
Node* slot_index = __ BytecodeOperandIdx(2); |
Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
- Variable var_lhs_type_feedback(assembler, MachineRepresentation::kWord32); |
+ Variable var_lhs_type_feedback(assembler, |
+ MachineRepresentation::kTaggedSigned); |
Node* lhs_value = __ TruncateTaggedToWord32WithFeedback( |
context, left, &var_lhs_type_feedback); |
Node* rhs_value = __ SmiToWord32(right); |
Node* value = __ Word32And(lhs_value, rhs_value); |
Node* result = __ ChangeInt32ToTagged(value); |
- Node* result_type = __ SelectInt32Constant( |
+ Node* result_type = __ SelectSmiConstant( |
__ TaggedIsSmi(result), BinaryOperationFeedback::kSignedSmall, |
BinaryOperationFeedback::kNumber); |
- __ UpdateFeedback(__ Word32Or(result_type, var_lhs_type_feedback.value()), |
+ __ UpdateFeedback(__ SmiOr(result_type, var_lhs_type_feedback.value()), |
type_feedback_vector, slot_index); |
__ SetAccumulator(result); |
__ Dispatch(); |
@@ -1547,17 +1548,18 @@ void Interpreter::DoShiftLeftSmi(InterpreterAssembler* assembler) { |
Node* context = __ GetContext(); |
Node* slot_index = __ BytecodeOperandIdx(2); |
Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
- Variable var_lhs_type_feedback(assembler, MachineRepresentation::kWord32); |
+ Variable var_lhs_type_feedback(assembler, |
+ MachineRepresentation::kTaggedSigned); |
Node* lhs_value = __ TruncateTaggedToWord32WithFeedback( |
context, left, &var_lhs_type_feedback); |
Node* rhs_value = __ SmiToWord32(right); |
Node* shift_count = __ Word32And(rhs_value, __ Int32Constant(0x1f)); |
Node* value = __ Word32Shl(lhs_value, shift_count); |
Node* result = __ ChangeInt32ToTagged(value); |
- Node* result_type = __ SelectInt32Constant( |
+ Node* result_type = __ SelectSmiConstant( |
__ TaggedIsSmi(result), BinaryOperationFeedback::kSignedSmall, |
BinaryOperationFeedback::kNumber); |
- __ UpdateFeedback(__ Word32Or(result_type, var_lhs_type_feedback.value()), |
+ __ UpdateFeedback(__ SmiOr(result_type, var_lhs_type_feedback.value()), |
type_feedback_vector, slot_index); |
__ SetAccumulator(result); |
__ Dispatch(); |
@@ -1575,17 +1577,18 @@ void Interpreter::DoShiftRightSmi(InterpreterAssembler* assembler) { |
Node* context = __ GetContext(); |
Node* slot_index = __ BytecodeOperandIdx(2); |
Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
- Variable var_lhs_type_feedback(assembler, MachineRepresentation::kWord32); |
+ Variable var_lhs_type_feedback(assembler, |
+ MachineRepresentation::kTaggedSigned); |
Node* lhs_value = __ TruncateTaggedToWord32WithFeedback( |
context, left, &var_lhs_type_feedback); |
Node* rhs_value = __ SmiToWord32(right); |
Node* shift_count = __ Word32And(rhs_value, __ Int32Constant(0x1f)); |
Node* value = __ Word32Sar(lhs_value, shift_count); |
Node* result = __ ChangeInt32ToTagged(value); |
- Node* result_type = __ SelectInt32Constant( |
+ Node* result_type = __ SelectSmiConstant( |
__ TaggedIsSmi(result), BinaryOperationFeedback::kSignedSmall, |
BinaryOperationFeedback::kNumber); |
- __ UpdateFeedback(__ Word32Or(result_type, var_lhs_type_feedback.value()), |
+ __ UpdateFeedback(__ SmiOr(result_type, var_lhs_type_feedback.value()), |
type_feedback_vector, slot_index); |
__ SetAccumulator(result); |
__ Dispatch(); |
@@ -1662,12 +1665,12 @@ void Interpreter::DoInc(InterpreterAssembler* assembler) { |
// We might need to try again due to ToNumber conversion. |
Variable value_var(assembler, MachineRepresentation::kTagged); |
Variable result_var(assembler, MachineRepresentation::kTagged); |
- Variable var_type_feedback(assembler, MachineRepresentation::kWord32); |
+ Variable var_type_feedback(assembler, MachineRepresentation::kTaggedSigned); |
Variable* loop_vars[] = {&value_var, &var_type_feedback}; |
Label start(assembler, 2, loop_vars); |
value_var.Bind(value); |
var_type_feedback.Bind( |
- assembler->Int32Constant(BinaryOperationFeedback::kNone)); |
+ assembler->SmiConstant(BinaryOperationFeedback::kNone)); |
assembler->Goto(&start); |
assembler->Bind(&start); |
{ |
@@ -1690,9 +1693,9 @@ void Interpreter::DoInc(InterpreterAssembler* assembler) { |
assembler->Branch(overflow, &if_overflow, &if_notoverflow); |
assembler->Bind(&if_notoverflow); |
- var_type_feedback.Bind(assembler->Word32Or( |
+ var_type_feedback.Bind(assembler->SmiOr( |
var_type_feedback.value(), |
- assembler->Int32Constant(BinaryOperationFeedback::kSignedSmall))); |
+ assembler->SmiConstant(BinaryOperationFeedback::kSignedSmall))); |
result_var.Bind( |
assembler->BitcastWordToTaggedSigned(assembler->Projection(0, pair))); |
assembler->Goto(&end); |
@@ -1726,9 +1729,9 @@ void Interpreter::DoInc(InterpreterAssembler* assembler) { |
// convert the value to a number, we cannot reach this path. We can |
// only reach this path on the first pass when the feedback is kNone. |
CSA_ASSERT(assembler, |
- assembler->Word32Equal(var_type_feedback.value(), |
- assembler->Int32Constant( |
- BinaryOperationFeedback::kNone))); |
+ assembler->SmiEqual( |
+ var_type_feedback.value(), |
+ assembler->SmiConstant(BinaryOperationFeedback::kNone))); |
Label if_valueisoddball(assembler), if_valuenotoddball(assembler); |
Node* instance_type = assembler->LoadMapInstanceType(value_map); |
@@ -1741,7 +1744,7 @@ void Interpreter::DoInc(InterpreterAssembler* assembler) { |
// Convert Oddball to Number and check again. |
value_var.Bind( |
assembler->LoadObjectField(value, Oddball::kToNumberOffset)); |
- var_type_feedback.Bind(assembler->Int32Constant( |
+ var_type_feedback.Bind(assembler->SmiConstant( |
BinaryOperationFeedback::kNumberOrOddball)); |
assembler->Goto(&start); |
} |
@@ -1752,7 +1755,7 @@ void Interpreter::DoInc(InterpreterAssembler* assembler) { |
Callable callable = |
CodeFactory::NonNumberToNumber(assembler->isolate()); |
var_type_feedback.Bind( |
- assembler->Int32Constant(BinaryOperationFeedback::kAny)); |
+ assembler->SmiConstant(BinaryOperationFeedback::kAny)); |
value_var.Bind(assembler->CallStub(callable, context, value)); |
assembler->Goto(&start); |
} |
@@ -1765,9 +1768,9 @@ void Interpreter::DoInc(InterpreterAssembler* assembler) { |
Node* finc_value = var_finc_value.value(); |
Node* one = assembler->Float64Constant(1.0); |
Node* finc_result = assembler->Float64Add(finc_value, one); |
- var_type_feedback.Bind(assembler->Word32Or( |
+ var_type_feedback.Bind(assembler->SmiOr( |
var_type_feedback.value(), |
- assembler->Int32Constant(BinaryOperationFeedback::kNumber))); |
+ assembler->SmiConstant(BinaryOperationFeedback::kNumber))); |
result_var.Bind(assembler->AllocateHeapNumberWithValue(finc_result)); |
assembler->Goto(&end); |
} |
@@ -1800,11 +1803,11 @@ void Interpreter::DoDec(InterpreterAssembler* assembler) { |
// We might need to try again due to ToNumber conversion. |
Variable value_var(assembler, MachineRepresentation::kTagged); |
Variable result_var(assembler, MachineRepresentation::kTagged); |
- Variable var_type_feedback(assembler, MachineRepresentation::kWord32); |
+ Variable var_type_feedback(assembler, MachineRepresentation::kTaggedSigned); |
Variable* loop_vars[] = {&value_var, &var_type_feedback}; |
Label start(assembler, 2, loop_vars); |
var_type_feedback.Bind( |
- assembler->Int32Constant(BinaryOperationFeedback::kNone)); |
+ assembler->SmiConstant(BinaryOperationFeedback::kNone)); |
value_var.Bind(value); |
assembler->Goto(&start); |
assembler->Bind(&start); |
@@ -1828,9 +1831,9 @@ void Interpreter::DoDec(InterpreterAssembler* assembler) { |
assembler->Branch(overflow, &if_overflow, &if_notoverflow); |
assembler->Bind(&if_notoverflow); |
- var_type_feedback.Bind(assembler->Word32Or( |
+ var_type_feedback.Bind(assembler->SmiOr( |
var_type_feedback.value(), |
- assembler->Int32Constant(BinaryOperationFeedback::kSignedSmall))); |
+ assembler->SmiConstant(BinaryOperationFeedback::kSignedSmall))); |
result_var.Bind( |
assembler->BitcastWordToTaggedSigned(assembler->Projection(0, pair))); |
assembler->Goto(&end); |
@@ -1864,9 +1867,9 @@ void Interpreter::DoDec(InterpreterAssembler* assembler) { |
// convert the value to a number, we cannot reach this path. We can |
// only reach this path on the first pass when the feedback is kNone. |
CSA_ASSERT(assembler, |
- assembler->Word32Equal(var_type_feedback.value(), |
- assembler->Int32Constant( |
- BinaryOperationFeedback::kNone))); |
+ assembler->SmiEqual( |
+ var_type_feedback.value(), |
+ assembler->SmiConstant(BinaryOperationFeedback::kNone))); |
Label if_valueisoddball(assembler), if_valuenotoddball(assembler); |
Node* instance_type = assembler->LoadMapInstanceType(value_map); |
@@ -1879,7 +1882,7 @@ void Interpreter::DoDec(InterpreterAssembler* assembler) { |
// Convert Oddball to Number and check again. |
value_var.Bind( |
assembler->LoadObjectField(value, Oddball::kToNumberOffset)); |
- var_type_feedback.Bind(assembler->Int32Constant( |
+ var_type_feedback.Bind(assembler->SmiConstant( |
BinaryOperationFeedback::kNumberOrOddball)); |
assembler->Goto(&start); |
} |
@@ -1890,7 +1893,7 @@ void Interpreter::DoDec(InterpreterAssembler* assembler) { |
Callable callable = |
CodeFactory::NonNumberToNumber(assembler->isolate()); |
var_type_feedback.Bind( |
- assembler->Int32Constant(BinaryOperationFeedback::kAny)); |
+ assembler->SmiConstant(BinaryOperationFeedback::kAny)); |
value_var.Bind(assembler->CallStub(callable, context, value)); |
assembler->Goto(&start); |
} |
@@ -1903,9 +1906,9 @@ void Interpreter::DoDec(InterpreterAssembler* assembler) { |
Node* fdec_value = var_fdec_value.value(); |
Node* one = assembler->Float64Constant(1.0); |
Node* fdec_result = assembler->Float64Sub(fdec_value, one); |
- var_type_feedback.Bind(assembler->Word32Or( |
+ var_type_feedback.Bind(assembler->SmiOr( |
var_type_feedback.value(), |
- assembler->Int32Constant(BinaryOperationFeedback::kNumber))); |
+ assembler->SmiConstant(BinaryOperationFeedback::kNumber))); |
result_var.Bind(assembler->AllocateHeapNumberWithValue(fdec_result)); |
assembler->Goto(&end); |
} |