summaryrefslogtreecommitdiff
path: root/mips
diff options
context:
space:
mode:
authorRobert Norton2016-05-10 10:51:56 +0100
committerRobert Norton2016-05-10 10:51:56 +0100
commit1877e8051dd9865f98df810550014537cf42a744 (patch)
tree4914eb1abddd28256a49792a559e790f1e91c1a2 /mips
parent1436e658046c21e6f4435289c20a69174aee13de (diff)
calculate signed modulus using quot as ocaml and mips disagree about what the result should be (specifically for x mod y, x<0 & y<0).
Diffstat (limited to 'mips')
-rw-r--r--mips/mips_insts.sail6
1 files changed, 3 insertions, 3 deletions
diff --git a/mips/mips_insts.sail b/mips/mips_insts.sail
index 8bb56245..853397fa 100644
--- a/mips/mips_insts.sail
+++ b/mips/mips_insts.sail
@@ -761,8 +761,8 @@ function clause execute (DIV(rs, rt)) =
else
let si = (signed((rsVal[31..0]))) in
let ti = (signed((rtVal[31..0]))) in
- let qi = (si quot_s ti) in
- let ri = (si mod_s ti) in
+ let qi = (si quot ti) in
+ let ri = (si - (ti*qi)) in
((bit[32]) qi, (bit[32]) ri))
in
{
@@ -807,7 +807,7 @@ function clause execute (DDIV(rs, rt)) =
then (undefined, undefined)
else
let qi = (rsVal quot_s rtVal) in
- let ri = (rsVal mod_s rtVal) in
+ let ri = (rsVal - (qi * rtVal)) in
((bit[64]) qi, (bit[64]) ri)) in
{
LO := q;