gensupport.c (init_md_reader_args_cb): Renamed from init_md_reader_args.
authorZack Weinberg <zack@gcc.gnu.org>
Tue, 3 Aug 2004 23:30:45 +0000 (23:30 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Tue, 3 Aug 2004 23:30:45 +0000 (23:30 +0000)
* gensupport.c (init_md_reader_args_cb): Renamed from
init_md_reader_args.  Add third option, callback function for
parsing program-specific options.  Add diagnosis of incorrect
number of input files.
(init_md_reader): Fold into init_md_reader_args_cb.
(init_md_reader_args): Now a thin wrapper around
init_md_reader_args_cb.
* gensupport.h: Update prototypes.

* genattr.c, genattrtab.c, gencodes.c, genconfig.c, genemit.c
* genextract.c, genflags.c, genopinit.c, genoutput.c, genpeep.c
* genrecog.c: No need to diagnose lack of an input file;
init_md_reader_args will handle it.
* genconditions.c: Likewise, and use init_md_reader_args.
* genconstants.c: Likewise, and no need to call read_md_rtx.

From-SVN: r85511

16 files changed:
gcc/ChangeLog
gcc/genattr.c
gcc/genattrtab.c
gcc/gencodes.c
gcc/genconditions.c
gcc/genconfig.c
gcc/genconstants.c
gcc/genemit.c
gcc/genextract.c
gcc/genflags.c
gcc/genopinit.c
gcc/genoutput.c
gcc/genpeep.c
gcc/genrecog.c
gcc/gensupport.c
gcc/gensupport.h

index 14c2b37a537f49daa6b3718ed70d572d7aa4d722..fb925f8c9c4d955f46f29ec4055897c3cf3bed39 100644 (file)
@@ -1,3 +1,21 @@
+2004-08-03  Zack Weinberg  <zack@codesourcery.com>
+
+       * gensupport.c (init_md_reader_args_cb): Renamed from
+       init_md_reader_args.  Add third option, callback function for
+       parsing program-specific options.  Add diagnosis of incorrect
+       number of input files.
+       (init_md_reader): Fold into init_md_reader_args_cb.
+       (init_md_reader_args): Now a thin wrapper around
+       init_md_reader_args_cb.
+       * gensupport.h: Update prototypes.
+
+       * genattr.c, genattrtab.c, gencodes.c, genconfig.c, genemit.c
+       * genextract.c, genflags.c, genopinit.c, genoutput.c, genpeep.c
+       * genrecog.c: No need to diagnose lack of an input file;
+       init_md_reader_args will handle it.
+       * genconditions.c: Likewise, and use init_md_reader_args.
+       * genconstants.c: Likewise, and no need to call read_md_rtx.
+
 2004-08-03  Joseph S. Myers  <jsm@polyomino.org.uk>
 
        * c-decl.c (implicitly_declare): Diagnose incompatible implicit
@@ -26,8 +44,8 @@
 
 2004-08-03  Maciej W. Rozycki  <macro@linux-mips.org>
 
-       * aclocal.m4 (gcc_AC_FUNC_MMAP_BLACKLIST): Check for <sys/mman.h> 
-       and mmap() explicitly instead of relying on preset autoconf cache 
+       * aclocal.m4 (gcc_AC_FUNC_MMAP_BLACKLIST): Check for <sys/mman.h>
+       and mmap() explicitly instead of relying on preset autoconf cache
        variables.
        * configure: Regenerate.
 
@@ -42,7 +60,7 @@
 
        * config/i386/t-gmm_malloc: New file.
        * config/i386/t-pmm_malloc: Likewise.
-       
+
        * config/i386/xmmintrin.h: Include <mm_malloc.h>.
 
 2004-08-03  H.J. Lu  <hongjiu.lu@intel.com>
@@ -58,7 +76,7 @@
 
        * config/rs6000/rs6000.c (machopic_output_stub):  Align Darwin stubs.
        * c-common.c: Include opts.h.
-       (c_common_get_alias_set): Fix check for a single input file. 
+       (c_common_get_alias_set): Fix check for a single input file.
        * toplev.c: Remove current_file_decl.
        * tree.h: Ditto.
 
        (warn_B, warn_std_ptr): Remove.
 
 2004-08-03  Yossi Markovich <yossim@il.ibm.com>
-            Mostafa Hagog <mustafa@il.ibm.com>
+           Mostafa Hagog <mustafa@il.ibm.com>
 
-        * config/rs6000/altivec.md (altivec_vnmsubfp): Fix wrong pattern.
+       * config/rs6000/altivec.md (altivec_vnmsubfp): Fix wrong pattern.
 
 2004-08-02  Geoffrey Keating  <geoffk@apple.com>
 
 2004-08-02  Gabriel Dos Reis  <gdr@integrable-solutions.net>
 
        * vec.h (DEF_VEC_P): Add proper cast to uses of vec_o_reserve and
-       vec_p_reserve. 
+       vec_p_reserve.
        * langhooks.h (lang_hooks::builtin_function): Rename parameter
        from "class" to "bt_class".
 
        * gengtype.c (create_option): Convert initializer for option::info to
        appropiate type.
        (adjust_field_type, walk_type, write_func_for_structure,
-       write_root, write_roots): Remove pointless cast. 
+       write_root, write_roots): Remove pointless cast.
 
 2004-08-02  J"orn Rennecke <joern.rennecke@superh.com>
 
        * rtl.h (union rtunion_def): Have all members  start with the
        prefix "rt_".
        (XINT, XSTR, XEXP, XVEC, XMODE, XBITMAP, XTREE, XBBDEF, XTMPL,
-       X0INT, X0UINT, X0STR, X0EXP, X0VEC, X0MODE, X0BITMAP, X0TREE, 
+       X0INT, X0UINT, X0STR, X0EXP, X0VEC, X0MODE, X0BITMAP, X0TREE,
        X0MEMATTR, X0BBDEF, X0REGATTR, XCINT, XCUINT, XCSTR, XCEXP,
        XCVEC, XCMODE, XCBITMAP, XCTREE, XCBBDEF, XC2EXP): Adjust members
