From: Nick Clifton Date: Fri, 10 Feb 2006 12:21:43 +0000 (+0000) Subject: (check_range): Ensure that the sign bit of a 32-bit value is propagated into X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=70e45ad9bb4476368d66997ec0df94abc9d3a2de;p=binutils-gdb.git (check_range): Ensure that the sign bit of a 32-bit value is propagated into the upper bits of a 64-bit long. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 37285715335..b248cb822d3 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,8 @@ 2006-02-10 Nick Clifton + * config/tc-crx.c (check_range): Ensure that the sign bit of a + 32-bit value is propagated into the upper bits of a 64-bit long. + * config/tc-arc.c (init_opcode_tables): Fix cast. (arc_extoper, md_operand): Likewise. diff --git a/gas/config/tc-crx.c b/gas/config/tc-crx.c index 9b0b8564c8d..34448cd8dca 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) {