summaryrefslogtreecommitdiff
path: root/gcc/optabs.c
diff options
context:
space:
mode:
authorgeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>2000-05-14 21:18:13 +0000
committergeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>2000-05-14 21:18:13 +0000
commitee90778f3a312638933098ec6a63b65fb05b86f6 (patch)
treedf6d96007a36c9c9bd1d22176cfd5ce6465ced5f /gcc/optabs.c
parent97a3fa2d9f15bd09a79966aa8c31715e0e0f5090 (diff)
downloadgcc-ee90778f3a312638933098ec6a63b65fb05b86f6.tar.gz
* optabs.c (expand_float): Don't allow mode widening that causes
double rounding. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33894 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r--gcc/optabs.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 0cfe0649d6f..9f9871581aa 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -3888,6 +3888,10 @@ expand_float (to, from, unsignedp)
{
int doing_unsigned = unsignedp;
+ if (fmode != GET_MODE (to)
+ && significand_size (fmode) < GET_MODE_BITSIZE (GET_MODE (from)))
+ continue;
+
icode = can_float_p (fmode, imode, unsignedp);
if (icode == CODE_FOR_nothing && imode != GET_MODE (from) && unsignedp)
icode = can_float_p (fmode, imode, 0), doing_unsigned = 0;