Second fix for microblaze gas port's ability to parse constants.

PR gas/18189
	* config/tc-microblaze.c (parse_imm): Use offsetT as the type for
	min and max parameters.  Sign extend values before testing.
This commit is contained in:
Nick Clifton
2015-04-02 17:13:12 +01:00
parent 03e080386e
commit f66adc4ead
2 changed files with 11 additions and 5 deletions

View File

@ -2,7 +2,7 @@
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>

View File

@ -736,12 +736,18 @@ parse_imm (char * s, expressionS * e, offsetT min, offsetT max)
; /* 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)
{
/* 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)
{