[sim] fixed multiply-high in rv32
authorAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>
Fri, 8 Apr 2011 23:34:35 +0000 (16:34 -0700)
committerAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>
Fri, 8 Apr 2011 23:34:35 +0000 (16:34 -0700)
riscv/insns/mulhsu.h
riscv/insns/mulhu.h

index 506424dcc103c583bf1076067d0f249155ef03f3..e5f1c9518d267c560fa9cd246a9015752207453b 100644 (file)
@@ -5,4 +5,4 @@ if(xpr64)
   RD = (int128_t(a) * uint128_t(b)) >> 64;
 }
 else
-  RD = sext32((sreg_t(RS1) * reg_t(RS2)) >> 32);
+  RD = sext32((sreg_t(RS1) * reg_t((uint32_t)RS2)) >> 32);
index b6f45dd2b712f4e5d2d38dbab341a9c738e73a92..63344263fe3588a5195eb09fdb5ea075f431d9b1 100644 (file)
@@ -1,4 +1,4 @@
 if(xpr64)
   RD = (uint128_t(RS1) * uint128_t(RS2)) >> 64;
 else
-  RD = sext32((RS1 * RS2) >> 32);
+  RD = sext32(((uint64_t)(uint32_t)RS1 * (uint64_t)(uint32_t)RS2) >> 32);