* combine.c (force_to_mode): Handle FLOAT_MODE destinations
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Sep 2002 03:26:47 +0000 (03:26 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Sep 2002 03:26:47 +0000 (03:26 +0000)
        for CONST_INT.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@57634 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/combine.c

index f265ac7..e0d7735 100644 (file)
@@ -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.
index e735519..ea12e05 100644 (file)
@@ -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.  */