aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-07-11 21:58:16 +0000
committerRichard Stallman <rms@gnu.org>1992-07-11 21:58:16 +0000
commitdb7e5239390f0e259b64858ae1333ddb708e4486 (patch)
tree4dc76aa0ca4c9074e06680d7aa2e626c80897dfa /gcc/tree.c
parentd75e62a9761a136e5bfa20f564cb9671a98f95c1 (diff)
downloadgcc-db7e5239390f0e259b64858ae1333ddb708e4486.zip
gcc-db7e5239390f0e259b64858ae1333ddb708e4486.tar.gz
gcc-db7e5239390f0e259b64858ae1333ddb708e4486.tar.bz2
entered into RCS
From-SVN: r1559
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index c90bd4e..c670783 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -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