diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1996-04-14 08:56:17 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1996-04-14 08:56:17 -0400 |
commit | 84c7be4b21fdb0614ffbf954771b0aa241a7877d (patch) | |
tree | 0fd8841104cfbfbc519013b9bc5ebff937003e40 | |
parent | 7cb6a121f2ca1f53837c8601dea6bde95014d735 (diff) | |
download | gcc-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.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -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. */ |