sim: bfin: fix accumulator edge case saturation

When the accumulator saturates, it needs to be greater than, but not
equal to, the largest unsigned value as this is what the hardware does.

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 17:27:01 +00:00
parent 886ea33b69
commit 73aae8efb2
2 changed files with 7 additions and 2 deletions

View file

@ -1,3 +1,8 @@
2011-06-18 Robin Getz <robin.getz@analog.com>
* bfin-sim.c (saturate_s40_astat): Change ">" to ">=".
(decode_macfunc): Likewise when mmod is M_IH.
2011-06-18 Mike Frysinger <vapier@gentoo.org>
* interp.c (sim_create_inferior): Change free to freeargv.

View file

@ -1398,7 +1398,7 @@ saturate_s40_astat (bu64 val, bu32 *v)
*v = 1;
return -((bs64)1 << 39);
}
else if ((bs64)val >= ((bs64)1 << 39) - 1)
else if ((bs64)val > ((bs64)1 << 39) - 1)
{
*v = 1;
return ((bu64)1 << 39) - 1;
@ -1645,7 +1645,7 @@ decode_macfunc (SIM_CPU *cpu, int which, int op, int h0, int h1, int src0,
case M_IH:
if ((bs64)acc < -0x80000000ll)
acc = -0x80000000ull, sat = 1;
else if ((bs64)acc >= 0x7fffffffll)
else if ((bs64)acc > 0x7fffffffll)
acc = 0x7fffffffull, sat = 1;
break;
case M_W32: