diff options
Diffstat (limited to 'gcc/genemit.c')
-rw-r--r-- | gcc/genemit.c | 64 |
1 files changed, 27 insertions, 37 deletions
diff --git a/gcc/genemit.c b/gcc/genemit.c index f2bac1686b4..6fc604d7c23 100644 --- a/gcc/genemit.c +++ b/gcc/genemit.c @@ -25,6 +25,7 @@ Boston, MA 02111-1307, USA. */ #include "rtl.h" #include "obstack.h" #include "errors.h" +#include "gensupport.h" static struct obstack obstack; struct obstack *rtl_obstack = &obstack; @@ -779,8 +780,6 @@ main (argc, argv) char **argv; { rtx desc; - FILE *infile; - register int c; progname = "genemit"; obstack_init (rtl_obstack); @@ -788,13 +787,8 @@ main (argc, argv) if (argc <= 1) fatal ("No input file name."); - infile = fopen (argv[1], "r"); - if (infile == 0) - { - perror (argv[1]); - return (FATAL_EXIT_CODE); - } - read_rtx_filename = argv[1]; + if (init_md_reader (argv[1]) != SUCCESS_EXIT_CODE) + return (FATAL_EXIT_CODE); /* Assign sequential codes to all entries in the machine description in parallel with the tables in insn-output.c. */ @@ -828,37 +822,33 @@ from the machine description file `md'. */\n\n"); while (1) { - c = read_skip_spaces (infile); - if (c == EOF) - break; - ungetc (c, infile); + int line_no; - desc = read_rtx (infile); + desc = read_md_rtx (&line_no, &insn_code_number); + if (desc == NULL) + break; - if (GET_CODE (desc) == DEFINE_INSN) + switch (GET_CODE (desc)) { - gen_insn (desc); - ++insn_code_number; - } - if (GET_CODE (desc) == DEFINE_EXPAND) - { - gen_expand (desc); - ++insn_code_number; - } - if (GET_CODE (desc) == DEFINE_SPLIT) - { - gen_split (desc); - ++insn_code_number; - } - if (GET_CODE (desc) == DEFINE_PEEPHOLE2) - { - gen_split (desc); - ++insn_code_number; - } - if (GET_CODE (desc) == DEFINE_PEEPHOLE) - { - ++insn_code_number; - } + case DEFINE_INSN: + gen_insn (desc); + break; + + case DEFINE_EXPAND: + gen_expand (desc); + break; + + case DEFINE_SPLIT: + gen_split (desc); + break; + + case DEFINE_PEEPHOLE2: + gen_split (desc); + break; + + default: + break; + } ++insn_index_number; } |