From: Jeff Law Date: Tue, 17 Jan 1995 23:42:12 +0000 (-0700) Subject: pa.c (emit_move_sequence): Also handle displacements which do not fit in 14 bits... X-Git-Tag: misc/cutover-egcs-0~5186 X-Git-Url: https://gcc.gnu.org/git/?a=commitdiff_plain;h=2d7b2c36ac91e3064d7e977663fd2d8bef9d4f19;p=gcc.git pa.c (emit_move_sequence): Also handle displacements which do not fit in 14 bits for fp load/store... * pa.c (emit_move_sequence): Also handle displacements which do not fit in 14 bits for fp load/store secondary reloads. From-SVN: r8769 --- diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 59c14660d0ed..72a86b5142cc 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -797,7 +797,19 @@ emit_move_sequence (operands, mode, scratch_reg) operand1 = XEXP (operand1, 0); scratch_reg = gen_rtx (REG, SImode, REGNO (scratch_reg)); - emit_move_insn (scratch_reg, XEXP (operand1, 0)); + + /* D might not fit in 14 bits either; for such cases load D into + scratch reg. */ + if (!memory_address_p (SImode, XEXP (operand1, 0))) + { + emit_move_insn (scratch_reg, XEXP (XEXP (operand1, 0), 1)); + emit_move_insn (scratch_reg, gen_rtx (GET_CODE (XEXP (operand1, 0)), + SImode, + XEXP (XEXP (operand1, 0), 0), + scratch_reg)); + } + else + emit_move_insn (scratch_reg, XEXP (operand1, 0)); emit_insn (gen_rtx (SET, VOIDmode, operand0, gen_rtx (MEM, mode, scratch_reg))); return 1; @@ -814,7 +826,18 @@ emit_move_sequence (operands, mode, scratch_reg) operand0 = XEXP (operand0, 0); scratch_reg = gen_rtx (REG, SImode, REGNO (scratch_reg)); - emit_move_insn (scratch_reg, XEXP (operand0, 0)); + /* D might not fit in 14 bits either; for such cases load D into + scratch reg. */ + if (!memory_address_p (SImode, XEXP (operand0, 0))) + { + emit_move_insn (scratch_reg, XEXP (XEXP (operand0, 0), 1)); + emit_move_insn (scratch_reg, gen_rtx (GET_CODE (XEXP (operand0, 0)), + SImode, + XEXP (XEXP (operand0, 0), 0), + scratch_reg)); + } + else + emit_move_insn (scratch_reg, XEXP (operand0, 0)); emit_insn (gen_rtx (SET, VOIDmode, gen_rtx (MEM, mode, scratch_reg), operand1)); return 1;