mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-29 02:20:51 +00:00
PR gas/11867
* expr.c (operand <'-' and '~'>): Widen bignums. (operand <'!'>): Correct bignum result and convert to O_constant. * read.c (emit_expr): Don't assert on .byte bignum. Don't display bignum truncated warning for sign extended bignums.
This commit is contained in:
21
gas/expr.c
21
gas/expr.c
@@ -1056,6 +1056,15 @@ operand (expressionS *expressionP, enum expr_mode mode)
|
||||
{
|
||||
for (i = 0; i < expressionP->X_add_number; ++i)
|
||||
generic_bignum[i] = ~generic_bignum[i];
|
||||
|
||||
/* Extend the bignum to at least the size of .octa. */
|
||||
if (expressionP->X_add_number < SIZE_OF_LARGE_NUMBER)
|
||||
{
|
||||
expressionP->X_add_number = SIZE_OF_LARGE_NUMBER;
|
||||
for (; i < expressionP->X_add_number; ++i)
|
||||
generic_bignum[i] = ~(LITTLENUM_TYPE) 0;
|
||||
}
|
||||
|
||||
if (c == '-')
|
||||
for (i = 0; i < expressionP->X_add_number; ++i)
|
||||
{
|
||||
@@ -1066,14 +1075,12 @@ operand (expressionS *expressionP, enum expr_mode mode)
|
||||
}
|
||||
else if (c == '!')
|
||||
{
|
||||
int nonzero = 0;
|
||||
for (i = 0; i < expressionP->X_add_number; ++i)
|
||||
{
|
||||
if (generic_bignum[i])
|
||||
nonzero = 1;
|
||||
generic_bignum[i] = 0;
|
||||
}
|
||||
generic_bignum[0] = nonzero;
|
||||
if (generic_bignum[i] != 0)
|
||||
break;
|
||||
expressionP->X_add_number = i >= expressionP->X_add_number;
|
||||
expressionP->X_op = O_constant;
|
||||
expressionP->X_unsigned = 1;
|
||||
}
|
||||
}
|
||||
else if (expressionP->X_op != O_illegal
|
||||
|
||||
Reference in New Issue
Block a user