entered into RCS
authorRichard Stallman <rms@gnu.org>
Sat, 11 Jul 1992 21:58:16 +0000 (21:58 +0000)
committerRichard Stallman <rms@gnu.org>
Sat, 11 Jul 1992 21:58:16 +0000 (21:58 +0000)
From-SVN: r1559

gcc/tree.c

index c90bd4e6c3e25d26824580b401853dd17b7f83fc..c67078360fb7256cc609874aea9431e0ea82d57c 100644 (file)
@@ -1107,7 +1107,7 @@ real_value_from_int_cst (i)
 #ifdef REAL_ARITHMETIC
   REAL_VALUE_FROM_INT (d, TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i));
 #else /* not REAL_ARITHMETIC */
-  if (TREE_INT_CST_HIGH (i) < 0)
+  if (TREE_INT_CST_HIGH (i) < 0 && ! TREE_UNSIGNED (TREE_TYPE (i)))
     {
       d = (double) (~ TREE_INT_CST_HIGH (i));
       d *= ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
@@ -1117,7 +1117,7 @@ real_value_from_int_cst (i)
     }
   else
     {
-      d = (double) TREE_INT_CST_HIGH (i);
+      d = (double) (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (i);
       d *= ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
            * (double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2)));
       d += (double) (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (i);
@@ -1140,7 +1140,7 @@ build_real_from_int_cst (type, i)
   v = make_node (REAL_CST);
   TREE_TYPE (v) = type;
 
-  d = real_value_from_int_cst (i);
+  d = REAL_VALUE_TRUNCATE (TYPE_MODE (type), real_value_from_int_cst (i));
   /* Check for valid float value for this type on this target machine;
      if not, can print error message and store a valid value in D.  */
 #ifdef CHECK_FLOAT_VALUE