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:
parent
0d24ff5d24
commit
4bb437245c
@ -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.
|
||||
|
@ -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 ();
|
||||
|
Loading…
Reference in New Issue
Block a user