mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-23 10:54:07 +08:00
aarch64: Extend the offset limit in "symbol + offset" from 1MB to 16MB
This patch allows using an offset of up to 16MB in "symbol + offset", instead of 1MB limit that was used previously. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_load_symref_appropriately): Update.
This commit is contained in:
parent
71381ecc1e
commit
55788176f1
@ -3030,7 +3030,22 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm,
|
||||
if (can_create_pseudo_p ())
|
||||
tmp_reg = gen_reg_rtx (mode);
|
||||
|
||||
HOST_WIDE_INT mid_const = 0;
|
||||
if (TARGET_PECOFF)
|
||||
{
|
||||
poly_int64 offset;
|
||||
strip_offset (imm, &offset);
|
||||
|
||||
HOST_WIDE_INT const_offset;
|
||||
if (offset.is_constant (&const_offset))
|
||||
/* Written this way for the sake of negative offsets. */
|
||||
mid_const = const_offset / (1 << 20) * (1 << 20);
|
||||
}
|
||||
imm = plus_constant (mode, imm, -mid_const);
|
||||
|
||||
emit_move_insn (tmp_reg, gen_rtx_HIGH (mode, copy_rtx (imm)));
|
||||
if (mid_const)
|
||||
emit_set_insn (tmp_reg, plus_constant (mode, tmp_reg, mid_const));
|
||||
emit_insn (gen_add_losym (dest, tmp_reg, imm));
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user