]> gcc.gnu.org Git - gcc.git/commitdiff
entered into RCS
authorRichard Stallman <rms@gnu.org>
Mon, 6 Jul 1992 20:02:55 +0000 (20:02 +0000)
committerRichard Stallman <rms@gnu.org>
Mon, 6 Jul 1992 20:02:55 +0000 (20:02 +0000)
From-SVN: r1470

gcc/genattrtab.c
gcc/genemit.c
gcc/genrecog.c

index dc96d815ab294d87e44f9c970bd51b0df3f27ad1..a673fe936758b2cb0cd45729287ac4894cfb96a2 100644 (file)
@@ -170,6 +170,8 @@ struct attr_desc
   struct attr_value *default_val; /* Default value for this attribute. */
 };
 
+#define NULL_ATTR (struct attr_desc *) NULL
+
 /* Structure for each DEFINE_DELAY.  */
 
 struct delay_desc
@@ -546,7 +548,7 @@ attr_rtx (va_alist)
     }
   else if (code == CONST_INT)
     {
-      int arg0 = va_arg (p, int);
+      HOST_WIDE_INT arg0 = va_arg (p, HOST_WIDE_INT);
       if (arg0 == 0)
        return false_rtx;
       if (arg0 == 1)
@@ -570,6 +572,10 @@ attr_rtx (va_alist)
              XINT (rt_val, i) = va_arg (p, int);
              break;
 
+           case 'w':           /* A wide integer? */
+             XWINT (rt_val, i) = va_arg (p, HOST_WIDE_INT);
+             break;
+
            case 's':           /* A string?  */
              XSTR (rt_val, i) = va_arg (p, char *);
              break;
@@ -772,9 +778,22 @@ attr_copy_rtx (orig)
            }
          break;
 
-       default:
+       case 'n':
+       case 'i':
          XINT (copy, i) = XINT (orig, i);
          break;
+
+       case 'w':
+         XWINT (copy, i) = XWINT (orig, i);
+         break;
+
+       case 's':
+       case 'S':
+         XSTR (copy, i) = XSTR (orig, i);
+         break;
+
+       default:
+         abort ();
        }
     }
   return copy;
@@ -880,7 +899,7 @@ check_attr_test (exp, is_const)
 
     case CONST_INT:
       /* Either TRUE or FALSE.  */
-      if (XINT (exp, 0))
+      if (XWINT (exp, 0))
        return true_rtx;
       else
        return false_rtx;
@@ -1644,10 +1663,10 @@ expand_units ()
             and busy cost.  Then make an attribute for use in the conflict
             function.  */
          op->condexp = check_attr_test (op->condexp, 0);
-         op->busyexp = check_attr_value (op->busyexp, 0);
+         op->busyexp = check_attr_value (op->busyexp, NULL_ATTR);
          str = attr_printf (strlen (unit->name) + 11, "*%s_case_%d",
                             unit->name, op->num);
-         make_internal_attr (str, make_canonical (0, op->busyexp));
+         make_internal_attr (str, make_canonical (NULL_ATTR, op->busyexp));
 
          /* Make our adjustment to the two COND's being computed.  If we are
             the last operation class, place our values into the default of
@@ -3499,7 +3518,11 @@ write_test_expr (exp, in_comparison)
 
     /* Constant integer. */
     case CONST_INT:
-      printf ("%d", XINT (exp, 0));
+#if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT
+      printf ("%d", XWINT (exp, 0));
+#else
+      printf ("%ld", XWINT (exp, 0));
+#endif
       break;
 
     /* A random C expression. */
@@ -4481,9 +4504,9 @@ main (argc, argv)
 
   /* Set up true and false rtx's */
   true_rtx = rtx_alloc (CONST_INT);
-  XINT (true_rtx, 0) = 1;
+  XWINT (true_rtx, 0) = 1;
   false_rtx = rtx_alloc (CONST_INT);
-  XINT (false_rtx, 0) = 0;
+  XWINT (false_rtx, 0) = 0;
   RTX_UNCHANGING_P (true_rtx) = RTX_UNCHANGING_P (false_rtx) = 1;
   RTX_INTEGRATED_P (true_rtx) = RTX_INTEGRATED_P (false_rtx) = 1;
 