-       access. 
+       access.
        * gengtype.c (adjust_field_rtx_def): Likewise.
        * rtlanal.c (loc_mentioned_in_p): Likewise.
 
index 0be3035256702daf3a926329f8c09bc5eb5701d7..44ba0e00714ed662df8b0f385b123847b76c829c 100644 (file)
@@ -97,9 +97,6 @@ main (int argc, char **argv)
 
   progname = "genattr";
 
-  if (argc <= 1)
-    fatal ("no input file name");
-
   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
index f1bbaf523140e2a40fc780593171cb02fefa4db1..fde4933c3b0962f2b20cc187dfe9525108fd010a 100644 (file)
@@ -4407,9 +4407,6 @@ main (int argc, char **argv)
 
   progname = "genattrtab";
 
-  if (argc <= 1)
-    fatal ("no input file name");
-
   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
index 13aa2c58773f1165ac35f829df2d80cb9a68812f..2008597791c9fe241b21ce82817b024923eed218 100644 (file)
@@ -59,9 +59,6 @@ main (int argc, char **argv)
      direct references to CODE_FOR_xxx in C code.  */
   insn_elision = 0;
 
-  if (argc <= 1)
-    fatal ("no input file name");
-
   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
index 94a6bc439295ca4d932910801326f3fd6691dde2..3f05706f46c9520f26c7cd6099a14b6a107e076c 100644 (file)
@@ -188,10 +188,7 @@ main (int argc, char **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);
index 4e7195391f4a31524784ad7bc529271771005b7e..6f77e984c27f6fe0f11ac0b8456b2bb5989e0e52 100644 (file)
@@ -264,9 +264,6 @@ main (int argc, char **argv)
 
   progname = "genconfig";
 
-  if (argc <= 1)
-    fatal ("no input file name");
-
   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
