OSDN Git Service

Patch from Richard Henderson for alpha-linux ld.so bug.
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Sep 1997 22:36:34 +0000 (22:36 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Sep 1997 22:36:34 +0000 (22:36 +0000)
* alpha.md (movdi): Handle CONST_DOUBLE for TARGET_BUILD_CONSTANTS.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@15459 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/alpha/alpha.md

index 0fd4105..a6daaa8 100644 (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.
index ce45183..d718481 100644 (file)
       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 ();