aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/combine.c12
2 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f265ac7..e0d7735 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-09-29 Richard Henderson <rth@redhat.com>
+
+ * combine.c (force_to_mode): Handle FLOAT_MODE destinations
+ for CONST_INT.
+
2002-09-29 David Edelsohn <edelsohn@gnu.org>
* real.h (ibm_extended_format): Declare.
diff --git a/gcc/combine.c b/gcc/combine.c
index e735519..ea12e05 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -6817,12 +6817,20 @@ force_to_mode (x, mode, mask, reg, just_select)
/* If none of the bits in X are needed, return a zero. */
if (! just_select && (nonzero & mask) == 0)
- return const0_rtx;
+ x = const0_rtx;
/* If X is a CONST_INT, return a new one. Do this here since the
test below will fail. */
if (GET_CODE (x) == CONST_INT)
- return gen_int_mode (INTVAL (x) & mask, mode);
+ {
+ if (SCALAR_INT_MODE_P (mode))
+ return gen_int_mode (INTVAL (x) & mask, mode);
+ else
+ {
+ x = GEN_INT (INTVAL (x) & mask);
+ return gen_lowpart_common (mode, x);
+ }
+ }
/* If X is narrower than MODE and we want all the bits in X's mode, just
get X in the proper mode. */