index a4daa22027a8a425143061963e52cb86920fe6d5..fcebc4439ca985e98d69d137c72631bf82a2238f 100644 (file)
@@ -34,8 +34,6 @@ Boston, MA 02111-1307, USA.  */
 #include "errors.h"
 #include "gensupport.h"
 
-static int print_md_constant (void **, void *);
-
 /* Called via traverse_md_constants; emit a #define for
    the current constant definition.  */
 
@@ -52,22 +50,13 @@ print_md_constant (void **slot, void *info)
 int
 main (int argc, char **argv)
 {
-  int dummy1, dummy2;
-  rtx desc;
-
   progname = "genconstants";
 
-  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);
 
-  /* Scan and discard the entire file.  This has the side effect
-     of loading up the constants table that we wish to scan.  */
-  do
-    desc = read_md_rtx (&dummy1, &dummy2);
-  while (desc);
+  /* Initializing the MD reader has the side effect of loading up
+     the constants table that we wish to scan.  */
 
   puts ("/* Generated automatically by the program `genconstants'");
   puts ("   from the machine description file `md'.  */\n");
@@ -83,4 +72,3 @@ main (int argc, char **argv)
 
   return SUCCESS_EXIT_CODE;
 }
-
index 1198123fad13334c8aaf369fa06772dbe62aef92..e7ace350569284f07d9898544ecd59967a83a300 100644 (file)
@@ -799,9 +799,6 @@ main (int argc, char **argv)
 
   progname = "genemit";
 
-  if (argc <= 1)
-    fatal ("no input file name");
-
   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
index 95a358d8b801233c35b5cb9d118004335ed943ac..94b38c09d2b3e00c82068a7fc1eda73d9bcc938e 100644 (file)
@@ -354,9 +354,6 @@ main (int argc, char **argv)
 
   progname = "genextract";
 
-  if (argc <= 1)
-    fatal ("no input file name");
-
   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
index 27296c9f2394091e6a069da4e137689f1521479a..ad835bcb1e2af9ec8e98e3ede23140f329001c84 100644 (file)
@@ -245,9 +245,6 @@ main (int argc, char **argv)
      direct calls to their generators in C code.  */
   insn_elision = 0;
 
-  if (argc <= 1)
-    fatal ("no input file name");
-
   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
index 2740b757e538e9f3c0886adbd61baab5f0c6b98d..23b6e28b9d428b938c71e5016a72a49a8aa1b3a9 100644 (file)
@@ -352,9 +352,6 @@ main (int argc, char **argv)
 
   progname = "genopinit";
 
-  if (argc <= 1)
-    fatal ("no input file name");
-
   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
index 44bc412d48840ad8094d8a516add5857cbaae653..112017d8cbded41729142c9b5c56472e11b98cf2 100644 (file)
@@ -982,9 +982,6 @@ main (int argc, char **argv)
 
   progname = "genoutput";
 
-  if (argc <= 1)
-    fatal ("no input file name");
-
   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
index 6ed1307e77369710bb735d54a7d1e6eaffffc0a5..66ded4df2926cf60290b3fc9b96858823dde3295 100644 (file)
@@ -359,9 +359,6 @@ main (int argc, char **argv)
 
   progname = "genpeep";
 
-  if (argc <= 1)
-    fatal ("no input file name");
-
   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
index 2694e839383d5c3f6de2a588d8088c6b89e7e14a..f1bce6c78a5ec21403be831b899dcd14bd2b291f 100644 (file)
@@ -2636,9 +2636,6 @@ main (int argc, char **argv)
   memset (&split_tree, 0, sizeof split_tree);
   memset (&peephole2_tree, 0, sizeof peephole2_tree);
 
-  if (argc <= 1)
-    fatal ("no input file name");
-
   if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE)
     return (FATAL_EXIT_CODE);
 
