Patch from Richard Henderson for alpha-linux ld.so bug.

* alpha.md (movdi): Handle CONST_DOUBLE for TARGET_BUILD_CONSTANTS.

From-SVN: r15459
This commit is contained in:
Richard Henderson 1997-09-15 15:36:34 -07:00 committed by Jim Wilson
parent 0d24ff5d24
commit 4bb437245c
2 changed files with 32 additions and 19 deletions

View File

@ -1,5 +1,7 @@
Mon Sep 15 15:24:00 1997 Richard Henderson <rth@cygnus.com>
* alpha.md (movdi): Handle CONST_DOUBLE for TARGET_BUILD_CONSTANTS.
* alpha/alpha.c (output_prolog): New variable sa_reg. Use it for
out-or-range reg_offset.
(output_epilog): Likewise.

View File

@ -3830,30 +3830,41 @@
else
operands[1] = tem;
}
else if (TARGET_BUILD_CONSTANTS
&& GET_CODE (operands[1]) == CONST_INT)
{
#if HOST_BITS_PER_WIDE_INT == 64
tem = alpha_emit_set_long_const (operands[0], INTVAL (operands[1]));
if (rtx_equal_p (tem, operands[0]))
DONE;
else
operands[1] = tem;
#else
abort();
#endif
}
else if (CONSTANT_P (operands[1]))
{
operands[1] = force_const_mem (DImode, operands[1]);
if (reload_in_progress)
if (TARGET_BUILD_CONSTANTS)
{
emit_move_insn (operands[0], XEXP (operands[1], 0));
operands[1] = copy_rtx (operands[1]);
XEXP (operands[1], 0) = operands[0];
#if HOST_BITS_PER_WIDE_INT == 64
HOST_WIDE_INT i;
if (GET_CODE (operands[1]) == CONST_INT)
i = INTVAL (operands[1]);
else if (GET_CODE (operands[1]) == CONST_DOUBLE)
i = CONST_DOUBLE_LOW (operands[1]);
else
abort();
tem = alpha_emit_set_long_const (operands[0], i);
if (rtx_equal_p (tem, operands[0]))
DONE;
else
operands[1] = tem;
#else
abort();
#endif
}
else
operands[1] = validize_mem (operands[1]);
{
operands[1] = force_const_mem (DImode, operands[1]);
if (reload_in_progress)
{
emit_move_insn (operands[0], XEXP (operands[1], 0));
operands[1] = copy_rtx (operands[1]);
XEXP (operands[1], 0) = operands[0];
}
else
operands[1] = validize_mem (operands[1]);
}
}
else
abort ();