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:
parent
886ea33b69
commit
73aae8efb2
2 changed files with 7 additions and 2 deletions
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue