]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c4x.c (c4x_emit_move_sequence): Force invalid QImode constants into memory if...
authorMichael Hayes <m.hayes@elec.canterbury.ac.nz>
Thu, 1 Apr 1999 16:02:07 +0000 (16:02 +0000)
committerMichael Hayes <m.hayes@gcc.gnu.org>
Thu, 1 Apr 1999 16:02:07 +0000 (16:02 +0000)
* config/c4x/c4x.c (c4x_emit_move_sequence): Force invalid QImode
constants into memory if we get called directly from gen_move_insn
rather than emit_move_insn.
(c4x_legitimize_address): Fix up LABEL_REF addresses.

From-SVN: r26106

gcc/ChangeLog
gcc/config/c4x/c4x.c

index 231007ba907127285e6f83b0635ab8a33823b38c..7c683827024b6a93c6b69c6e0151e34feddf5ef8 100644 (file)
@@ -1,3 +1,10 @@
+Fri Apr  2 11:58:22 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+
+       * config/c4x/c4x.c (c4x_emit_move_sequence): Force invalid QImode
+       constants into memory if we get called directly from gen_move_insn
+       rather than emit_move_insn.
+       (c4x_legitimize_address): Fix up LABEL_REF addresses.
+
 Thu Apr  1 12:04:05 1999  Jim Wilson  <wilson@cygnus.com>
 
        * expr.c (store_field): When check direct_store, assume all complex
index c1309f15ea91f4de1ffdfcb0f3b3bbb1eb61da25..e8cee04cf403afa6f3076a5a4912e99967bf40f9 100644 (file)
@@ -1058,6 +1058,13 @@ c4x_emit_move_sequence (operands, mode)
         constants...  */
       op1 = force_const_mem (mode, op1);
     }
+  else if (mode == QImode && CONSTANT_P (op1) && ! LEGITIMATE_CONSTANT_P (op1))
+    {
+      /* We shouldn't need this test if only emit_move_insn was called.
+        However, some routines call gen_move_insn which doesn't check that
+        the constants are legitimate.  */
+      op1 = force_const_mem (mode, op1);
+    }
   else if (mode == HImode && CONSTANT_P (op1) && ! LEGITIMATE_CONSTANT_P (op1))
     {
       /* We could load all sorts of constants in two goes by pulling all
@@ -1431,7 +1438,8 @@ c4x_legitimize_address (orig, mode)
      rtx orig ATTRIBUTE_UNUSED;
      enum machine_mode mode ATTRIBUTE_UNUSED;
 {
-  if (GET_CODE (orig) == SYMBOL_REF)
+  if (GET_CODE (orig) == SYMBOL_REF
+      || GET_CODE (orig) == LABEL_REF)
     {
       if (mode == HImode || mode == HFmode)
        {
@@ -2183,9 +2191,9 @@ static int
 c4x_K_constant (op)
      rtx op;
 {
-  if (TARGET_C3X)
+  if (TARGET_C3X || ! c4x_immed_int_constant (op))
     return 0;
-  return c4x_immed_int_constant (op) && IS_INT5_CONST (INTVAL (op));
+  return IS_INT5_CONST (INTVAL (op));
 }
 
 
@@ -2876,7 +2884,7 @@ call_address_operand (op, mode)
 }
 
 
-/* Symbolic operand.  */
+/* Symbolic address operand.  */
 
 int
 symbolic_address_operand (op, mode)
@@ -4387,4 +4395,3 @@ c4x_adjust_cost (insn, link, dep_insn, cost)
   else
     abort ();
 }
-