sim: bfin: do not touch ASTAT[V] when shifting accumulators
authorMike Frysinger <vapier@gentoo.org>
Sat, 18 Jun 2011 21:59:38 +0000 (21:59 +0000)
committerMike Frysinger <vapier@gentoo.org>
Sat, 18 Jun 2011 21:59:38 +0000 (21:59 +0000)
If we're shifting accumulators, we don't want to touch the V bit in
ASTAT, so add size checks to the ashiftrt/lshiftrt helpers.

Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
sim/bfin/ChangeLog
sim/bfin/bfin-sim.c

index 4e656d75da33079fd18a123ed1400a3eed99e1a6..8fd629a46ed76087e933d96482f582fd92dddd47 100644 (file)
@@ -1,3 +1,8 @@
+2011-06-18  Robin Getz  <robin.getz@analog.com>
+
+       * bfin-sim.c (ashiftrt): If size is 40, do not call SET_ASTATREG.
+       (lshiftrt): Likewise.
+
 2011-06-18  Robin Getz  <robin.getz@analog.com>
 
        * bfin-sim.c (decode_dsp32shift_0): Use get_unextended_acc
index 2c71f6c5607c0d66bec82b054644953fe94a743e..dbfce6c28baf553542822f8529ecf42fb2716fbf 100644 (file)
@@ -713,8 +713,8 @@ ashiftrt (SIM_CPU *cpu, bu40 val, int cnt, int size)
   val |= sgn;
   SET_ASTATREG (an, val >> (size - 1));
   SET_ASTATREG (az, val == 0);
-  /* XXX: Need to check ASTAT[v] behavior here.  */
-  SET_ASTATREG (v, 0);
+  if (size != 40)
+    SET_ASTATREG (v, 0);
   return val;
 }
 
@@ -742,7 +742,8 @@ lshiftrt (SIM_CPU *cpu, bu64 val, int cnt, int size)
     }
   SET_ASTATREG (an, val >> (size - 1));
   SET_ASTATREG (az, val == 0);
-  SET_ASTATREG (v, 0);
+  if (size != 40)
+    SET_ASTATREG (v, 0);
   return val;
 }