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:
parent
b4876e0485
commit
1f20b1457b
2 changed files with 12 additions and 0 deletions
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue