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.
This commit is contained in:
Nick Clifton
2011-07-01 12:12:16 +00:00
parent c79d668557
commit 161fc45276
2 changed files with 20 additions and 9 deletions

View File

@ -1,3 +1,11 @@
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> 2011-04-16 Mike Frysinger <vapier@gentoo.org>
* wrapper.c (sim_complete_command): New stub function. * wrapper.c (sim_complete_command): New stub function.

View File

@ -1744,11 +1744,12 @@ WCMPGT (ARMul_State * state, ARMword instr)
{ {
signed long a, b; signed long a, b;
a = wRWORD (BITS (16, 19), i); a = EXTEND32 (wRWORD (BITS (16, 19), i));
b = wRWORD (BITS (0, 3), i); b = EXTEND32 (wRWORD (BITS (0, 3), i));
s = (a > b) ? 0xffffffff : 0; s = (a > b) ? 0xffffffff : 0;
r |= s << (i * 32); r |= s << (i * 32);
SIMD32_SET (psr, NBIT32 (s), SIMD_NBIT, i); SIMD32_SET (psr, NBIT32 (s), SIMD_NBIT, i);
SIMD32_SET (psr, ZBIT32 (s), SIMD_ZBIT, i); SIMD32_SET (psr, ZBIT32 (s), SIMD_ZBIT, i);
} }
@ -2128,11 +2129,13 @@ WMAC (ARMword instr)
} }
} }
if (BIT (20)) if (BIT (21))
wR [BITS (12, 15)] = 0; t = EXTEND32 (t);
else
t &= 0xffffffff;
if (BIT (21)) /* Signed. */ if (BIT (20))
wR[BITS (12, 15)] += t; wR [BITS (12, 15)] = t;
else else
wR[BITS (12, 15)] += t; wR[BITS (12, 15)] += t;
@ -2904,7 +2907,7 @@ WSRA (ARMul_State * state, ARMword instr)
t = (wRWORD (BITS (16, 19), i) & 0x80000000) ? 0xffffffff : 0; t = (wRWORD (BITS (16, 19), i) & 0x80000000) ? 0xffffffff : 0;
else else
{ {
t = wRWORD (BITS (16, 19), i); t = EXTEND32 (wRWORD (BITS (16, 19), i));
t >>= shift; t >>= shift;
} }
s = t; s = t;