Index: src/mips/macro-assembler-mips.cc |
diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc |
index 859b5c209f0c7df11b915e697ffd70657b1ebc25..8b46155cc1144af090b81c4cc2fd5500b479a750 100644 |
--- a/src/mips/macro-assembler-mips.cc |
+++ b/src/mips/macro-assembler-mips.cc |
@@ -5648,9 +5648,16 @@ void MacroAssembler::MulBranchOvf(Register dst, Register left, Register right, |
DCHECK(!scratch.is(left)); |
DCHECK(!scratch.is(right)); |
- Mul(overflow_dst, dst, left, right); |
- sra(scratch, dst, 31); |
- xor_(overflow_dst, overflow_dst, scratch); |
+ if (IsMipsArchVariant(kMips32r6) && dst.is(right)) { |
+ mov(scratch, right); |
+ Mul(overflow_dst, dst, left, scratch); |
+ sra(scratch, dst, 31); |
+ xor_(overflow_dst, overflow_dst, scratch); |
+ } else { |
+ Mul(overflow_dst, dst, left, right); |
+ sra(scratch, dst, 31); |
+ xor_(overflow_dst, overflow_dst, scratch); |
+ } |
BranchOvfHelperMult(this, overflow_dst, overflow_label, no_overflow_label); |
} |