summaryrefslogtreecommitdiff
path: root/gcc/real.c
diff options
context:
space:
mode:
authorjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>2007-09-05 22:16:33 +0000
committerjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>2007-09-05 22:16:33 +0000
commit94324bd1e1b5da605f646acc3438ee9cf2410b5a (patch)
tree72280026eaa73c9852ddb3c7c02af486aa283ed6 /gcc/real.c
parentfd6631fdaa78a44854e81f29fcc8d118b049a36d (diff)
downloadgcc-94324bd1e1b5da605f646acc3438ee9cf2410b5a.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128156 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/real.c')
-rw-r--r--gcc/real.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/real.c b/gcc/real.c
index 9686309cf3d..8e623f6b9ad 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -2304,7 +2304,7 @@ real_maxval (REAL_VALUE_TYPE *r, int sign, enum machine_mode mode)
/* Fills R with 2**N. */
void
-real_2expN (REAL_VALUE_TYPE *r, int n)
+real_2expN (REAL_VALUE_TYPE *r, int n, enum machine_mode fmode)
{
memset (r, 0, sizeof (*r));
@@ -2319,6 +2319,9 @@ real_2expN (REAL_VALUE_TYPE *r, int n)
SET_REAL_EXP (r, n);
r->sig[SIGSZ-1] = SIG_MSB;
}
+
+ if (DECIMAL_FLOAT_MODE_P (fmode))
+ decimal_real_convert (r, fmode, r);
}