mipsisa32-unknown-elf-as: Error: too large constant specified
Nigel Stephens
nigel@mips.com
Tue Oct 14 23:54:00 GMT 2003
Ian Lance Taylor wrote:
>Well, this example works fine:
> and $26, $26, (~(0xE0000000) & 0xffffffff)
>
>Whether this is a bug or not is difficult to say. What is the
>precision of the ~ operator? What's happening is that ~0xe0000000 is
>being turned into 0xffffffff1fffffff. That constant is indeed too
>large. Naturally you want ~0xe0000000 to be 0x1fffffff. But,
>currently, for any MIPS target, the assembler will do 64-bit
>arithmetic. Maybe for a 32 bit MIPS target the assembler should know
>to use 32-bit arithmetic. Unfortunately that would not be a trivial
>change.
>
>
>
I believe that this new behaviour is broken. I don't think that gas
should suddenly start interpreting immediate operands as 64-bit values,
even when compiling for a 64-bit ISA, never mind for a 32-bit ISA - it's
just going to break too much legacy assembler code. If a programmer
wishes to use a 64-bit immediate they can easily enough code this as a
"dli" followed by the appropriate instruction, which is what the
assembler's going to expand it to anyway, and that avoids any ambiguity.
(Of course it would be cool if the assembler supported the "LL" suffix
on constants as a way to disambiguate, but that would be hard).
If load_register's "dbl" argument is not set then it should probably
quietly sign-extend a value without a warning, so long as the top 32
bits are all zero.
Nigel
--
Nigel Stephens Mailto:nigel@mips.com
_ _ ____ ___ MIPS Technologies Phone.: +44 1223 706200
|\ /|||___)(___ The Fruit Farm Direct: +44 1223 706207
| \/ ||| ____) Ely Road, Chittering Fax...: +44 1223 706250
TECHNOLOGIES UK Cambridge CB5 9PH Cell..: +44 7976 686470
England http://www.mips.com
More information about the Binutils
mailing list