Index: src/code-stubs.cc |
diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
index e262d1592aa1efc3bf3454c28a5b13029f64e8b1..87cbf091b0ea65404077c1aa97c45e0b5da17788 100644 |
--- a/src/code-stubs.cc |
+++ b/src/code-stubs.cc |
@@ -692,7 +692,9 @@ compiler::Node* AddWithFeedbackStub::Generate( |
assembler->Bind(&if_rhsissmi); |
{ |
// Try fast Smi addition first. |
- Node* pair = assembler->SmiAddWithOverflow(lhs, rhs); |
+ Node* pair = |
+ assembler->IntPtrAddWithOverflow(assembler->BitcastTaggedToWord(lhs), |
+ assembler->BitcastTaggedToWord(rhs)); |
Node* overflow = assembler->Projection(1, pair); |
// Check if the Smi additon overflowed. |
@@ -710,7 +712,8 @@ compiler::Node* AddWithFeedbackStub::Generate( |
{ |
var_type_feedback.Bind( |
assembler->Int32Constant(BinaryOperationFeedback::kSignedSmall)); |
- var_result.Bind(assembler->Projection(0, pair)); |
+ var_result.Bind(assembler->BitcastWordToTaggedSigned( |
+ assembler->Projection(0, pair))); |
assembler->Goto(&end); |
} |
} |
@@ -852,7 +855,9 @@ compiler::Node* SubtractWithFeedbackStub::Generate( |
assembler->Bind(&if_rhsissmi); |
{ |
// Try a fast Smi subtraction first. |
- Node* pair = assembler->SmiSubWithOverflow(lhs, rhs); |
+ Node* pair = |
+ assembler->IntPtrSubWithOverflow(assembler->BitcastTaggedToWord(lhs), |
+ assembler->BitcastTaggedToWord(rhs)); |
Node* overflow = assembler->Projection(1, pair); |
// Check if the Smi subtraction overflowed. |
@@ -872,7 +877,8 @@ compiler::Node* SubtractWithFeedbackStub::Generate( |
// lhs, rhs, result smi. combined - smi. |
var_type_feedback.Bind( |
assembler->Int32Constant(BinaryOperationFeedback::kSignedSmall)); |
- var_result.Bind(assembler->Projection(0, pair)); |
+ var_result.Bind( |
+ assembler->BitcastWordToTaggedSigned(assembler->Projection(0, pair))); |
assembler->Goto(&end); |
} |
@@ -1459,7 +1465,9 @@ compiler::Node* IncStub::Generate(CodeStubAssembler* assembler, |
{ |
// Try fast Smi addition first. |
Node* one = assembler->SmiConstant(Smi::FromInt(1)); |
- Node* pair = assembler->SmiAddWithOverflow(value, one); |
+ Node* pair = assembler->IntPtrAddWithOverflow( |
+ assembler->BitcastTaggedToWord(value), |
+ assembler->BitcastTaggedToWord(one)); |
Node* overflow = assembler->Projection(1, pair); |
// Check if the Smi addition overflowed. |
@@ -1470,7 +1478,8 @@ compiler::Node* IncStub::Generate(CodeStubAssembler* assembler, |
var_type_feedback.Bind(assembler->Word32Or( |
var_type_feedback.value(), |
assembler->Int32Constant(BinaryOperationFeedback::kSignedSmall))); |
- result_var.Bind(assembler->Projection(0, pair)); |
+ result_var.Bind( |
+ assembler->BitcastWordToTaggedSigned(assembler->Projection(0, pair))); |
assembler->Goto(&end); |
assembler->Bind(&if_overflow); |
@@ -1569,7 +1578,9 @@ compiler::Node* DecStub::Generate(CodeStubAssembler* assembler, |
{ |
// Try fast Smi subtraction first. |
Node* one = assembler->SmiConstant(Smi::FromInt(1)); |
- Node* pair = assembler->SmiSubWithOverflow(value, one); |
+ Node* pair = assembler->IntPtrSubWithOverflow( |
+ assembler->BitcastTaggedToWord(value), |
+ assembler->BitcastTaggedToWord(one)); |
Node* overflow = assembler->Projection(1, pair); |
// Check if the Smi subtraction overflowed. |
@@ -1580,7 +1591,8 @@ compiler::Node* DecStub::Generate(CodeStubAssembler* assembler, |
var_type_feedback.Bind(assembler->Word32Or( |
var_type_feedback.value(), |
assembler->Int32Constant(BinaryOperationFeedback::kSignedSmall))); |
- result_var.Bind(assembler->Projection(0, pair)); |
+ result_var.Bind( |
+ assembler->BitcastWordToTaggedSigned(assembler->Projection(0, pair))); |
assembler->Goto(&end); |
assembler->Bind(&if_overflow); |