Compilation of the boinc package currently fails with an ICE caused by
adjusting an address
with a misaligned offset in adjust_address. This occurs when the
adjustment occurs for an INT5
offset that is always valid and an INT14 offset whose validity is mode
dependent. The offsetable
address check doesn't work well here because QImode offsets within the
INT14 range are always
valid.
The fix is to simply not check the validity of the adjustment. The
result is better checked by the
assembler and runtime execution.
Tested on hppa-unknown-linux-gnu and hppa2.0w-hp-hpux11.11. Committed
to active branches.
Dave
--
John David Anglin dave.ang...@bell.net
2014-02-24 John David Anglin <dang...@gcc.gnu.org>
* config/pa/pa.c (pa_output_move_double): Don't valididate when
adjusting offsetable addresses.
Index: config/pa/pa.c
===================================================================
--- config/pa/pa.c (revision 208059)
+++ config/pa/pa.c (working copy)
@@ -2627,7 +2627,7 @@
if (optype0 == REGOP)
latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
else if (optype0 == OFFSOP)
- latehalf[0] = adjust_address (operands[0], SImode, 4);
+ latehalf[0] = adjust_address_nv (operands[0], SImode, 4);
else
latehalf[0] = operands[0];
@@ -2634,7 +2634,7 @@
if (optype1 == REGOP)
latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
else if (optype1 == OFFSOP)
- latehalf[1] = adjust_address (operands[1], SImode, 4);
+ latehalf[1] = adjust_address_nv (operands[1], SImode, 4);
else if (optype1 == CNSTOP)
split_double (operands[1], &operands[1], &latehalf[1]);
else