summaryrefslogtreecommitdiff
path: root/gas/config/tc-crx.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2006-02-10 12:21:43 +0000
committerNick Clifton <nickc@redhat.com>2006-02-10 12:21:43 +0000
commit1a440d9e55de813cd546369629f1dbfe558bb572 (patch)
treed690acfb6bf497a89115f49e3d08c75d30bb42c5 /gas/config/tc-crx.c
parent000fa934b53c921f544b772ad5daf563554c1b8f (diff)
downloadbinutils-redhat-1a440d9e55de813cd546369629f1dbfe558bb572.tar.gz
(check_range): Ensure that the sign bit of a 32-bit value is propagated into
the upper bits of a 64-bit long.
Diffstat (limited to 'gas/config/tc-crx.c')
-rw-r--r--gas/config/tc-crx.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gas/config/tc-crx.c b/gas/config/tc-crx.c
index 9b0b8564c8..34448cd8dc 100644
--- a/gas/config/tc-crx.c
+++ b/gas/config/tc-crx.c
@@ -1378,6 +1378,12 @@ check_range (long *num, int bits, int unsigned flags, int update)
long upper_64kb = 0xFFFF0000;
long value = *num;
+ /* For hosts witah longs bigger than 32-bits make sure that the top
+ bits of a 32-bit negative value read in by the parser are set,
+ so that the correct comparisons are made. */
+ if (value & 0x80000000)
+ value |= (-1L << 31);
+
/* Verify operand value is even. */
if (flags & OP_EVEN)
{