From d39fc16a4b899f684679692d998bfb26a71abdfe Mon Sep 17 00:00:00 2001 From: "akos.palfi@imgtec.com" Date: Wed, 8 Oct 2014 16:15:28 +0000 Subject: [PATCH] MIPS64: Fix TruncatingDiv. - Fix the Macroassembler::TruncatingDiv to compute the correct result even when the magic number is negative. - Fix the MULT instruction in the simulator. TEST=mjsunit/compiler/division-by-constant BUG= R=dusan.milosavljevic@imgtec.com Review URL: https://codereview.chromium.org/637273002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24475 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mips64/macro-assembler-mips64.cc | 2 +- src/mips64/simulator-mips64.cc | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/mips64/macro-assembler-mips64.cc b/src/mips64/macro-assembler-mips64.cc index 9aa7570..2d3241f 100644 --- a/src/mips64/macro-assembler-mips64.cc +++ b/src/mips64/macro-assembler-mips64.cc @@ -6069,7 +6069,7 @@ void MacroAssembler::TruncatingDiv(Register result, DCHECK(!result.is(at)); base::MagicNumbersForDivision mag = base::SignedDivisionByConstant(static_cast(divisor)); - li(at, Operand(mag.multiplier)); + li(at, Operand(static_cast(mag.multiplier))); Mulh(result, dividend, Operand(at)); bool neg = (mag.multiplier & (static_cast(1) << 31)) != 0; if (divisor > 0 && neg) { diff --git a/src/mips64/simulator-mips64.cc b/src/mips64/simulator-mips64.cc index 4c74939..0039665 100644 --- a/src/mips64/simulator-mips64.cc +++ b/src/mips64/simulator-mips64.cc @@ -2085,8 +2085,7 @@ void Simulator::ConfigureTypeRegister(Instruction* instr, // regs. // TODO(plind) - make the 32-bit MULT ops conform to spec regarding // checking of 32-bit input values, and un-define operations of HW. - *i64hilo = static_cast((int32_t)rs) * - static_cast((int32_t)rt); + *i64hilo = rs * rt; break; case MULTU: *u64hilo = static_cast(rs_u) * static_cast(rt_u); -- 2.7.4