Index: runtime/vm/intermediate_language_mips.cc |
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc |
index 15fc876447e14290bcace045e6ef32ca99e79471..e381157f3a995b98cecc9647d3c430bfebc5f310 100644 |
--- a/runtime/vm/intermediate_language_mips.cc |
+++ b/runtime/vm/intermediate_language_mips.cc |
@@ -4931,12 +4931,19 @@ void ShiftMintOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
__ or_(out_lo, out_lo, TMP); |
__ sra(out_hi, left_hi, shift); |
} else { |
- __ sra(out_lo, left_hi, shift - 32); |
+ if (shift == 32) { |
+ __ mov(out_lo, left_hi); |
+ } else if (shift < 64) { |
+ __ sra(out_lo, left_hi, shift - 32); |
+ } else { |
+ __ sra(out_lo, left_hi, 31); |
+ } |
__ sra(out_hi, left_hi, 31); |
} |
break; |
} |
case Token::kSHL: { |
+ ASSERT(shift < 64); |
if (shift < 32) { |
__ srl(out_hi, left_lo, 32 - shift); |
__ sll(TMP, left_hi, shift); |