]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/genpreds.c
Merge from trunk.
[thirdparty/gcc.git] / gcc / genpreds.c
index c27ae88f1a040e29608f9c8a7caf585370283b3b..976eb113a6bf180dee06eca467ee6ee27592ef69 100644 (file)
@@ -612,7 +612,7 @@ write_one_predicate_function (struct pred_data *p)
   add_mode_tests (p);
 
   /* A normal predicate can legitimately not look at enum machine_mode
-     if it accepts only CONST_INTs and/or CONST_DOUBLEs.  */
+     if it accepts only CONST_INTs and/or CONST_WIDE_INT and/or CONST_DOUBLEs.  */
   printf ("int\n%s (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED)\n{\n",
          p->name);
   write_predicate_stmts (p->exp);
@@ -810,7 +810,6 @@ add_constraint (const char *name, const char *regclass,
     {
       enum rtx_code appropriate_code
        = is_const_int ? CONST_INT : CONST_DOUBLE;
-
       /* Consider relaxing this requirement in the future.  */
       if (regclass
          || GET_CODE (exp) != AND
@@ -1075,12 +1074,17 @@ write_tm_constrs_h (void)
        if (needs_ival)
          puts ("  if (CONST_INT_P (op))\n"
                "    ival = INTVAL (op);");
+#if TARGET_SUPPORTS_WIDE_INT
+       if (needs_lval || needs_hval)
+         error ("you can't use lval or hval");
+#else
        if (needs_hval)
          puts ("  if (GET_CODE (op) == CONST_DOUBLE && mode == VOIDmode)"
                "    hval = CONST_DOUBLE_HIGH (op);");
        if (needs_lval)
          puts ("  if (GET_CODE (op) == CONST_DOUBLE && mode == VOIDmode)"
                "    lval = CONST_DOUBLE_LOW (op);");
+#endif
        if (needs_rval)
          puts ("  if (GET_CODE (op) == CONST_DOUBLE && mode != VOIDmode)"
                "    rval = CONST_DOUBLE_REAL_VALUE (op);");