diff options
Diffstat (limited to 'sim/bfin/bfin-sim.c')
-rw-r--r-- | sim/bfin/bfin-sim.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sim/bfin/bfin-sim.c b/sim/bfin/bfin-sim.c index 11eea3a..b982aaf 100644 --- a/sim/bfin/bfin-sim.c +++ b/sim/bfin/bfin-sim.c @@ -5775,11 +5775,17 @@ decode_dsp32shiftimm_0 (SIM_CPU *cpu, bu16 iw0, bu16 iw1) if (sop == 0) acc <<= shiftup; else - acc >>= shiftdn; + { + if (shiftdn <= 32) + acc >>= shiftdn; + else + acc <<= 32 - (shiftdn & 0x1f); + } SET_AREG (HLs, acc); + SET_ASTATREG (av[HLs], 0); SET_ASTATREG (an, !!(acc & 0x8000000000ull)); - SET_ASTATREG (az, acc == 0); + SET_ASTATREG (az, (acc & 0xFFFFFFFFFF) == 0); } else if (sop == 1 && sopcde == 1 && bit8 == 0) { |