Commit 2b564b9c by John David Anglin

pa.c (pa_output_move_double): Enhance to handle HIGH CONSTANT_P operands.

	* config/pa/pa.c (pa_output_move_double): Enhance to handle HIGH
	CONSTANT_P operands.

From-SVN: r227706
parent 76b88c5f
2015-09-12 John David Anglin <danglin@gcc.gnu.org>
* config/pa/pa.c (pa_output_move_double): Enhance to handle HIGH
CONSTANT_P operands.
2015-09-11 David S. Miller <davem@davemloft.net>
* config/sparc/constraints.md: Make "U" constraint a real register
......
......@@ -2464,6 +2464,7 @@ pa_output_move_double (rtx *operands)
enum { REGOP, OFFSOP, MEMOP, CNSTOP, RNDOP } optype0, optype1;
rtx latehalf[2];
rtx addreg0 = 0, addreg1 = 0;
int highonly = 0;
/* First classify both operands. */
......@@ -2674,7 +2675,14 @@ pa_output_move_double (rtx *operands)
else if (optype1 == OFFSOP)
latehalf[1] = adjust_address_nv (operands[1], SImode, 4);
else if (optype1 == CNSTOP)
split_double (operands[1], &operands[1], &latehalf[1]);
{
if (GET_CODE (operands[1]) == HIGH)
{
operands[1] = XEXP (operands[1], 0);
highonly = 1;
}
split_double (operands[1], &operands[1], &latehalf[1]);
}
else
latehalf[1] = operands[1];
......@@ -2727,8 +2735,11 @@ pa_output_move_double (rtx *operands)
if (addreg1)
output_asm_insn ("ldo 4(%0),%0", &addreg1);
/* Do that word. */
output_asm_insn (pa_singlemove_string (latehalf), latehalf);
/* Do high-numbered word. */
if (highonly)
output_asm_insn ("ldil L'%1,%0", latehalf);
else
output_asm_insn (pa_singlemove_string (latehalf), latehalf);
/* Undo the adds we just did. */
if (addreg0)
......
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