summaryrefslogtreecommitdiff
path: root/gcc/gensupport.c
diff options
context:
space:
mode:
authorPaolo Bonzini <bonzini@gcc.gnu.org>2005-11-19 08:36:57 +0000
committerPaolo Bonzini <bonzini@gcc.gnu.org>2005-11-19 08:36:57 +0000
commitebce9df70bb27efd69c41b13b069f4d146b0238d (patch)
tree25db1ca1ca1d99a74b5fd0ff8562585381e47269 /gcc/gensupport.c
parent8273ee9f137b960eefe25b8c7aed5b29a74506de (diff)
downloadgcc-ebce9df70bb27efd69c41b13b069f4d146b0238d.tar.gz
gensupport.c (old_preds): Rename to std_preds, add special field.
2005-11-19 Paolo Bonzini <bonzini@gcc.gnu.org> * gensupport.c (old_preds): Rename to std_preds, add special field. (struct old_pred_table): Rename to struct std_pred_table, add special field. (NUM_KNOWN_OLD_PREDS): Rename to NUM_KNOWN_STD_PREDS. (NUM_OLD_SPECIAL_MODE_PREDS): Remove. (init_predicate_table): Adjust, and set along the way whether a predicate is special. From-SVN: r107215
Diffstat (limited to 'gcc/gensupport.c')
-rw-r--r--gcc/gensupport.c83
1 files changed, 32 insertions, 51 deletions
diff --git a/gcc/gensupport.c b/gcc/gensupport.c
index 2f6f54da465..c5062343d28 100644
--- a/gcc/gensupport.c
+++ b/gcc/gensupport.c
@@ -1220,46 +1220,38 @@ add_predicate (struct pred_data *pred)
/* This array gives the initial content of the predicate table. It
has entries for all predicates defined in recog.c. */
-struct old_pred_table
+struct std_pred_table
{
const char *name;
+ bool special;
RTX_CODE codes[NUM_RTX_CODE];
};
-static const struct old_pred_table old_preds[] = {
- {"general_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
- LABEL_REF, SUBREG, REG, MEM }},
- {"address_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
- LABEL_REF, SUBREG, REG, MEM,
- PLUS, MINUS, MULT}},
- {"register_operand", {SUBREG, REG}},
- {"pmode_register_operand", {SUBREG, REG}},
- {"scratch_operand", {SCRATCH, REG}},
- {"immediate_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
- LABEL_REF}},
- {"const_int_operand", {CONST_INT}},
- {"const_double_operand", {CONST_INT, CONST_DOUBLE}},
- {"nonimmediate_operand", {SUBREG, REG, MEM}},
- {"nonmemory_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
- LABEL_REF, SUBREG, REG}},
- {"push_operand", {MEM}},
- {"pop_operand", {MEM}},
- {"memory_operand", {SUBREG, MEM}},
- {"indirect_operand", {SUBREG, MEM}},
- {"comparison_operator", {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, GTU,
- UNORDERED, ORDERED, UNEQ, UNGE, UNGT, UNLE,
- UNLT, LTGT}}
+static const struct std_pred_table std_preds[] = {
+ {"general_operand", false, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
+ LABEL_REF, SUBREG, REG, MEM }},
+ {"address_operand", true, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
+ LABEL_REF, SUBREG, REG, MEM,
+ PLUS, MINUS, MULT}},
+ {"register_operand", false, {SUBREG, REG}},
+ {"pmode_register_operand", true, {SUBREG, REG}},
+ {"scratch_operand", false, {SCRATCH, REG}},
+ {"immediate_operand", false, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
+ LABEL_REF}},
+ {"const_int_operand", false, {CONST_INT}},
+ {"const_double_operand", false, {CONST_INT, CONST_DOUBLE}},
+ {"nonimmediate_operand", false, {SUBREG, REG, MEM}},
+ {"nonmemory_operand", false, {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
+ false, LABEL_REF, SUBREG, REG}},
+ {"push_operand", false, {MEM}},
+ {"pop_operand", false, {MEM}},
+ {"memory_operand", false, {SUBREG, MEM}},
+ {"indirect_operand", false, {SUBREG, MEM}},
+ {"comparison_operator", false, {EQ, NE, LE, LT, GE, GT, LEU, LTU, GEU, GTU,
+ UNORDERED, ORDERED, UNEQ, UNGE, UNGT, UNLE,
+ UNLT, LTGT}}
};
-#define NUM_KNOWN_OLD_PREDS ARRAY_SIZE (old_preds)
-
-/* This table gives the set of special predicates. It has entries for
- all special predicates defined in recog.c. */
-static const char *const old_special_pred_table[] = {
- "address_operand",
- "pmode_register_operand",
-};
-
-#define NUM_OLD_SPECIAL_MODE_PREDS ARRAY_SIZE (old_special_pred_table)
+#define NUM_KNOWN_STD_PREDS ARRAY_SIZE (std_preds)
/* Initialize the table of predicate definitions, starting with
the information we have on generic predicates. */
@@ -1274,14 +1266,15 @@ init_predicate_table (void)
eq_struct_pred_data, 0,
xcalloc, free);
- for (i = 0; i < NUM_KNOWN_OLD_PREDS; i++)
+ for (i = 0; i < NUM_KNOWN_STD_PREDS; i++)
{
pred = xcalloc (sizeof (struct pred_data), 1);
- pred->name = old_preds[i].name;
+ pred->name = std_preds[i].name;
+ pred->special = std_preds[i].special;
- for (j = 0; old_preds[i].codes[j] != 0; j++)
+ for (j = 0; std_preds[i].codes[j] != 0; j++)
{
- enum rtx_code code = old_preds[i].codes[j];
+ enum rtx_code code = std_preds[i].codes[j];
pred->codes[code] = true;
if (GET_RTX_CLASS (code) != RTX_CONST_OBJ)
@@ -1295,20 +1288,8 @@ init_predicate_table (void)
pred->allows_non_lvalue = true;
}
if (j == 1)
- pred->singleton = old_preds[i].codes[0];
+ pred->singleton = std_preds[i].codes[0];
add_predicate (pred);
}
-
- for (i = 0; i < NUM_OLD_SPECIAL_MODE_PREDS; i++)
- {
- pred = lookup_predicate (old_special_pred_table[i]);
- if (!pred)
- {
- error ("old-style special predicate list refers "
- "to unknown predicate '%s'", old_special_pred_table[i]);
- continue;
- }
- pred->special = true;
- }
}