(i960_output_ldconst): Let split_double handle DImode.
authorTorbjorn Granlund <tege@gnu.org>
Fri, 12 May 1995 01:36:45 +0000 (01:36 +0000)
committerTorbjorn Granlund <tege@gnu.org>
Fri, 12 May 1995 01:36:45 +0000 (01:36 +0000)
(i960_print_operand): Use REAL_VALUE_TO_DECIMAL for decimal strings.
(i960_output_double, i960_output_float):  Likewise; also change arg
VALUE from `double' to `REAL_VALUE_TYPE'.

From-SVN: r9632

gcc/config/i960/i960.c

index 18175b72e2c4c3f9062d6059c42c55595dc31b9f..57c409bfee331f18994a134b0c013eb300208859 100644 (file)
@@ -581,7 +581,6 @@ i960_output_ldconst (dst, src)
   register unsigned rsrc2;
   enum machine_mode mode = GET_MODE (dst);
   rtx operands[4];
-  union { long l[2]; double d; } x;
 
   operands[0] = operands[2] = dst;
   operands[1] = operands[3] = src;
@@ -631,18 +630,10 @@ i960_output_ldconst (dst, src)
   else if (mode == DImode)
     {
       rtx upperhalf, lowerhalf, xoperands[2];
-      char *string;
 
-      if (GET_CODE (src) == CONST_DOUBLE)
-       {
-         upperhalf = gen_rtx (CONST_INT, VOIDmode, CONST_DOUBLE_HIGH (src));
-         lowerhalf = gen_rtx (CONST_INT, VOIDmode, CONST_DOUBLE_LOW (src));
-       }
-      else if (GET_CODE (src) == CONST_INT)
-       {
-         lowerhalf = src;
-         upperhalf = INTVAL (src) < 0 ? constm1_rtx : const0_rtx;
-       }
+      if (GET_CODE (src) == CONST_DOUBLE || GET_CODE (src) == CONST_INT)
+       split_double (src, &lowerhalf, &upperhalf);
+
       else
        abort ();
 
@@ -1458,22 +1449,23 @@ i960_print_operand (file, x, code)
     }
   else if (rtxcode == CONST_DOUBLE)
     {
-      double d;
+      REAL_VALUE_TYPE d;
+      char dstr[30];
 
-      if (x == CONST0_RTX (DFmode) || x == CONST0_RTX (SFmode))
+      if (x == CONST0_RTX (GET_MODE (x)))
        {
          fprintf (file, "0f0.0");
          return;
        }
-      else if (x == CONST1_RTX (DFmode) || x == CONST1_RTX (SFmode))
+      else if (x == CONST1_RTX (GET_MODE (x)))
        {
          fprintf (file, "0f1.0");
          return;
        }
 
-      /* This better be a comment.  */
       REAL_VALUE_FROM_CONST_DOUBLE (d, x);
-      fprintf (file, "%#g", d);
+      REAL_VALUE_TO_DECIMAL (d, "%#g", dstr);
+      fprintf (file, "0f%s", dstr);
       return;
     }
 
@@ -2115,41 +2107,24 @@ i960_function_arg (cum, mode, type, named)
 void
 i960_output_double (file, value)
      FILE *file;
-     double value;
+     REAL_VALUE_TYPE value;
 {
-#ifdef REAL_VALUE_TO_TARGET_DOUBLE
   long value_long[2];
   REAL_VALUE_TO_TARGET_DOUBLE (value, value_long);
 
-  fprintf (file, "\t.word\t0x%08lx\t\t# %.20g\n\t.word\t0x%08lx\n",
-          value_long[0], value, value_long[1]);
-#else
-  if (REAL_VALUE_ISINF (value))
-    {
-      fprintf (file, "\t.word  0\n");
-      fprintf (file, "\t.word  0x7ff00000      # Infinity\n");
-    }
-  else
-    fprintf (file, "\t.double 0d%.17e\n", (value));
-#endif
+  fprintf (file, "\t.word\t0x%08lx\n\t.word\t0x%08lx\n",
+          value_long[0], value_long[1]);
 }
-
+  
 void
 i960_output_float (file, value)
      FILE *file;
-     double value;
+     REAL_VALUE_TYPE value;
 {
-#ifdef REAL_VALUE_TO_TARGET_SINGLE
   long value_long;
   REAL_VALUE_TO_TARGET_SINGLE (value, value_long);
 
-  fprintf (file, "\t.word\t0x%08lx\t\t# %.12g (float)\n", value_long, value);
-#else
-  if (REAL_VALUE_ISINF (value))
-    fprintf (file, "\t.word    0x7f800000      # Infinity\n");
-  else
-    fprintf (file, "\t.float 0f%.12e\n", (value));
-#endif
+  fprintf (file, "\t.word\t0x%08lx\n", value_long);
 }
 \f
 /* Return the number of bits that an object of size N bytes is aligned to.  */