OSDN Git Service

Fix install doc problems reported by Jean-Paul Rigault
[pf3gnuchains/gcc-fork.git] / gcc / genconditions.c
index 412f1f1..4630f15 100644 (file)
@@ -1,5 +1,5 @@
 /* Process machine description and calculate constant conditions.
-   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
    This file is part of GCC.
 
 #include "hashtab.h"
 #include "gensupport.h"
 
-/* so we can include except.h in the generated file */
+/* so we can include except.h in the generated file */
 static int saw_eh_return;
 
 static htab_t condition_table;
 
-static void add_condition      PARAMS ((const char *));
-static void write_header       PARAMS ((void));
-static void write_conditions   PARAMS ((void));
-static int write_one_condition PARAMS ((PTR *, PTR));
-
-extern int main                        PARAMS ((int, char **));
+static void add_condition      (const char *);
+static void write_header       (void);
+static void write_conditions   (void);
+static int write_one_condition (void **, void *);
 
 /* Record the C test expression EXPR in the condition_table.
    Duplicates clobber previous entries, which leaks memory, but
    we don't care for this application.  */
 
 static void
-add_condition (expr)
-     const char *expr;
+add_condition (const char *expr)
 {
   struct c_test *test;
 
   if (expr[0] == 0)
     return;
 
-  test = (struct c_test *) xmalloc (sizeof (struct c_test));
+  test = XNEW (struct c_test);
   test->expr = expr;
 
   *(htab_find_slot (condition_table, test, INSERT)) = test;
@@ -69,7 +66,7 @@ add_condition (expr)
 /* Generate the header for insn-conditions.c.  */
 
 static void
-write_header ()
+write_header (void)
 {
   puts ("\
 /* Generated automatically by the program `genconditions' from the target\n\
@@ -89,6 +86,13 @@ write_header ()
 
   puts ("\
 #include \"system.h\"\n\
+/* If we don't have __builtin_constant_p, or it's not acceptable in array\n\
+   initializers, fall back to assuming that all conditions potentially\n\
+   vary at run time.  It works in 3.0.1 and later; 3.0 only when not\n\
+   optimizing.  */\n\
+#if GCC_VERSION < 3001\n\
+#include \"dummy-conditions.c\"\n\
+#else\n\
 #include \"coretypes.h\"\n\
 #include \"tm.h\"\n\
 #include \"rtl.h\"\n\
@@ -121,34 +125,24 @@ write_header ()
 /* Dummy external declarations.  */\n\
 extern rtx insn;\n\
 extern rtx ins1;\n\
-extern rtx operands[];\n\
-extern int next_insn_tests_no_inequality PARAMS ((rtx));\n");
-
-  puts ("\
-/* If we don't have __builtin_constant_p, or it's not acceptable in\n\
-   array initializers, fall back to assuming that all conditions\n\
-   potentially vary at run time.  It works in 3.0.1 and later; 3.0\n\
-   only when not optimizing.  */\n\
-#if (GCC_VERSION >= 3001) || ((GCC_VERSION == 3000) && !__OPTIMIZE__)\n\
-# define MAYBE_EVAL(expr) (__builtin_constant_p(expr) ? (int) (expr) : -1)\n\
-#else\n\
-# define MAYBE_EVAL(expr) -1\n\
-#endif\n");
+extern rtx operands[];\n");
 }
 
 /* Write out one entry in the conditions table, using the data pointed
    to by SLOT.  Each entry looks like this:
-  { "! optimize_size && ! TARGET_READ_MODIFY_WRITE",
-    MAYBE_EVAL (! optimize_size && ! TARGET_READ_MODIFY_WRITE) },  */
+
+   { "! optimize_size && ! TARGET_READ_MODIFY_WRITE",
+     __builtin_constant_p (! optimize_size && ! TARGET_READ_MODIFY_WRITE)
+     ? (int) (! optimize_size && ! TARGET_READ_MODIFY_WRITE)
+     : -1) },  */
 
 static int
-write_one_condition (slot, dummy)
-     PTR *slot;
-     PTR dummy ATTRIBUTE_UNUSED;
+write_one_condition (void **slot, void * ARG_UNUSED (dummy))
 {
   const struct c_test *test = * (const struct c_test **) slot;
   const char *p;
 
+  print_rtx_ptr_loc (test->expr);
   fputs ("  { \"", stdout);
   for (p = test->expr; *p; p++)
     {
@@ -160,14 +154,18 @@ write_one_condition (slot, dummy)
        putchar (*p);
     }
 
-  printf ("\",\n    MAYBE_EVAL (%s) },\n", test->expr);
+  printf ("\",\n    __builtin_constant_p ");
+  print_c_condition (test->expr);
+  printf ("\n    ? (int) ");
+  print_c_condition (test->expr);
+  printf ("\n    : -1 },\n");
   return 1;
 }
 
 /* Write out the complete conditions table, its size, and a flag
    indicating that gensupport.c can now do insn elision.  */
 static void
-write_conditions ()
+write_conditions (void)
 {
   puts ("\
 /* This table lists each condition found in the machine description.\n\
@@ -182,13 +180,11 @@ const struct c_test insn_conditions[] = {");
 
   printf ("const size_t n_insn_conditions = %lu;\n",
          (unsigned long) htab_elements (condition_table));
-  puts ("const int insn_elision_unavailable = 0;");
+  puts ("const int insn_elision_unavailable = 0;\n#endif");
 }
 
 int
-main (argc, argv)
-     int argc;
-     char **argv;
+main (int argc, char **argv)
 {
   rtx desc;
   int pattern_lineno; /* not used */
@@ -196,10 +192,7 @@ main (argc, argv)
 
   progname = "genconditions";
 
-  if (argc <= 1)
-    fatal ("No input file name.");
-
-  if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE)
+  if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
   condition_table = htab_create (1000, hash_c_test, cmp_c_test, NULL);