index 05f60f3921d2904d97087b1dc4c1856efdc64eb3..8f86925fa9880c3beda3c6c547ea16af0bb83b3b 100644 (file)
@@ -146,7 +146,7 @@ gen_exp (x)
 
   if (x == 0)
     {
-      printf ("0");
+      printf ("NULL_RTX");
       return;
     }
 
@@ -202,25 +202,27 @@ gen_exp (x)
 
     case CONST_INT:
       if (INTVAL (x) == 0)
-       {
-         printf ("const0_rtx");
-         return;
-       }
-      if (INTVAL (x) == 1)
-       {
-         printf ("const1_rtx");
-         return;
-       }
-      if (INTVAL (x) == -1)
-       {
-         printf ("constm1_rtx");
-         return;
-       }
-      if (INTVAL (x) == STORE_FLAG_VALUE)
-       {
-         printf ("const_true_rtx");
-         return;
-       }
+       printf ("const0_rtx");
+      else if (INTVAL (x) == 1)
+       printf ("const1_rtx");
+      else if (INTVAL (x) == -1)
+       printf ("constm1_rtx");
+      else if (INTVAL (x) == STORE_FLAG_VALUE)
+       printf ("const_true_rtx");
+      else
+       printf (
+#if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT             
+               "GEN_INT (%d)",
+#else
+               "GEN_INT (%ld)",
+#endif
+               INTVAL (x));
+      return;
+
+    case CONST_DOUBLE:
+      /* These shouldn't be written in MD files.  Instead, the appropriate
+        routines in varasm.c should be called.  */
+      abort ();
     }
 
   printf ("gen_rtx (");
@@ -237,7 +239,7 @@ gen_exp (x)
       if (fmt[i] == 'e' || fmt[i] == 'u')
        gen_exp (XEXP (x, i));
       else if (fmt[i] == 'i')
-       printf ("%u", (unsigned) XINT (x, i));
+       printf ("%u", XINT (x, i));
       else if (fmt[i] == 's')
        printf ("\"%s\"", XSTR (x, i));
       else if (fmt[i] == 'E')
index 72f02f5bb4d3e08e33003c57b2d82946f949bd90..c749359f79d5a127c581d6e10427039a2331fe80 100644 (file)
@@ -83,6 +83,8 @@ struct decision
   int elt_zero_int;            /* Required value for XINT (rtl, 0) */
   int test_elt_one_int;                /* Nonzero if should test XINT (rtl, 1) */
   int elt_one_int;             /* Required value for XINT (rtl, 1) */
+  int test_elt_zero_wide;      /* Nonzero if should test XWINT (rtl, 0) */
+  HOST_WIDE_INT elt_zero_wide; /* Required value for XWINT (rtl, 0) */
   char *tests;                 /* If nonzero predicate to call */
   int pred;                    /* `preds' index of predicate or -1 */
   char *c_test;                        /* Additional test to perform */
@@ -303,8 +305,10 @@ add_to_sequence (pattern, last, position)
   new->veclen = 0;
   new->test_elt_zero_int = 0;
   new->test_elt_one_int = 0;
+  new->test_elt_zero_wide = 0;
   new->elt_zero_int = 0;
   new->elt_one_int = 0;
+  new->elt_zero_wide = 0;
   new->tests = 0;
   new->pred = -1;
   new->c_test = 0;
@@ -500,6 +504,11 @@ add_to_sequence (pattern, last, position)
          this->test_elt_one_int = 1;
          this->elt_one_int = XINT (pattern, i);
        }
+      else if (fmt[i] == 'w' && i == 0)
+       {
+         this->test_elt_zero_wide = 1;
+         this->elt_zero_wide = XWINT (pattern, i);
+       }
       else if (fmt[i] == 'E')
        {
          register int j;
@@ -549,6 +558,8 @@ not_both_true (d1, d2, toplevel)
          && d1->elt_zero_int != d2->elt_zero_int)
       || (d1->test_elt_one_int && d2->test_elt_one_int
          && d1->elt_one_int != d2->elt_one_int)
+      || (d1->test_elt_zero_wide && d2->test_elt_zero_wide
+         && d1->elt_zero_wide != d2->elt_zero_wide)
       || (d1->veclen && d2->veclen && d1->veclen != d2->veclen))
     return 1;
 
@@ -742,6 +753,7 @@ merge_trees (oldh, addh)
             would cause an infinite recursion.  */
          if (old->tests == 0 && old->test_elt_zero_int == 0
              && old->test_elt_one_int == 0 && old->veclen == 0
+             && old->test_elt_zero_wide == 0
              && old->dupno == -1 && old->mode == VOIDmode
              && old->code == UNKNOWN
              && (old->c_test != 0 || add->c_test != 0))
