pa.c (pa_output_move_double): Enhance to handle HIGH CONSTANT_P operands.
authorJohn David Anglin <danglin@gcc.gnu.org>
Sat, 12 Sep 2015 13:51:40 +0000 (13:51 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Sat, 12 Sep 2015 13:51:40 +0000 (13:51 +0000)
* config/pa/pa.c (pa_output_move_double): Enhance to handle HIGH
CONSTANT_P operands.

From-SVN: r227706

gcc/ChangeLog
gcc/config/pa/pa.c

index 13804485d42487a25c13fe96ffef8a6ec024e466..c49902d0e59ca07dfa7e4e66f4de5ff10bec4434 100644 (file)
@@ -1,3 +1,8 @@
+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
index 7cf540c778522e2f3d35927ee724bcb871bc3788..e16e58d14ef3e72cd6f4086c99f341a459e99433 100644 (file)
@@ -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)