(fold_convert): Avoid using conversion of unsigned
authorRichard Stallman <rms@gnu.org>
Sat, 19 Sep 1992 19:00:40 +0000 (19:00 +0000)
committerRichard Stallman <rms@gnu.org>
Sat, 19 Sep 1992 19:00:40 +0000 (19:00 +0000)
to floating; offset value by hand to fit in signed type.

From-SVN: r2165

gcc/fold-const.c

index 126aac4567754645748475de6055406318bb55ed..f2aa59fd57db49637c1ca6fb786169527086b1fc 100644 (file)
@@ -1517,7 +1517,13 @@ fold_convert (t, arg1)
 
            high = (HOST_WIDE_INT) (d / half_word / half_word);
            d -= (REAL_VALUE_TYPE) high * half_word * half_word;
-           low = (unsigned HOST_WIDE_INT) d;
+           if (d >= (REAL_VALUE_TYPE) half_word * half_word / 2)
+             {
+               low = d - (REAL_VALUE_TYPE) half_word * half_word / 2;
+               low |= 1 << (HOST_BITS_PER_WIDE_INT - 1);
+             }
+           else
+             low = (HOST_WIDE_INT) d;
            if (TREE_REAL_CST (arg1) < 0)
              neg_double (low, high, &low, &high);
            t = build_int_2 (low, high);