Index: gcc/gcc/gensupport.c |
diff --git a/gcc/gcc/gensupport.c b/gcc/gcc/gensupport.c |
index 0851596585bd47e35ce360e5d8904b4e28644a7d..74b1d256ba2389244a33d284da42dcade3d7bf3b 100644 |
--- a/gcc/gcc/gensupport.c |
+++ b/gcc/gcc/gensupport.c |
@@ -1,6 +1,6 @@ |
/* Support routines for the various generation passes. |
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 |
- Free Software Foundation, Inc. |
+ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, |
+ 2010, Free Software Foundation, Inc. |
This file is part of GCC. |
@@ -336,7 +336,7 @@ process_rtx (rtx desc, int lineno) |
/* Queue them. */ |
insn_elem |
- = queue_pattern (desc, &define_insn_tail, read_rtx_filename, |
+ = queue_pattern (desc, &define_insn_tail, read_rtx_filename, |
lineno); |
split_elem |
= queue_pattern (split, &other_tail, read_rtx_filename, lineno); |
@@ -780,6 +780,7 @@ process_one_cond_exec (struct queue_elem *ce_elem) |
{ |
int alternatives, max_operand; |
rtx pred, insn, pattern, split; |
+ char *new_name; |
int i; |
if (! is_predicable (insn_elem)) |
@@ -806,7 +807,9 @@ process_one_cond_exec (struct queue_elem *ce_elem) |
/* Construct a new pattern for the new insn. */ |
insn = copy_rtx (insn_elem->data); |
- XSTR (insn, 0) = ""; |
+ new_name = XNEWVAR (char, strlen XSTR (insn_elem->data, 0) + 4); |
+ sprintf (new_name, "*p %s", XSTR (insn_elem->data, 0)); |
+ XSTR (insn, 0) = new_name; |
pattern = rtx_alloc (COND_EXEC); |
XEXP (pattern, 0) = pred; |
if (XVECLEN (insn, 1) == 1) |
@@ -875,7 +878,7 @@ process_one_cond_exec (struct queue_elem *ce_elem) |
XVECEXP (split, 2, i) = pattern; |
} |
/* Add the new split to the queue. */ |
- queue_pattern (split, &other_tail, read_rtx_filename, |
+ queue_pattern (split, &other_tail, read_rtx_filename, |
insn_elem->split->lineno); |
} |
} |
@@ -927,7 +930,7 @@ init_md_reader_args_cb (int argc, char **argv, bool (*parse_opt)(const char *)) |
{ |
if (argv[i][0] != '-') |
continue; |
- |
+ |
c = argv[i][1]; |
switch (c) |
{ |
@@ -996,7 +999,7 @@ init_md_reader_args_cb (int argc, char **argv, bool (*parse_opt)(const char *)) |
/* Read stdin. */ |
if (already_read_stdin) |
fatal ("cannot read standard input twice"); |
- |
+ |
base_dir = NULL; |
read_rtx_filename = in_fname = "<stdin>"; |
read_rtx_lineno = 1; |
@@ -1358,7 +1361,7 @@ static const struct std_pred_table std_preds[] = { |
{"register_operand", false, false, {SUBREG, REG}}, |
{"pmode_register_operand", true, false, {SUBREG, REG}}, |
{"scratch_operand", false, false, {SCRATCH, REG}}, |
- {"immediate_operand", false, true, {0}}, |
+ {"immediate_operand", false, true, {UNKNOWN}}, |
{"const_int_operand", false, false, {CONST_INT}}, |
{"const_double_operand", false, false, {CONST_INT, CONST_DOUBLE}}, |
{"nonimmediate_operand", false, false, {SUBREG, REG, MEM}}, |
@@ -1367,6 +1370,9 @@ static const struct std_pred_table std_preds[] = { |
{"pop_operand", false, false, {MEM}}, |
{"memory_operand", false, false, {SUBREG, MEM}}, |
{"indirect_operand", false, false, {SUBREG, MEM}}, |
+ {"ordered_comparison_operator", false, false, {EQ, NE, |
+ LE, LT, GE, GT, |
+ LEU, LTU, GEU, GTU}}, |
{"comparison_operator", false, false, {EQ, NE, |
LE, LT, GE, GT, |
LEU, LTU, GEU, GTU, |
@@ -1401,8 +1407,8 @@ init_predicate_table (void) |
if (std_preds[i].allows_const_p) |
for (j = 0; j < NUM_RTX_CODE; j++) |
if (GET_RTX_CLASS (j) == RTX_CONST_OBJ) |
- add_predicate_code (pred, j); |
- |
+ add_predicate_code (pred, (enum rtx_code) j); |
+ |
add_predicate (pred); |
} |
} |