diff options
author | Alexey Frunze <Alexey.Frunze@imgtec.com> | 2016-06-27 15:20:11 -0700 |
---|---|---|
committer | Alexey Frunze <Alexey.Frunze@imgtec.com> | 2016-06-27 15:34:19 -0700 |
commit | a871ef1e61f901093abf90607ba272b7a8ce1100 (patch) | |
tree | a16254aaa37a2279c781531c7cef4627e96fdbf1 /compiler/optimizing/code_generator_mips.cc | |
parent | 12e6e9f3f1352ed58ddd41c7f31831011695b9e4 (diff) |
MIPS32: Drop redundant moves in integer conversions
Change-Id: I0e3f393d87538eb9e35b3012ea36e81c8b7a225e
Diffstat (limited to 'compiler/optimizing/code_generator_mips.cc')
-rw-r--r-- | compiler/optimizing/code_generator_mips.cc | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/compiler/optimizing/code_generator_mips.cc b/compiler/optimizing/code_generator_mips.cc index 738180670f..b9b3463f4d 100644 --- a/compiler/optimizing/code_generator_mips.cc +++ b/compiler/optimizing/code_generator_mips.cc @@ -4730,7 +4730,6 @@ void InstructionCodeGeneratorMIPS::VisitTypeConversion(HTypeConversion* conversi Primitive::Type input_type = conversion->GetInputType(); bool has_sign_extension = codegen_->GetInstructionSetFeatures().IsMipsIsaRevGreaterThanEqual2(); bool isR6 = codegen_->GetInstructionSetFeatures().IsR6(); - bool fpu_32bit = codegen_->GetInstructionSetFeatures().Is32BitFloatingPoint(); DCHECK_NE(input_type, result_type); @@ -4739,7 +4738,9 @@ void InstructionCodeGeneratorMIPS::VisitTypeConversion(HTypeConversion* conversi Register dst_low = locations->Out().AsRegisterPairLow<Register>(); Register src = locations->InAt(0).AsRegister<Register>(); - __ Move(dst_low, src); + if (dst_low != src) { + __ Move(dst_low, src); + } __ Sra(dst_high, src, 31); } else if (Primitive::IsIntegralType(result_type) && Primitive::IsIntegralType(input_type)) { Register dst = locations->Out().AsRegister<Register>(); @@ -4768,7 +4769,9 @@ void InstructionCodeGeneratorMIPS::VisitTypeConversion(HTypeConversion* conversi } break; case Primitive::kPrimInt: - __ Move(dst, src); + if (dst != src) { + __ Move(dst, src); + } break; default: @@ -4925,11 +4928,7 @@ void InstructionCodeGeneratorMIPS::VisitTypeConversion(HTypeConversion* conversi uint64_t min_val = bit_cast<uint64_t, double>(std::numeric_limits<int32_t>::min()); __ LoadConst32(TMP, High32Bits(min_val)); __ Mtc1(ZERO, FTMP); - if (fpu_32bit) { - __ Mtc1(TMP, static_cast<FRegister>(FTMP + 1)); - } else { - __ Mthc1(TMP, FTMP); - } + __ MoveToFpuHigh(TMP, FTMP); } if (isR6) { |