diff options
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 22 |
1 files changed, 9 insertions, 13 deletions
@@ -37,6 +37,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "system.h" #include "flags.h" #include "tree.h" +#include "real.h" #include "tm_p.h" #include "function.h" #include "obstack.h" @@ -509,6 +510,7 @@ build_real (type, d) REAL_VALUE_TYPE d; { tree v; + REAL_VALUE_TYPE *dp; int overflow = 0; /* Check for valid float value for this type on this target machine; @@ -518,8 +520,11 @@ build_real (type, d) #endif v = make_node (REAL_CST); + dp = ggc_alloc (sizeof (REAL_VALUE_TYPE)); + memcpy (dp, &d, sizeof (REAL_VALUE_TYPE)); + TREE_TYPE (v) = type; - TREE_REAL_CST (v) = d; + TREE_REAL_CST_PTR (v) = dp; TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow; return v; } @@ -556,20 +561,11 @@ build_real_from_int_cst (type, i) { tree v; int overflow = TREE_OVERFLOW (i); - REAL_VALUE_TYPE d; - v = make_node (REAL_CST); - TREE_TYPE (v) = type; + v = build_real (type, real_value_from_int_cst (type, i)); - d = real_value_from_int_cst (type, i); - - /* Check for valid float value for this type on this target machine. */ -#ifdef CHECK_FLOAT_VALUE - CHECK_FLOAT_VALUE (TYPE_MODE (type), d, overflow); -#endif - - TREE_REAL_CST (v) = d; - TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow; + TREE_OVERFLOW (v) |= overflow; + TREE_CONSTANT_OVERFLOW (v) |= overflow; return v; } |