re PR target/16925 (ICE when building a m68hc11 cross-compiler on 64-bit architectures)
authorStephane Carrez <stcarrez@nerim.fr>
Sun, 8 May 2005 10:23:39 +0000 (12:23 +0200)
committerStephane Carrez <ciceron@gcc.gnu.org>
Sun, 8 May 2005 10:23:39 +0000 (12:23 +0200)
PR target/16925
* config/m68hc11/m68hc11.c (m68hc11_gen_highpart): Handle split of
64-bit constants on 64-bit hosts.
(m68hc11_split_logical): Simplify.
(m68hc11_split_move): Likewise.

From-SVN: r99388

gcc/ChangeLog
gcc/config/m68hc11/m68hc11.c

index 38b08bd..7762083 100644 (file)
@@ -1,3 +1,11 @@
+2005-05-08  Stephane Carrez  <stcarrez@nerim.fr>
+
+       PR target/16925
+       * config/m68hc11/m68hc11.c (m68hc11_gen_highpart): Handle split of
+       64-bit constants on 64-bit hosts.
+       (m68hc11_split_logical): Simplify.
+       (m68hc11_split_move): Likewise.
+
 2005-05-08  Nathan Sidwell  <nathan@codesourcery.com>
            Paolo Bonzini  <bonzini@gnu.org>
 
index 06c7e3e..93fe2c3 100644 (file)
@@ -1929,6 +1929,10 @@ m68hc11_gen_highpart (enum machine_mode mode, rtx x)
        {
          return gen_int_mode (val >> 16, HImode);
        }
+      else if (mode == SImode)
+       {
+         return gen_int_mode (val >> 32, SImode);
+       }
     }
   if (mode == QImode && D_REG_P (x))
     return gen_rtx_REG (mode, HARD_A_REGNUM);
@@ -2814,15 +2818,7 @@ m68hc11_split_move (rtx to, rtx from, rtx scratch)
   high_to = m68hc11_gen_highpart (mode, to);
 
   low_from = m68hc11_gen_lowpart (mode, from);
-  if (mode == SImode && GET_CODE (from) == CONST_INT)
-    {
-      if (INTVAL (from) >= 0)
-       high_from = const0_rtx;
-      else
-       high_from = constm1_rtx;
-    }
-  else
-    high_from = m68hc11_gen_highpart (mode, from);
+  high_from = m68hc11_gen_highpart (mode, from);
 
   if (offset)
     {
@@ -3006,26 +3002,8 @@ m68hc11_split_logical (enum machine_mode mode, int code, rtx *operands)
   low[2] = m68hc11_gen_lowpart (mode, operands[2]);
 
   high[0] = m68hc11_gen_highpart (mode, operands[0]);
-
-  if (mode == SImode && GET_CODE (operands[1]) == CONST_INT)
-    {
-      if (INTVAL (operands[1]) >= 0)
-       high[1] = const0_rtx;
-      else
-       high[1] = constm1_rtx;
-    }
-  else
-    high[1] = m68hc11_gen_highpart (mode, operands[1]);
-
-  if (mode == SImode && GET_CODE (operands[2]) == CONST_INT)
-    {
-      if (INTVAL (operands[2]) >= 0)
-       high[2] = const0_rtx;
-      else
-       high[2] = constm1_rtx;
-    }
-  else
-    high[2] = m68hc11_gen_highpart (mode, operands[2]);
+  high[1] = m68hc11_gen_highpart (mode, operands[1]);
+  high[2] = m68hc11_gen_highpart (mode, operands[2]);
 
   low[3] = operands[3];
   high[3] = operands[3];