aboutsummaryrefslogtreecommitdiff
path: root/gcc/fixed-value.c
diff options
context:
space:
mode:
authorJanis Johnson <janis187@us.ibm.com>2007-09-05 22:16:33 +0000
committerJanis Johnson <janis@gcc.gnu.org>2007-09-05 22:16:33 +0000
commitbe677dc12a6e687d24d375089ae2025fcfad4c9c (patch)
tree72280026eaa73c9852ddb3c7c02af486aa283ed6 /gcc/fixed-value.c
parent7336815f6fa8c43e6883a46ef3e32f2bee920ebc (diff)
downloadgcc-be677dc12a6e687d24d375089ae2025fcfad4c9c.zip
gcc-be677dc12a6e687d24d375089ae2025fcfad4c9c.tar.gz
gcc-be677dc12a6e687d24d375089ae2025fcfad4c9c.tar.bz2
optabs.c (expand_float): Convert unsigned integer as signed only if it provides sufficient accuracy...
gcc/ * optabs.c (expand_float): Convert unsigned integer as signed only if it provides sufficient accuracy; add mode argument to real_2expN. (expand_fix): Fix comment typos; extend binary float into mode wider than destination for converion to unsigned integer; add mode argument to real_2expN. * real.c (real_2expN): Add mode argument to special-case decimal float values. * real.h (real_2expN): Ditto. * fixed-value.c (check_real_for_fixed_mode): Add mode argument to real_2expN. (fixed_from_string): Ditto. (fixed_to_decimal): Ditto. (fixed_convert_from_real): Ditto. (real_convert_from_fixed): Ditto. * config/rs6000/rs6000.md (FP): Include DD and TD modes. * config/rs6000/dfp.md (extendddtd2, adddd3, addtd3, subdd3, subtd3, muldd3, multd3, divdd3, divtd3, cmpdd_internal1, cmptd_internal1, floatditd2, ftruncdd2, fixdddi2, ftrunctd2, fixddi2): New. gcc/testsuite/ * gcc.target/powerpc/dfp-dd.c: New test. * gcc.target/powerpc/dfp-td.c: New test. From-SVN: r128156
Diffstat (limited to 'gcc/fixed-value.c')
-rw-r--r--gcc/fixed-value.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/gcc/fixed-value.c b/gcc/fixed-value.c
index aca386a..8c8d371 100644
--- a/gcc/fixed-value.c
+++ b/gcc/fixed-value.c
@@ -64,8 +64,8 @@ check_real_for_fixed_mode (REAL_VALUE_TYPE *real_value, enum machine_mode mode)
{
REAL_VALUE_TYPE max_value, min_value, epsilon_value;
- real_2expN (&max_value, GET_MODE_IBIT (mode));
- real_2expN (&epsilon_value, -GET_MODE_FBIT (mode));
+ real_2expN (&max_value, GET_MODE_IBIT (mode), mode);
+ real_2expN (&epsilon_value, -GET_MODE_FBIT (mode), mode);
if (SIGNED_FIXED_POINT_MODE_P (mode))
min_value = REAL_VALUE_NEGATE (max_value);
@@ -102,7 +102,7 @@ fixed_from_string (FIXED_VALUE_TYPE *f, const char *str, enum machine_mode mode)
|| (temp == FIXED_MAX_EPS && ALL_ACCUM_MODE_P (f->mode)))
warning (OPT_Woverflow,
"large fixed-point constant implicitly truncated to fixed-point type");
- real_2expN (&base_value, fbit);
+ real_2expN (&base_value, fbit, mode);
real_arithmetic (&fixed_value, MULT_EXPR, &real_value, &base_value);
real_to_integer2 ((HOST_WIDE_INT *)&f->data.low, &f->data.high,
&fixed_value);
@@ -132,7 +132,7 @@ fixed_to_decimal (char *str, const FIXED_VALUE_TYPE *f_orig,
{
REAL_VALUE_TYPE real_value, base_value, fixed_value;
- real_2expN (&base_value, GET_MODE_FBIT (f_orig->mode));
+ real_2expN (&base_value, GET_MODE_FBIT (f_orig->mode), f_orig->mode);
real_from_integer (&real_value, VOIDmode, f_orig->data.low, f_orig->data.high,
UNSIGNED_FIXED_POINT_MODE_P (f_orig->mode));
real_arithmetic (&fixed_value, RDIV_EXPR, &real_value, &base_value);
@@ -1067,7 +1067,7 @@ fixed_convert_from_real (FIXED_VALUE_TYPE *f, enum machine_mode mode,
real_value = *a;
f->mode = mode;
- real_2expN (&base_value, fbit);
+ real_2expN (&base_value, fbit, mode);
real_arithmetic (&fixed_value, MULT_EXPR, &real_value, &base_value);
real_to_integer2 ((HOST_WIDE_INT *)&f->data.low, &f->data.high, &fixed_value);
temp = check_real_for_fixed_mode (&real_value, mode);
@@ -1116,7 +1116,7 @@ real_convert_from_fixed (REAL_VALUE_TYPE *r, enum machine_mode mode,
{
REAL_VALUE_TYPE base_value, fixed_value, real_value;
- real_2expN (&base_value, GET_MODE_FBIT (f->mode));
+ real_2expN (&base_value, GET_MODE_FBIT (f->mode), f->mode);
real_from_integer (&fixed_value, VOIDmode, f->data.low, f->data.high,
UNSIGNED_FIXED_POINT_MODE_P (f->mode));
real_arithmetic (&real_value, RDIV_EXPR, &fixed_value, &base_value);