aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1996-04-14 08:56:17 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1996-04-14 08:56:17 -0400
commit84c7be4b21fdb0614ffbf954771b0aa241a7877d (patch)
tree0fd8841104cfbfbc519013b9bc5ebff937003e40
parent7cb6a121f2ca1f53837c8601dea6bde95014d735 (diff)
downloadgcc-84c7be4b21fdb0614ffbf954771b0aa241a7877d.zip
gcc-84c7be4b21fdb0614ffbf954771b0aa241a7877d.tar.gz
gcc-84c7be4b21fdb0614ffbf954771b0aa241a7877d.tar.bz2
(real_value_from_int_cst): New arg, TYPE.
Pass mode to REAL_VALUE_FROM_INT. (build_real_from_int_cst): Properly deal with truncation. From-SVN: r11767
-rw-r--r--gcc/tree.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index fcbcacd..74d4fc0 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -1337,8 +1337,8 @@ build_real (type, d)
#if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
REAL_VALUE_TYPE
-real_value_from_int_cst (i)
- tree i;
+real_value_from_int_cst (type, i)
+ tree type, i;
{
REAL_VALUE_TYPE d;
REAL_VALUE_TYPE e;
@@ -1347,9 +1347,11 @@ real_value_from_int_cst (i)
#ifdef REAL_ARITHMETIC
if (! TREE_UNSIGNED (TREE_TYPE (i)))
- REAL_VALUE_FROM_INT (d, TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i));
+ REAL_VALUE_FROM_INT (d, TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
+ TYPE_MODE (type));
else
- REAL_VALUE_FROM_UNSIGNED_INT (d, TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i));
+ REAL_VALUE_FROM_UNSIGNED_INT (d, TREE_INT_CST_LOW (i),
+ TREE_INT_CST_HIGH (i), TYPE_MODE (type));
#else /* not REAL_ARITHMETIC */
if (TREE_INT_CST_HIGH (i) < 0 && ! TREE_UNSIGNED (TREE_TYPE (i)))
{
@@ -1399,7 +1401,12 @@ build_real_from_int_cst (type, i)
set_float_handler (float_error);
- d = REAL_VALUE_TRUNCATE (TYPE_MODE (type), real_value_from_int_cst (i));
+#if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
+ d = real_value_from_int_cst (type, i);
+#else
+ d = REAL_VALUE_TRUNCATE (TYPE_MODE (type),
+ real_value_from_int_cst (type, i));
+#endif
/* Check for valid float value for this type on this target machine. */