PR gas/18189
* config/tc-microblaze.c (parse_imm): Use offsetT as the type for
- min and max parameters.
+ min and max parameters. Sign extend values before testing.
2015-04-02 Renlin Li <renlin.li@arm.com>
; /* An error message has already been emitted. */
else if ((e->X_op != O_constant && e->X_op != O_symbol) )
as_fatal (_("operand must be a constant or a label"));
- else if ((e->X_op == O_constant) && (e->X_add_number < min
- || e->X_add_number > max))
+ else if (e->X_op == O_constant)
{
- as_fatal (_("operand must be absolute in range %lx..%lx, not %lx"),
- (long) min, (long) max, (long) e->X_add_number);
+ /* Special case: sign extend negative 32-bit values to 64-bits. */
+ if ((e->X_add_number >> 31) == 1)
+ e->X_add_number |= (-1 << 31);
+
+ if (e->X_add_number < min || e->X_add_number > max)
+ {
+ as_fatal (_("operand must be absolute in range %lx..%lx, not %lx"),
+ (long) min, (long) max, (long) e->X_add_number);
+ }
}
if (atp)