- some macros CODE_FOR_... giving the insn_code_number value
for each of the defined standard insn names.
Copyright (C) 1987, 1991, 1995, 1998,
- 1999, 2000 Free Software Foundation, Inc.
+ 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
static int insn_code_number;
static void gen_insn PARAMS ((rtx));
+static void output_predicate_decls PARAMS ((void));
+static int print_md_constant PARAMS ((void **, void *));
static void
gen_insn (insn)
insn_code_number);
}
+/* Print out declarations for all predicates mentioned in
+ PREDICATE_CODES. */
+
+static void
+output_predicate_decls ()
+{
+#ifdef PREDICATE_CODES
+ static struct {
+ const char *name;
+ RTX_CODE codes[NUM_RTX_CODE];
+ } predicate[] = {
+ PREDICATE_CODES
+ };
+ size_t i;
+
+ putc ('\n', stdout);
+ puts ("struct rtx_def;\n#include \"machmode.h\"\n");
+ for (i = 0; i < sizeof predicate / sizeof *predicate; i++)
+ printf ("extern int %s PARAMS ((struct rtx_def *, enum machine_mode));\n",
+ predicate[i].name);
+ putc ('\n', stdout);
+#endif
+}
+
extern int main PARAMS ((int, char **));
int
if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE)
return (FATAL_EXIT_CODE);
- printf ("/* Generated automatically by the program `gencodes'\n\
-from the machine description file `md'. */\n\n");
-
- printf ("#ifndef MAX_INSN_CODE\n\n");
+ puts ("/* Generated automatically by the program `gencodes'");
+ puts (" from the machine description file `md'. */\n");
+ puts ("#ifndef GCC_INSN_CODES_H");
+ puts ("#define GCC_INSN_CODES_H\n");
/* Read the machine description. */
printf (" CODE_FOR_nothing = %d };\n", insn_code_number + 1);
- printf ("\n#define MAX_INSN_CODE ((int) CODE_FOR_nothing)\n");
+ printf ("\n#define MAX_INSN_CODE ((int) CODE_FOR_nothing)\n\n");
+
+ traverse_md_constants (print_md_constant, stdout);
+
+ output_predicate_decls ();
- printf ("#endif /* MAX_INSN_CODE */\n");
+ puts("\n#endif /* GCC_INSN_CODES_H */");
- fflush (stdout);
- return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
+ if (ferror (stdout) || fflush (stdout) || fclose (stdout))
+ return FATAL_EXIT_CODE;
+
+ return SUCCESS_EXIT_CODE;
}
/* Define this so we can link with print-rtl.o to get debug_rtx function. */
+
const char *
get_insn_name (code)
int code ATTRIBUTE_UNUSED;
{
return NULL;
}
+
+/* Called via traverse_md_constants; emit a #define for
+ the current constant definition. */
+
+static int
+print_md_constant (slot, info)
+ void **slot;
+ void *info;
+{
+ struct md_constant *def = *slot;
+ FILE *file = info;
+
+ fprintf (file, "#define %s %s\n", def->name, def->value);
+ return 1;
+}