* config/tc-mips.c (macro): Add comments explaining the rationale

for Chris' change.
This commit is contained in:
Alexandre Oliva 2003-04-09 03:09:12 +00:00
parent eb0a7d52bd
commit 9214dd3be3
2 changed files with 22 additions and 1 deletions

View file

@ -1,3 +1,8 @@
2003-04-09 Alexandre Oliva <aoliva@redhat.com>
* config/tc-mips.c (macro): Add comments explaining the rationale
for Chris' change.
2003-04-09 Chris Demetriou <cgd@broadcom.com>
* config/tc-mips.c (macro): Put back `+ 0x8000' in test for 64-bit

View file

@ -5846,7 +5846,23 @@ macro (ip)
range is shifted down by 32768 here. This code should
probably attempt to generate 64-bit constants more
efficiently in general.
*/
As an extension for architectures with 64-bit registers,
we don't truncate 64-bit addresses given as literal
constants down to 32 bits, to support existing practice
in the mips64 Linux (the kernel), that compiles source
files with -mabi=64, assembling them as o32 or n32 (with
-Wa,-32 or -Wa,-n32). This is not beautiful, but since
the whole kernel is loaded into a memory region that is
addressible with sign-extended 32-bit addresses, it is
wasteful to compute the upper 32 bits of every
non-literal address, that takes more space and time.
Some day this should probably be implemented as an
assembler option, such that the kernel doesn't have to
use such ugly hacks, even though it will still have to
end up converting the binary to ELF32 for a number of
platforms whose boot loaders don't support ELF64
binaries. */
if ((offset_expr.X_op != O_constant && HAVE_64BIT_ADDRESSES)
|| (offset_expr.X_op == O_constant
&& !IS_SEXT_32BIT_NUM (offset_expr.X_add_number + 0x8000)