+2011-07-01 Nick Clifton <nickc@redhat.com>
+
+ PR sim/12737
+ * iwmmxt.c (WCMPGT): Sign extend 32-bit values before performing a
+ signed compare.
+ (WMAC): Extend computed result before adding to result register.
+ (WRSA): Sign extend 32-bit values before shifting.
+
2011-04-16 Mike Frysinger <vapier@gentoo.org>
* wrapper.c (sim_complete_command): New stub function.
{
signed long a, b;
- a = wRWORD (BITS (16, 19), i);
- b = wRWORD (BITS (0, 3), i);
+ a = EXTEND32 (wRWORD (BITS (16, 19), i));
+ b = EXTEND32 (wRWORD (BITS (0, 3), i));
s = (a > b) ? 0xffffffff : 0;
r |= s << (i * 32);
+
SIMD32_SET (psr, NBIT32 (s), SIMD_NBIT, i);
SIMD32_SET (psr, ZBIT32 (s), SIMD_ZBIT, i);
}
}
}
- if (BIT (20))
- wR [BITS (12, 15)] = 0;
+ if (BIT (21))
+ t = EXTEND32 (t);
+ else
+ t &= 0xffffffff;
- if (BIT (21)) /* Signed. */
- wR[BITS (12, 15)] += t;
+ if (BIT (20))
+ wR [BITS (12, 15)] = t;
else
- wR [BITS (12, 15)] += t;
+ wR[BITS (12, 15)] += t;
wC [wCon] |= WCON_MUP;
t = (wRWORD (BITS (16, 19), i) & 0x80000000) ? 0xffffffff : 0;
else
{
- t = wRWORD (BITS (16, 19), i);
+ t = EXTEND32 (wRWORD (BITS (16, 19), i));
t >>= shift;
}
s = t;