combine.c (expand_field_assignment): Don't do bitwise operations on MODE_FLOAT; pun to MODE_INT if possible.

* combine.c (expand_field_assignment): Don't do bitwise operations
        on MODE_FLOAT; pun to MODE_INT if possible.

From-SVN: r22826
This commit is contained in:
Richard Henderson 1998-10-04 16:59:58 -07:00 committed by Richard Henderson
parent 12a27dfc4e
commit 861556b4d9
2 changed files with 23 additions and 0 deletions

View File

@ -1,3 +1,8 @@
Sun Oct 4 23:58:30 1998 Richard Henderson <rth@cygnus.com>
* combine.c (expand_field_assignment): Don't do bitwise operations
on MODE_FLOAT; pun to MODE_INT if possible.
Sun Oct 4 18:33:24 1998 Jason Merrill <jason@yorick.cygnus.com>
scott snyder <snyder@d0sgif.fnal.gov>

View File

@ -5384,6 +5384,24 @@ expand_field_assignment (x)
compute_mode = GET_MODE (inner);
/* Don't attempt bitwise arithmetic on non-integral modes. */
if (! INTEGRAL_MODE_P (compute_mode))
{
enum machine_mode imode;
/* Something is probably seriously wrong if this matches. */
if (! FLOAT_MODE_P (compute_mode))
break;
/* Try to find an integral mode to pun with. */
imode = mode_for_size (GET_MODE_BITSIZE (compute_mode), MODE_INT, 0);
if (imode == BLKmode)
break;
compute_mode = imode;
inner = gen_lowpart_for_combine (imode, inner);
}
/* Compute a mask of LEN bits, if we can do this on the host machine. */
if (len < HOST_BITS_PER_WIDE_INT)
mask = GEN_INT (((HOST_WIDE_INT) 1 << len) - 1);