* config/tc-mips.c (macro): Add comments explaining the rationale
for Chris' change.
This commit is contained in:
parent
eb0a7d52bd
commit
9214dd3be3
2 changed files with 22 additions and 1 deletions
|
@ -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>
|
2003-04-09 Chris Demetriou <cgd@broadcom.com>
|
||||||
|
|
||||||
* config/tc-mips.c (macro): Put back `+ 0x8000' in test for 64-bit
|
* config/tc-mips.c (macro): Put back `+ 0x8000' in test for 64-bit
|
||||||
|
|
|
@ -5846,7 +5846,23 @@ macro (ip)
|
||||||
range is shifted down by 32768 here. This code should
|
range is shifted down by 32768 here. This code should
|
||||||
probably attempt to generate 64-bit constants more
|
probably attempt to generate 64-bit constants more
|
||||||
efficiently in general.
|
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)
|
if ((offset_expr.X_op != O_constant && HAVE_64BIT_ADDRESSES)
|
||||||
|| (offset_expr.X_op == O_constant
|
|| (offset_expr.X_op == O_constant
|
||||||
&& !IS_SEXT_32BIT_NUM (offset_expr.X_add_number + 0x8000)
|
&& !IS_SEXT_32BIT_NUM (offset_expr.X_add_number + 0x8000)
|
||||||
|
|
Loading…
Reference in a new issue