Index: src/mips/macro-assembler-mips.cc |
diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc |
index 83436ee4aa14ac81868accab9d78e1175fe79bc8..3b8d8b1772a2eb40a3807549c01e371cd6542ee9 100644 |
--- a/src/mips/macro-assembler-mips.cc |
+++ b/src/mips/macro-assembler-mips.cc |
@@ -5493,14 +5493,11 @@ |
DCHECK(!right.is(scratch)); |
if (left.is(right) && dst.is(left)) { |
- mov(scratch, left); // Preserve left and right. |
- addu(dst, left, right); // Both are overwritten. |
- xor_(overflow_dst, dst, scratch); // Left and right are equal. |
- Label done; // Restore inputs if overflow. |
- Branch(&done, ge, overflow_dst, Operand(zero_reg)); |
- mov(left, scratch); // Original left and right. |
- bind(&done); |
- } else if (dst.is(left)) { |
+ mov(overflow_dst, right); |
+ right = overflow_dst; |
+ } |
+ |
+ if (dst.is(left)) { |
mov(scratch, left); // Preserve left. |
addu(dst, left, right); // Left is overwritten. |
xor_(scratch, dst, scratch); // Original left. |