Index: src/builtins/builtins-number.cc |
diff --git a/src/builtins/builtins-number.cc b/src/builtins/builtins-number.cc |
index 0b95f053c3945b737760e2b5cfc3060c869624a3..6cfc37b5602e400a8b17742b0b3c2f25df68abe2 100644 |
--- a/src/builtins/builtins-number.cc |
+++ b/src/builtins/builtins-number.cc |
@@ -524,7 +524,9 @@ void Builtins::Generate_Add(CodeStubAssembler* assembler) { |
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. |
@@ -539,7 +541,8 @@ void Builtins::Generate_Add(CodeStubAssembler* assembler) { |
} |
assembler->Bind(&if_notoverflow); |
- var_result.Bind(assembler->Projection(0, pair)); |
+ var_result.Bind(assembler->BitcastWordToTaggedSigned( |
+ assembler->Projection(0, pair))); |
assembler->Goto(&end); |
} |
@@ -886,7 +889,9 @@ void Builtins::Generate_Subtract(CodeStubAssembler* assembler) { |
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. |
@@ -902,7 +907,8 @@ void Builtins::Generate_Subtract(CodeStubAssembler* assembler) { |
} |
assembler->Bind(&if_notoverflow); |
- var_result.Bind(assembler->Projection(0, pair)); |
+ var_result.Bind(assembler->BitcastWordToTaggedSigned( |
+ assembler->Projection(0, pair))); |
assembler->Goto(&end); |
} |