@@ -751,16 +763,18 @@ merge_trees (oldh, addh)
                    || (old->pred >= 0 && old->pred == add->pred)
                    || (old->tests && add->tests
                        && !strcmp (old->tests, add->tests)))
-             && old->test_elt_zero_int == add->test_elt_zero_int
-             && old->elt_zero_int == add->elt_zero_int
-             && old->test_elt_one_int == add->test_elt_one_int
-             && old->elt_one_int == add->elt_one_int
-             && old->veclen == add->veclen
-             && old->dupno == add->dupno
-             && old->opno == add->opno
-             && old->code == add->code
-             && old->enforce_mode == add->enforce_mode
-             && old->mode == add->mode)
+                  && old->test_elt_zero_int == add->test_elt_zero_int
+                  && old->elt_zero_int == add->elt_zero_int
+                  && old->test_elt_one_int == add->test_elt_one_int
+                  && old->elt_one_int == add->elt_one_int
+                  && old->test_elt_zero_wide == add->test_elt_zero_wide
+                  && old->elt_zero_wide == add->elt_zero_wide
+                  && old->veclen == add->veclen
+                  && old->dupno == add->dupno
+                  && old->opno == add->opno
+                  && old->code == add->code
+                  && old->enforce_mode == add->enforce_mode
+                  && old->mode == add->mode)
            {
              /* If the additional test is not the same, split both nodes
                 into nodes that just contain all things tested before the
@@ -793,6 +807,7 @@ merge_trees (oldh, addh)
                      split->veclen = 0;
                      split->test_elt_zero_int = 0;
                      split->test_elt_one_int = 0;
+                     split->test_elt_zero_wide = 0;
                      split->tests = 0;
                      split->pred = -1;
                    }
@@ -817,6 +832,7 @@ merge_trees (oldh, addh)
                      split->veclen = 0;
                      split->test_elt_zero_int = 0;
                      split->test_elt_one_int = 0;
+                     split->test_elt_zero_wide = 0;
                      split->tests = 0;
                      split->pred = -1;
                    }
@@ -873,7 +889,8 @@ merge_trees (oldh, addh)
       if (best_position == 0)
        abort ();
 
-      if (old == 0 && position_merit (0, add_mode, add->code) < best_merit)
+      if (old == 0
+         && position_merit (NULL_PTR, add_mode, add->code) < best_merit)
        {
          add->prev = 0;
          add->next = oldh.first;
@@ -964,7 +981,7 @@ write_subroutine (tree, type)
 
   printf ("x%d;\n", max_depth);
   printf ("  %s tem;\n", type == SPLIT ? "rtx" : "int");
-  write_tree (tree, "", 0, 1, type);
+  write_tree (tree, "", NULL_PTR, 1, type);
   printf (" ret0: return %d;\n}\n\n", type == SPLIT ? 0 : -1);
 }
 \f
@@ -1278,7 +1295,8 @@ write_tree_1 (tree, prevpos, afterward, type)
 
       if ((mode != switch_mode && ! p->ignore_mode)
          || (p->code != switch_code && p->code != UNKNOWN && ! p->ignore_code)
-         || p->test_elt_zero_int || p->test_elt_one_int || p->veclen
+         || p->test_elt_zero_int || p->test_elt_one_int
+         || p->test_elt_zero_wide || p->veclen
          || p->dupno >= 0 || p->tests || p->num_clobbers_to_add)
        {
          printf ("%sif (", indents[indent]);
@@ -1297,6 +1315,14 @@ write_tree_1 (tree, prevpos, afterward, type)
            printf ("XINT (x%d, 0) == %d && ", depth, p->elt_zero_int);
          if (p->test_elt_one_int)
            printf ("XINT (x%d, 1) == %d && ", depth, p->elt_one_int);
+         if (p->test_elt_zero_wide)
+           printf (
+#if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT
+                   "XWINT (x%d, 0) == %d && ",
+#else
+                   "XWINT (x%d, 0) == %ld && ",
+#endif
+                   depth, p->elt_zero_wide);
          if (p->veclen)
            printf ("XVECLEN (x%d, 0) == %d && ", depth, p->veclen);
          if (p->dupno >= 0)
This page took 0.109663 seconds and 5 git commands to generate.