sim: bfin: do not touch ASTAT[V] when shifting accumulators
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>
This commit is contained in:
parent
d5fcd950e4
commit
b4876e0485
2 changed files with 9 additions and 3 deletions
|
@ -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>
|
2011-06-18 Robin Getz <robin.getz@analog.com>
|
||||||
|
|
||||||
* bfin-sim.c (decode_dsp32shift_0): Use get_unextended_acc
|
* bfin-sim.c (decode_dsp32shift_0): Use get_unextended_acc
|
||||||
|
|
|
@ -713,8 +713,8 @@ ashiftrt (SIM_CPU *cpu, bu40 val, int cnt, int size)
|
||||||
val |= sgn;
|
val |= sgn;
|
||||||
SET_ASTATREG (an, val >> (size - 1));
|
SET_ASTATREG (an, val >> (size - 1));
|
||||||
SET_ASTATREG (az, val == 0);
|
SET_ASTATREG (az, val == 0);
|
||||||
/* XXX: Need to check ASTAT[v] behavior here. */
|
if (size != 40)
|
||||||
SET_ASTATREG (v, 0);
|
SET_ASTATREG (v, 0);
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -742,7 +742,8 @@ lshiftrt (SIM_CPU *cpu, bu64 val, int cnt, int size)
|
||||||
}
|
}
|
||||||
SET_ASTATREG (an, val >> (size - 1));
|
SET_ASTATREG (an, val >> (size - 1));
|
||||||
SET_ASTATREG (az, val == 0);
|
SET_ASTATREG (az, val == 0);
|
||||||
SET_ASTATREG (v, 0);
|
if (size != 40)
|
||||||
|
SET_ASTATREG (v, 0);
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue