sim: bfin: set ASTAT AV/AVS when shifting accumulators overflow

The LSHIFT/ASHIFT insns that work with accumulators lacked AV/AVS
handling in the ASTAT register, so add it to match the hardware.

Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Mike Frysinger 2011-06-18 22:03:10 +00:00
parent b4876e0485
commit 1f20b1457b
2 changed files with 12 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2011-06-18 Robin Getz <robin.getz@analog.com>
* bfin-sim.c (decode_dsp32shift_0): Clear ASTAT[AV] if val is 0,
else set it. Set ASTAT[AVS] if val is 0. Do this for LSHIFT and
ASHIFT accumulator insns.
2011-06-18 Robin Getz <robin.getz@analog.com>
* bfin-sim.c (ashiftrt): If size is 40, do not call SET_ASTATREG.

View File

@ -5223,6 +5223,9 @@ decode_dsp32shift_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
STORE (AXREG (HLs), (val >> 32) & 0xff);
STORE (AWREG (HLs), (val & 0xffffffff));
STORE (ASTATREG (av[HLs]), val == 0);
if (val == 0)
STORE (ASTATREG (avs[HLs]), 1);
}
else if (sop == 1 && sopcde == 3 && (HLs == 0 || HLs == 1))
{
@ -5240,6 +5243,9 @@ decode_dsp32shift_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1)
STORE (AXREG (HLs), (val >> 32) & 0xff);
STORE (AWREG (HLs), (val & 0xffffffff));
STORE (ASTATREG (av[HLs]), val == 0);
if (val == 0)
STORE (ASTATREG (avs[HLs]), 1);
}
else if ((sop == 0 || sop == 1) && sopcde == 1)
{