aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/genattr-common.c
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
committerBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
commit1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch)
treec607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/genattr-common.c
parent283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff)
downloadtoolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/genattr-common.c')
-rw-r--r--gcc-4.9/gcc/genattr-common.c115
1 files changed, 115 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/genattr-common.c b/gcc-4.9/gcc/genattr-common.c
new file mode 100644
index 000000000..d15b4becd
--- /dev/null
+++ b/gcc-4.9/gcc/genattr-common.c
@@ -0,0 +1,115 @@
+/* Generate attribute information shared between driver and core
+ compilers (insn-attr-common.h) from machine description. Split out
+ of genattr.c.
+ Copyright (C) 1991-2014 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+
+#include "bconfig.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "rtl.h"
+#include "errors.h"
+#include "read-md.h"
+#include "gensupport.h"
+
+static void
+write_upcase (const char *str)
+{
+ for (; *str; str++)
+ putchar (TOUPPER (*str));
+}
+
+static void
+gen_attr (rtx attr)
+{
+ const char *p, *tag;
+
+ p = XSTR (attr, 1);
+ if (*p != '\0')
+ {
+ printf ("enum attr_%s {", XSTR (attr, 0));
+
+ while ((tag = scan_comma_elt (&p)) != 0)
+ {
+ write_upcase (XSTR (attr, 0));
+ putchar ('_');
+ while (tag != p)
+ putchar (TOUPPER (*tag++));
+ if (*p == ',')
+ fputs (", ", stdout);
+ }
+ fputs ("};\n", stdout);
+ }
+}
+
+int
+main (int argc, char **argv)
+{
+ rtx desc;
+ bool have_delay = false;
+ bool have_sched = false;
+
+ progname = "genattr-common";
+
+ if (!init_rtx_reader_args (argc, argv))
+ return (FATAL_EXIT_CODE);
+
+ puts ("/* Generated automatically by the program `genattr-common'");
+ puts (" from the machine description file `md'. */\n");
+ puts ("#ifndef GCC_INSN_ATTR_COMMON_H");
+ puts ("#define GCC_INSN_ATTR_COMMON_H\n");
+
+ /* Read the machine description. */
+
+ while (1)
+ {
+ int line_no, insn_code_number;
+
+ desc = read_md_rtx (&line_no, &insn_code_number);
+ if (desc == NULL)
+ break;
+
+ if (GET_CODE (desc) == DEFINE_ATTR)
+ gen_attr (desc);
+
+ if (GET_CODE (desc) == DEFINE_DELAY)
+ {
+ if (!have_delay)
+ {
+ printf ("#define DELAY_SLOTS\n");
+ have_delay = true;
+ }
+ }
+ else if (GET_CODE (desc) == DEFINE_INSN_RESERVATION)
+ {
+ if (!have_sched)
+ {
+ printf ("#define INSN_SCHEDULING\n");
+ have_sched = true;
+ }
+ }
+ }
+ puts ("\n#endif /* GCC_INSN_ATTR_COMMON_H */");
+
+ if (ferror (stdout) || fflush (stdout) || fclose (stdout))
+ return FATAL_EXIT_CODE;
+
+ return SUCCESS_EXIT_CODE;
+}