Makefile.in (BUILD_RTL): Move build/read-md.o to...
gcc/ * Makefile.in (BUILD_RTL): Move build/read-md.o to... (BUILD_MD): ...this new variable. (simple_generated_rtl_h, simple_generated_rtl_c): New variables that include the old contents of simple_generated_h and simple_generated_c. (simple_generated_h, simple_generated_c): Include them. Add insn-constants.h. (s-%): Make simple_generated_{h,c} stamps depend on $(MD_DEPS) and simple_generated_rtl_{h,c} stamps depend on insn-conditions.md. Remove these dependencies from the main rule and include insn-conditions.md in the command line only if it appears in the dependency list. (insn-constants.h, s-constants): Delete. (build/genconstants.o): Don't depend on $(RTL_BASE_H), $(GTM_H) or gensupport.h. (build/genmddeps.o): Likewise. (genprogrtl): New variable that contains everything from genprogmd except mddeps and constants. (genprogmd): Redefine in terms of genprogrtl. Make these programs depend on $(BUILD_MD) (genprog): New variable. Make these programs depend on $(BUILD_ERRORS). * genmddeps.c: Don't include tm.h, rtl.h or gensupport.h. (main): Use read_md_files instead of init_rtx_reader_args. * genconstants.c: As for genmddeps.c. * read-md.h (read_skip_construct): Declare. * read-md.c (read_skip_construct): New function. (handle_file): Allow a null handle_directive, skipping the construct if so. (parse_include): Update the comment accordingly. From-SVN: r160578
This commit is contained in:
parent
600ab3fcfa
commit
9b68b6ea7f
|
@ -1,3 +1,36 @@
|
|||
2010-06-10 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* Makefile.in (BUILD_RTL): Move build/read-md.o to...
|
||||
(BUILD_MD): ...this new variable.
|
||||
(simple_generated_rtl_h, simple_generated_rtl_c): New variables
|
||||
that include the old contents of simple_generated_h and
|
||||
simple_generated_c.
|
||||
(simple_generated_h, simple_generated_c): Include them. Add
|
||||
insn-constants.h.
|
||||
(s-%): Make simple_generated_{h,c} stamps depend on $(MD_DEPS)
|
||||
and simple_generated_rtl_{h,c} stamps depend on insn-conditions.md.
|
||||
Remove these dependencies from the main rule and include
|
||||
insn-conditions.md in the command line only if it appears
|
||||
in the dependency list.
|
||||
(insn-constants.h, s-constants): Delete.
|
||||
(build/genconstants.o): Don't depend on $(RTL_BASE_H), $(GTM_H)
|
||||
or gensupport.h.
|
||||
(build/genmddeps.o): Likewise.
|
||||
(genprogrtl): New variable that contains everything from genprogmd
|
||||
except mddeps and constants.
|
||||
(genprogmd): Redefine in terms of genprogrtl. Make these programs
|
||||
depend on $(BUILD_MD)
|
||||
(genprog): New variable. Make these programs depend on
|
||||
$(BUILD_ERRORS).
|
||||
* genmddeps.c: Don't include tm.h, rtl.h or gensupport.h.
|
||||
(main): Use read_md_files instead of init_rtx_reader_args.
|
||||
* genconstants.c: As for genmddeps.c.
|
||||
* read-md.h (read_skip_construct): Declare.
|
||||
* read-md.c (read_skip_construct): New function.
|
||||
(handle_file): Allow a null handle_directive, skipping the
|
||||
construct if so.
|
||||
(parse_include): Update the comment accordingly.
|
||||
|
||||
2010-06-10 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* Makefile.in (build/genmddeps.o): Depend on $(READ_MD_H).
|
||||
|
|
|
@ -1037,9 +1037,10 @@ LDEXP_LIB = @LDEXP_LIB@
|
|||
# even if we are cross-building GCC.
|
||||
BUILD_LIBS = $(BUILD_LIBIBERTY)
|
||||
|
||||
BUILD_RTL = build/read-md.o build/rtl.o build/read-rtl.o build/ggc-none.o \
|
||||
BUILD_RTL = build/rtl.o build/read-rtl.o build/ggc-none.o \
|
||||
build/vec.o build/min-insn-modes.o build/gensupport.o \
|
||||
build/print-rtl.o
|
||||
BUILD_MD = build/read-md.o
|
||||
BUILD_ERRORS = build/errors.o
|
||||
|
||||
# Specify the directories to be searched for header files.
|
||||
|
@ -3558,44 +3559,43 @@ insn-recog.o : insn-recog.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
|
|||
reload.h $(REGS_H) tm-constrs.h
|
||||
|
||||
# For each of the files generated by running a generator program over
|
||||
# the machine description, the following pair of static pattern rules
|
||||
# runs the generator program only if the machine description has changed,
|
||||
# but touches the target file only when its contents actually change.
|
||||
# The "; @true" construct forces Make to recheck the timestamp on the
|
||||
# target file.
|
||||
# the machine description, the following static pattern rules run the
|
||||
# generator program only if the machine description has changed,
|
||||
# but touch the target file only when its contents actually change.
|
||||
# The "; @true" construct forces Make to recheck the timestamp on
|
||||
# the target file.
|
||||
|
||||
simple_generated_h = insn-attr.h insn-codes.h insn-config.h insn-flags.h
|
||||
simple_rtl_generated_h = insn-attr.h insn-codes.h insn-config.h insn-flags.h
|
||||
|
||||
simple_generated_c = insn-attrtab.c insn-automata.c insn-emit.c \
|
||||
insn-extract.c insn-opinit.c insn-output.c \
|
||||
insn-peep.c insn-recog.c
|
||||
simple_rtl_generated_c = insn-attrtab.c insn-automata.c insn-emit.c \
|
||||
insn-extract.c insn-opinit.c insn-output.c \
|
||||
insn-peep.c insn-recog.c
|
||||
|
||||
simple_generated_h = $(simple_rtl_generated_h) insn-constants.h
|
||||
|
||||
simple_generated_c = $(simple_rtl_generated_c)
|
||||
|
||||
$(simple_generated_h:insn-%.h=s-%) \
|
||||
$(simple_generated_c:insn-%.c=s-%): s-%: $(MD_DEPS)
|
||||
|
||||
$(simple_rtl_generated_h:insn-%.h=s-%) \
|
||||
$(simple_rtl_generated_c:insn-%.c=s-%): s-%: insn-conditions.md
|
||||
|
||||
$(simple_generated_h): insn-%.h: s-%; @true
|
||||
|
||||
$(simple_generated_h:insn-%.h=s-%): s-%: build/gen%$(build_exeext) \
|
||||
$(MD_DEPS) insn-conditions.md
|
||||
$(simple_generated_h:insn-%.h=s-%): s-%: build/gen%$(build_exeext)
|
||||
$(RUN_GEN) build/gen$*$(build_exeext) $(md_file) \
|
||||
insn-conditions.md > tmp-$*.h
|
||||
$(filter insn-conditions.md,$^) > tmp-$*.h
|
||||
$(SHELL) $(srcdir)/../move-if-change tmp-$*.h insn-$*.h
|
||||
$(STAMP) s-$*
|
||||
|
||||
$(simple_generated_c): insn-%.c: s-%; @true
|
||||
$(simple_generated_c:insn-%.c=s-%): s-%: build/gen%$(build_exeext) \
|
||||
$(MD_DEPS) insn-conditions.md
|
||||
$(simple_generated_c:insn-%.c=s-%): s-%: build/gen%$(build_exeext)
|
||||
$(RUN_GEN) build/gen$*$(build_exeext) $(md_file) \
|
||||
insn-conditions.md > tmp-$*.c
|
||||
$(filter insn-conditions.md,$^) > tmp-$*.c
|
||||
$(SHELL) $(srcdir)/../move-if-change tmp-$*.c insn-$*.c
|
||||
$(STAMP) s-$*
|
||||
|
||||
# genconstants needs to run before insn-conditions.md is available
|
||||
# (because the constants may be used in the conditions).
|
||||
insn-constants.h: s-constants; @true
|
||||
s-constants: build/genconstants$(build_exeext) $(MD_DEPS)
|
||||
$(RUN_GEN) build/genconstants$(build_exeext) $(md_file) \
|
||||
> tmp-constants.h
|
||||
$(SHELL) $(srcdir)/../move-if-change tmp-constants.h insn-constants.h
|
||||
$(STAMP) s-constants
|
||||
|
||||
# gencheck doesn't read the machine description, and the file produced
|
||||
# doesn't use the insn-* convention.
|
||||
tree-check.h: s-check ; @true
|
||||
|
@ -3813,8 +3813,8 @@ build/genconditions.o : genconditions.c $(RTL_BASE_H) $(BCONFIG_H) \
|
|||
gensupport.h
|
||||
build/genconfig.o : genconfig.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \
|
||||
coretypes.h $(GTM_H) errors.h gensupport.h
|
||||
build/genconstants.o : genconstants.c $(RTL_BASE_H) $(BCONFIG_H) \
|
||||
$(SYSTEM_H) coretypes.h $(GTM_H) errors.h $(READ_MD_H) gensupport.h
|
||||
build/genconstants.o : genconstants.c $(BCONFIG_H) $(SYSTEM_H) \
|
||||
coretypes.h errors.h $(READ_MD_H)
|
||||
build/genemit.o : genemit.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \
|
||||
coretypes.h $(GTM_H) errors.h $(READ_MD_H) gensupport.h
|
||||
build/genextract.o : genextract.c $(RTL_BASE_H) $(BCONFIG_H) \
|
||||
|
@ -3829,7 +3829,7 @@ build/gengtype-parse.o : gengtype-parse.c gengtype.h $(BCONFIG_H) \
|
|||
build/gengtype.o : gengtype.c $(BCONFIG_H) $(SYSTEM_H) gengtype.h \
|
||||
rtl.def insn-notes.def errors.h double-int.h $(HASHTAB_H)
|
||||
build/genmddeps.o: genmddeps.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h \
|
||||
$(GTM_H) $(RTL_BASE_H) errors.h $(READ_MD_H) gensupport.h
|
||||
errors.h $(READ_MD_H)
|
||||
build/genmodes.o : genmodes.c $(BCONFIG_H) $(SYSTEM_H) errors.h \
|
||||
$(HASHTAB_H) machmode.def $(extra_modes_file)
|
||||
build/genopinit.o : genopinit.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \
|
||||
|
@ -3853,19 +3853,24 @@ build/gen%$(build_exeext): build/gen%.o $(BUILD_LIBDEPS)
|
|||
$(LINKER_FOR_BUILD) $(BUILD_LINKERFLAGS) $(BUILD_LDFLAGS) -o $@ \
|
||||
$(filter-out $(BUILD_LIBDEPS), $^) $(BUILD_LIBS)
|
||||
|
||||
# All these programs use the MD reader ($(BUILD_RTL)).
|
||||
genprogmd = attr attrtab automata codes conditions config constants emit \
|
||||
extract flags mddeps opinit output peep preds recog
|
||||
$(genprogmd:%=build/gen%$(build_exeext)): $(BUILD_RTL) $(BUILD_ERRORS)
|
||||
# All these programs use the RTL reader ($(BUILD_RTL)).
|
||||
genprogrtl = attr attrtab automata codes conditions config emit \
|
||||
extract flags opinit output peep preds recog
|
||||
$(genprogrtl:%=build/gen%$(build_exeext)): $(BUILD_RTL)
|
||||
|
||||
# All these programs use the MD reader ($(BUILD_MD)).
|
||||
genprogmd = $(genprogrtl) mddeps constants
|
||||
$(genprogmd:%=build/gen%$(build_exeext)): $(BUILD_MD)
|
||||
|
||||
# All generator programs need to report errors
|
||||
genprog = $(genprogmd) genrtl modes gtype
|
||||
$(genprog:%=build/gen%$(build_exeext)): $(BUILD_ERRORS)
|
||||
|
||||
# These programs need libs over and above what they get from the above list.
|
||||
build/genautomata$(build_exeext) : BUILD_LIBS += -lm
|
||||
|
||||
# These programs are not linked with the MD reader.
|
||||
build/gengenrtl$(build_exeext) : $(BUILD_ERRORS)
|
||||
build/genmodes$(build_exeext) : $(BUILD_ERRORS)
|
||||
build/gengtype$(build_exeext) : build/gengtype-lex.o build/gengtype-parse.o \
|
||||
$(BUILD_ERRORS)
|
||||
build/gengtype$(build_exeext) : build/gengtype-lex.o build/gengtype-parse.o
|
||||
|
||||
# Generated source files for gengtype.
|
||||
gengtype-lex.c : gengtype-lex.l
|
||||
|
|
|
@ -28,11 +28,8 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "bconfig.h"
|
||||
#include "system.h"
|
||||
#include "coretypes.h"
|
||||
#include "tm.h"
|
||||
#include "rtl.h"
|
||||
#include "errors.h"
|
||||
#include "read-md.h"
|
||||
#include "gensupport.h"
|
||||
|
||||
/* Called via traverse_md_constants; emit a #define for
|
||||
the current constant definition. */
|
||||
|
@ -52,7 +49,7 @@ main (int argc, char **argv)
|
|||
{
|
||||
progname = "genconstants";
|
||||
|
||||
if (!init_rtx_reader_args (argc, argv))
|
||||
if (!read_md_files (argc, argv, NULL, NULL))
|
||||
return (FATAL_EXIT_CODE);
|
||||
|
||||
/* Initializing the MD reader has the side effect of loading up
|
||||
|
|
|
@ -18,11 +18,8 @@
|
|||
#include "bconfig.h"
|
||||
#include "system.h"
|
||||
#include "coretypes.h"
|
||||
#include "tm.h"
|
||||
#include "rtl.h"
|
||||
#include "errors.h"
|
||||
#include "read-md.h"
|
||||
#include "gensupport.h"
|
||||
|
||||
|
||||
struct filedep
|
||||
|
@ -50,8 +47,8 @@ main (int argc, char **argv)
|
|||
progname = "genmddeps";
|
||||
include_callback = add_filedep;
|
||||
|
||||
if (!init_rtx_reader_args (argc, argv))
|
||||
return (FATAL_EXIT_CODE);
|
||||
if (!read_md_files (argc, argv, NULL, NULL))
|
||||
return FATAL_EXIT_CODE;
|
||||
|
||||
*last = NULL;
|
||||
|
||||
|
|
|
@ -575,6 +575,55 @@ read_string (int star_if_braced)
|
|||
return stringbuf;
|
||||
}
|
||||
|
||||
/* Skip the rest of a construct that started at line LINENO and that
|
||||
is currently nested by DEPTH levels of parentheses. */
|
||||
|
||||
void
|
||||
read_skip_construct (int depth, int lineno)
|
||||
{
|
||||
struct md_name name;
|
||||
int c;
|
||||
|
||||
do
|
||||
{
|
||||
c = read_skip_spaces ();
|
||||
if (c == EOF)
|
||||
{
|
||||
error_with_line (lineno, "unterminated construct");
|
||||
exit (1);
|
||||
}
|
||||
switch (c)
|
||||
{
|
||||
case '(':
|
||||
depth++;
|
||||
break;
|
||||
|
||||
case ')':
|
||||
depth--;
|
||||
break;
|
||||
|
||||
case ':':
|
||||
case '[':
|
||||
case ']':
|
||||
case '/':
|
||||
break;
|
||||
|
||||
case '\"':
|
||||
case '{':
|
||||
unread_char (c);
|
||||
read_string (false);
|
||||
break;
|
||||
|
||||
default:
|
||||
unread_char (c);
|
||||
read_name (&name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (depth > 0);
|
||||
unread_char (c);
|
||||
}
|
||||
|
||||
/* Given a string, return the number of comma-separated elements in it.
|
||||
Return 0 for the null string. */
|
||||
|
||||
|
@ -787,8 +836,10 @@ handle_file (directive_handler_t handle_directive)
|
|||
handle_constants ();
|
||||
else if (strcmp (directive.string, "include") == 0)
|
||||
handle_include (lineno, handle_directive);
|
||||
else
|
||||
else if (handle_directive)
|
||||
handle_directive (lineno, directive.string);
|
||||
else
|
||||
read_skip_construct (1, lineno);
|
||||
|
||||
c = read_skip_spaces ();
|
||||
if (c != ')')
|
||||
|
@ -840,7 +891,8 @@ parse_include (const char *arg)
|
|||
It should return true if it recognizes the argument or false if a
|
||||
generic error should be reported.
|
||||
|
||||
The parser calls HANDLE_DIRECTIVE for each unknown directive.
|
||||
If HANDLE_DIRECTIVE is nonnull, the parser calls it for each
|
||||
unknown directive, otherwise it just skips such directives.
|
||||
See the comment above the directive_handler_t definition for
|
||||
details about the callback's interface. */
|
||||
|
||||
|
|
|
@ -92,6 +92,7 @@ extern int read_skip_spaces (void);
|
|||
extern void read_name (struct md_name *);
|
||||
extern char *read_quoted_string (void);
|
||||
extern char *read_string (int);
|
||||
extern void read_skip_construct (int, int);
|
||||
extern int n_comma_elts (const char *);
|
||||
extern const char *scan_comma_elt (const char **);
|
||||
extern void traverse_md_constants (htab_trav, void *);
|
||||
|
|
Loading…
Reference in New Issue