Mercurial > hg > CbC > CbC_gcc
diff gcc/genpreds.c @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
line wrap: on
line diff
--- a/gcc/genpreds.c Sun Feb 07 18:28:00 2010 +0900 +++ b/gcc/genpreds.c Fri Feb 12 23:39:51 2010 +0900 @@ -102,7 +102,7 @@ for (p = XSTR (defn, 0) + 1; *p; p++) if (!ISALNUM (*p) && *p != '_') goto bad_name; - + if (validate_exp (XEXP (defn, 1), XSTR (defn, 0), lineno)) return; @@ -153,7 +153,7 @@ The only wart is that there's no way to insist on a { } string in an RTL template, so we have to handle "" strings. */ - + static void write_predicate_subfunction (struct pred_data *p) { @@ -290,7 +290,7 @@ NO_MODE_TEST (exp) = (NO_MODE_TEST (XEXP (exp, 0)) && NO_MODE_TEST (XEXP (exp, 1))); break; - + case IOR: mark_mode_tests (XEXP (exp, 0)); mark_mode_tests (XEXP (exp, 1)); @@ -383,23 +383,23 @@ { int test0 = NO_MODE_TEST (XEXP (subexp, 0)); int test1 = NO_MODE_TEST (XEXP (subexp, 1)); - + gcc_assert (test0 || test1); - + if (test0 && test1) goto break_loop; pos = test0 ? &XEXP (subexp, 0) : &XEXP (subexp, 1); } break; - + case IF_THEN_ELSE: { int test0 = NO_MODE_TEST (XEXP (subexp, 0)); int test1 = NO_MODE_TEST (XEXP (subexp, 1)); int test2 = NO_MODE_TEST (XEXP (subexp, 2)); - + gcc_assert ((test0 && test1) || test2); - + if (test0 && test1 && test2) goto break_loop; if (test0 && test1) @@ -411,7 +411,7 @@ pos = &XEXP (subexp, 2); } break; - + default: goto break_loop; } @@ -473,7 +473,7 @@ putchar (TOUPPER (*code)); code++; } - + if (*codes == ',') fputs (" || ", stdout); } @@ -493,7 +493,7 @@ write_predicate_expr (XEXP (exp, 1)); putchar (')'); break; - + case IOR: putchar ('('); write_predicate_expr (XEXP (exp, 0)); @@ -801,7 +801,7 @@ return; } - + namelen = strlen (name); slot = &constraints_by_letter_table[(unsigned int)name[0]]; for (iter = slot; *iter; iter = &(*iter)->next_this_letter) @@ -861,7 +861,7 @@ else message_with_line (lineno, "constraint names beginning with '%c' " "(%s) are reserved for %s constraints", - name[0], name, + name[0], name, GET_RTX_NAME (appropriate_code)); have_error = 1; @@ -896,7 +896,7 @@ } } - + c = XOBNEW (rtl_obstack, struct constraint_data); c->name = name; c->c_name = need_mangled_name ? mangle (name) : name; @@ -954,6 +954,7 @@ { struct constraint_data *c; + fputs ("#define CONSTRAINT_NUM_DEFINED_P 1\n", stdout); fputs ("enum constraint_num\n" "{\n" " CONSTRAINT__UNKNOWN = 0", stdout); @@ -1047,7 +1048,7 @@ " return 1;\n" "}\n"); } - + /* Write out the function which computes the register class corresponding to a register constraint. */ static void @@ -1114,7 +1115,7 @@ puts (" const REAL_VALUE_TYPE *rval = 0;"); if (needs_ival) - puts (" if (GET_CODE (op) == CONST_INT)\n" + puts (" if (CONST_INT_P (op))\n" " ival = INTVAL (op);"); if (needs_hval) puts (" if (GET_CODE (op) == CONST_DOUBLE && mode == VOIDmode)" @@ -1279,9 +1280,13 @@ puts ("extern enum reg_class regclass_for_constraint " "(enum constraint_num);\n" "#define REG_CLASS_FROM_CONSTRAINT(c_,s_) \\\n" - " regclass_for_constraint (lookup_constraint (s_))\n"); + " regclass_for_constraint (lookup_constraint (s_))\n" + "#define REG_CLASS_FOR_CONSTRAINT(x_) \\\n" + " regclass_for_constraint (x_)\n"); else - puts ("#define REG_CLASS_FROM_CONSTRAINT(c_,s_) NO_REGS"); + puts ("#define REG_CLASS_FROM_CONSTRAINT(c_,s_) NO_REGS\n" + "#define REG_CLASS_FOR_CONSTRAINT(x_) \\\n" + " NO_REGS\n"); if (have_const_int_constraints) puts ("extern bool insn_const_int_ok_for_constraint " "(HOST_WIDE_INT, enum constraint_num);\n" @@ -1315,7 +1320,7 @@ puts ("#endif /* tm-preds.h */"); } -/* Write insn-preds.c. +/* Write insn-preds.c. N.B. the list of headers to include was copied from genrecog; it may not be ideal. @@ -1362,7 +1367,7 @@ if (have_register_constraints) write_regclass_for_constraint (); write_constraint_satisfied_p (); - + if (have_const_int_constraints) write_insn_const_int_ok_for_constraint ();