Commit 4bb43724 by Richard Henderson Committed by Jim Wilson

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

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

From-SVN: r15459
parent 0d24ff5d
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)
else if (CONSTANT_P (operands[1]))
{
if (TARGET_BUILD_CONSTANTS)
{
#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;
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();
abort();
#endif
}
else if (CONSTANT_P (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]);
{
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 ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment