From: Zack Weinberg Date: Tue, 3 Aug 2004 23:30:45 +0000 (+0000) Subject: gensupport.c (init_md_reader_args_cb): Renamed from init_md_reader_args. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f9942f4e14ff2f47c29638078db93c0ba8e7b54e;p=gcc.git gensupport.c (init_md_reader_args_cb): Renamed from init_md_reader_args. * 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 14c2b37a537..fb925f8c9c4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,21 @@ +2004-08-03 Zack Weinberg + + * 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 * c-decl.c (implicitly_declare): Diagnose incompatible implicit @@ -26,8 +44,8 @@ 2004-08-03 Maciej W. Rozycki - * aclocal.m4 (gcc_AC_FUNC_MMAP_BLACKLIST): Check for - and mmap() explicitly instead of relying on preset autoconf cache + * aclocal.m4 (gcc_AC_FUNC_MMAP_BLACKLIST): Check for + 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 . 2004-08-03 H.J. Lu @@ -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. @@ -144,9 +162,9 @@ (warn_B, warn_std_ptr): Remove. 2004-08-03 Yossi Markovich - Mostafa Hagog + Mostafa Hagog - * config/rs6000/altivec.md (altivec_vnmsubfp): Fix wrong pattern. + * config/rs6000/altivec.md (altivec_vnmsubfp): Fix wrong pattern. 2004-08-02 Geoffrey Keating @@ -168,7 +186,7 @@ 2004-08-02 Gabriel Dos Reis * 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". @@ -184,7 +202,7 @@ * 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 @@ -195,10 +213,10 @@ * 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. diff --git a/gcc/genattr.c b/gcc/genattr.c index 0be30352567..44ba0e00714 100644 --- a/gcc/genattr.c +++ b/gcc/genattr.c @@ -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); diff --git a/gcc/genattrtab.c b/gcc/genattrtab.c index f1bbaf52314..fde4933c3b0 100644 --- a/gcc/genattrtab.c +++ b/gcc/genattrtab.c @@ -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); diff --git a/gcc/gencodes.c b/gcc/gencodes.c index 13aa2c58773..2008597791c 100644 --- a/gcc/gencodes.c +++ b/gcc/gencodes.c @@ -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); diff --git a/gcc/genconditions.c b/gcc/genconditions.c index 94a6bc43929..3f05706f46c 100644 --- a/gcc/genconditions.c +++ b/gcc/genconditions.c @@ -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); diff --git a/gcc/genconfig.c b/gcc/genconfig.c index 4e7195391f4..6f77e984c27 100644 --- a/gcc/genconfig.c +++ b/gcc/genconfig.c @@ -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); diff --git a/gcc/genconstants.c b/gcc/genconstants.c index a4daa22027a..fcebc4439ca 100644 --- a/gcc/genconstants.c +++ b/gcc/genconstants.c @@ -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; } - diff --git a/gcc/genemit.c b/gcc/genemit.c index 1198123fad1..e7ace350569 100644 --- a/gcc/genemit.c +++ b/gcc/genemit.c @@ -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); diff --git a/gcc/genextract.c b/gcc/genextract.c index 95a358d8b80..94b38c09d2b 100644 --- a/gcc/genextract.c +++ b/gcc/genextract.c @@ -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); diff --git a/gcc/genflags.c b/gcc/genflags.c index 27296c9f239..ad835bcb1e2 100644 --- a/gcc/genflags.c +++ b/gcc/genflags.c @@ -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); diff --git a/gcc/genopinit.c b/gcc/genopinit.c index 2740b757e53..23b6e28b9d4 100644 --- a/gcc/genopinit.c +++ b/gcc/genopinit.c @@ -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); diff --git a/gcc/genoutput.c b/gcc/genoutput.c index 44bc412d488..112017d8cbd 100644 --- a/gcc/genoutput.c +++ b/gcc/genoutput.c @@ -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); diff --git a/gcc/genpeep.c b/gcc/genpeep.c index 6ed1307e773..66ded4df292 100644 --- a/gcc/genpeep.c +++ b/gcc/genpeep.c @@ -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); diff --git a/gcc/genrecog.c b/gcc/genrecog.c index 2694e839383..f1bce6c78a5 100644 --- a/gcc/genrecog.c +++ b/gcc/genrecog.c @@ -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); diff --git a/gcc/gensupport.c b/gcc/gensupport.c index 37535d18a5d..2acfc8a3efd 100644 --- a/gcc/gensupport.c +++ b/gcc/gensupport.c @@ -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); -} - -/* 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); +} + /* The entry point for reading a single rtx from an md file. */ rtx diff --git a/gcc/gensupport.h b/gcc/gensupport.h index 7ceccfbaeb1..ea78b247d5d 100644 --- a/gcc/gensupport.h +++ b/gcc/gensupport.h @@ -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 *, ...)