index 37535d18a5d2acbcf74b784ca5af2fcab483447f..2acfc8a3efd7d3c2e37fe46012a43f129e58f652 100644 (file)
@@ -898,9 +898,12 @@ save_string (const char *s, int len)
 /* The entry point for initializing the reader.  */
 
 int
-init_md_reader_args (int argc, char **argv)
+init_md_reader_args_cb (int argc, char **argv, bool (*parse_opt)(const char *))
 {
+  FILE *input_file;
   int i;
+  size_t ix;
+  char *lastsl;
   const char *in_fname;
 
   max_include_len = 0;
@@ -909,8 +912,10 @@ init_md_reader_args (int argc, char **argv)
     {
       if (argv[i][0] != '-')
        {
-         if (in_fname == NULL)
-           in_fname = argv[i];
+         if (in_fname)
+           fatal ("too many input files");
+
+         in_fname = argv[i];
        }
       else
        {
@@ -939,33 +944,28 @@ init_md_reader_args (int argc, char **argv)
              }
              break;
            default:
-             fatal ("invalid option `%s'", argv[i]);
+             /* The program may have provided a callback so it can
+                accept its own options.  */
+             if (parse_opt && parse_opt (argv[i]))
+               break;
 
+             fatal ("invalid option `%s'", argv[i]);
            }
        }
     }
-    return init_md_reader (in_fname);
-}
-\f
-/* The entry point for initializing the reader.  */
 
-int
-init_md_reader (const char *filename)
-{
-  FILE *input_file;
-  int c;
-  size_t i;
-  char *lastsl;
+  if (!in_fname)
+    fatal ("no input file name");
 
-  lastsl = strrchr (filename, '/');
+  lastsl = strrchr (in_fname, '/');
   if (lastsl != NULL)
-    base_dir = save_string (filename, lastsl - filename + 1 );
+    base_dir = save_string (in_fname, lastsl - in_fname + 1 );
 
-  read_rtx_filename = filename;
-  input_file = fopen (filename, "r");
+  read_rtx_filename = in_fname;
+  input_file = fopen (in_fname, "r");
   if (input_file == 0)
     {
-      perror (filename);
+      perror (in_fname);
       return FATAL_EXIT_CODE;
     }
 
@@ -973,9 +973,9 @@ init_md_reader (const char *filename)
   condition_table = htab_create (n_insn_conditions,
                                 hash_c_test, cmp_c_test, NULL);
 
-  for (i = 0; i < n_insn_conditions; i++)
-    *(htab_find_slot (condition_table, &insn_conditions[i], INSERT))
-      = (void *) &insn_conditions[i];
+  for (ix = 0; ix < n_insn_conditions; ix++)
+    *(htab_find_slot (condition_table, &insn_conditions[ix], INSERT))
+      = (void *) &insn_conditions[ix];
 
   obstack_init (rtl_obstack);
   errors = 0;
@@ -986,8 +986,7 @@ init_md_reader (const char *filename)
     {
       rtx desc;
       int lineno;
-
-      c = read_skip_spaces (input_file);
+      int c = read_skip_spaces (input_file);
       if (c == EOF)
         break;
 
@@ -1005,6 +1004,14 @@ init_md_reader (const char *filename)
   return errors ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE;
 }
 
+/* Programs that don't have their own options can use this entry point
+   instead.  */
+int
+init_md_reader_args (int argc, char **argv)
+{
+  return init_md_reader_args_cb (argc, argv, 0);
+}
+\f
 /* The entry point for reading a single rtx from an md file.  */
 
 rtx
index 7ceccfbaeb119ac3572bbafbb67d76cbf5c2a274..ea78b247d5d494645654c4f2cbfa9c0a288fc9c2 100644 (file)
@@ -24,8 +24,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 struct obstack;
 extern struct obstack *rtl_obstack;
 
+extern int init_md_reader_args_cb (int, char **, bool (*)(const char *));
 extern int init_md_reader_args (int, char **);
-extern int init_md_reader (const char *);
 extern rtx read_md_rtx (int *, int *);
 
 extern void message_with_line (int, const char *, ...)