mirror of git://gcc.gnu.org/git/gcc.git
Merge from pch-branch up to tag pch-commit-20020603.
From-SVN: r54232
This commit is contained in:
parent
c2ae66169b
commit
e2500fedef
|
@ -4,3 +4,6 @@ c-parse.c
|
||||||
tradcif.c
|
tradcif.c
|
||||||
cscope.files
|
cscope.files
|
||||||
cscope.out
|
cscope.out
|
||||||
|
gengtype-lex.c
|
||||||
|
gengtype-yacc.c
|
||||||
|
gengtype-yacc.h
|
||||||
|
|
1093
gcc/ChangeLog
1093
gcc/ChangeLog
File diff suppressed because it is too large
Load Diff
213
gcc/Makefile.in
213
gcc/Makefile.in
|
@ -562,7 +562,7 @@ REGS_H = regs.h varray.h $(MACHMODE_H)
|
||||||
INTEGRATE_H = integrate.h varray.h
|
INTEGRATE_H = integrate.h varray.h
|
||||||
LOOP_H = loop.h varray.h bitmap.h
|
LOOP_H = loop.h varray.h bitmap.h
|
||||||
GCC_H = gcc.h version.h
|
GCC_H = gcc.h version.h
|
||||||
GGC_H = ggc.h varray.h
|
GGC_H = ggc.h varray.h gtype-desc.h
|
||||||
TIMEVAR_H = timevar.h timevar.def
|
TIMEVAR_H = timevar.h timevar.def
|
||||||
INSN_ATTR_H = insn-attr.h $(srcdir)/insn-addr.h $(srcdir)/varray.h
|
INSN_ATTR_H = insn-attr.h $(srcdir)/insn-addr.h $(srcdir)/varray.h
|
||||||
C_COMMON_H = c-common.h $(SPLAY_TREE_H) $(CPPLIB_H)
|
C_COMMON_H = c-common.h $(SPLAY_TREE_H) $(CPPLIB_H)
|
||||||
|
@ -719,12 +719,13 @@ C_OBJS = c-parse.o c-lang.o $(C_AND_OBJC_OBJS)
|
||||||
# Language-independent object files.
|
# Language-independent object files.
|
||||||
|
|
||||||
OBJS = alias.o bb-reorder.o bitmap.o builtins.o caller-save.o calls.o \
|
OBJS = alias.o bb-reorder.o bitmap.o builtins.o caller-save.o calls.o \
|
||||||
cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o cfgrtl.o \
|
cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o \
|
||||||
combine.o conflict.o convert.o cse.o cselib.o dbxout.o debug.o dependence.o \
|
cfgrtl.o combine.o conflict.o convert.o cse.o cselib.o dbxout.o \
|
||||||
df.o diagnostic.o doloop.o dominance.o dwarf2asm.o dwarf2out.o dwarfout.o \
|
debug.o dependence.o df.o diagnostic.o doloop.o dominance.o \
|
||||||
emit-rtl.o except.o explow.o expmed.o expr.o final.o flow.o \
|
dwarf2asm.o dwarf2out.o dwarfout.o emit-rtl.o except.o explow.o \
|
||||||
fold-const.o function.o gcse.o genrtl.o ggc-common.o global.o graph.o \
|
expmed.o expr.o final.o flow.o fold-const.o function.o gcse.o \
|
||||||
haifa-sched.o hash.o hashtable.o hooks.o ifcvt.o insn-attrtab.o insn-emit.o \
|
genrtl.o ggc-common.o global.o graph.o gtype-desc.o \
|
||||||
|
haifa-sched.o hashtable.o hooks.o ifcvt.o insn-attrtab.o insn-emit.o \
|
||||||
insn-extract.o insn-opinit.o insn-output.o insn-peep.o insn-recog.o \
|
insn-extract.o insn-opinit.o insn-output.o insn-peep.o insn-recog.o \
|
||||||
integrate.o intl.o jump.o langhooks.o lcm.o lists.o local-alloc.o \
|
integrate.o intl.o jump.o langhooks.o lcm.o lists.o local-alloc.o \
|
||||||
loop.o mbchar.o optabs.o params.o predict.o print-rtl.o print-tree.o \
|
loop.o mbchar.o optabs.o params.o predict.o print-rtl.o print-tree.o \
|
||||||
|
@ -744,7 +745,8 @@ BACKEND = main.o libbackend.a
|
||||||
GEN= genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \
|
GEN= genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \
|
||||||
genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext) \
|
genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext) \
|
||||||
genconfig$(build_exeext) genpeep$(build_exeext) gengenrtl$(build_exeext) \
|
genconfig$(build_exeext) genpeep$(build_exeext) gengenrtl$(build_exeext) \
|
||||||
gencheck$(build_exeext) genpreds$(build_exeext) genconstants$(build_exeext)
|
gencheck$(build_exeext) genpreds$(build_exeext) genconstants$(build_exeext) \
|
||||||
|
gengtype$(build_exeext)
|
||||||
|
|
||||||
# Files to be copied away after each stage in building.
|
# Files to be copied away after each stage in building.
|
||||||
STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
|
STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
|
||||||
|
@ -759,6 +761,7 @@ STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
|
||||||
genconfig$(build_exeext) genpeep$(build_exeext) genattrtab$(build_exeext) \
|
genconfig$(build_exeext) genpeep$(build_exeext) genattrtab$(build_exeext) \
|
||||||
genattr$(build_exeext) genopinit$(build_exeext) gengenrtl$(build_exeext) \
|
genattr$(build_exeext) genopinit$(build_exeext) gengenrtl$(build_exeext) \
|
||||||
gencheck$(build_exeext) genpreds$(build_exeext) genconstants$(build_exeext) \
|
gencheck$(build_exeext) genpreds$(build_exeext) genconstants$(build_exeext) \
|
||||||
|
gengtype$(build_exeext) \
|
||||||
genrtl.c genrtl.h \
|
genrtl.c genrtl.h \
|
||||||
xgcc$(exeext) cpp$(exeext) cc1$(exeext) $(EXTRA_PASSES) \
|
xgcc$(exeext) cpp$(exeext) cc1$(exeext) $(EXTRA_PASSES) \
|
||||||
$(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross$(exeext) cc1obj$(exeext) \
|
$(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross$(exeext) cc1obj$(exeext) \
|
||||||
|
@ -1141,7 +1144,8 @@ s-crt0: $(CRT0_S) $(MCRT0_S) $(GCC_PASSES) $(CONFIG_H)
|
||||||
c-errors.o: c-errors.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) flags.h \
|
c-errors.o: c-errors.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) flags.h \
|
||||||
diagnostic.h $(TM_P_H)
|
diagnostic.h $(TM_P_H)
|
||||||
c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) $(GGC_H) intl.h \
|
c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) $(GGC_H) intl.h \
|
||||||
$(C_TREE_H) input.h flags.h $(SYSTEM_H) toplev.h output.h $(CPPLIB_H)
|
$(C_TREE_H) input.h flags.h $(SYSTEM_H) toplev.h output.h $(CPPLIB_H) \
|
||||||
|
gt-c-parse.h
|
||||||
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
|
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
|
||||||
-c $(srcdir)/c-parse.c $(OUTPUT_OPTION)
|
-c $(srcdir)/c-parse.c $(OUTPUT_OPTION)
|
||||||
|
|
||||||
|
@ -1164,11 +1168,12 @@ $(srcdir)/c-parse.y: c-parse.in
|
||||||
|
|
||||||
c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) $(C_TREE_H) \
|
c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) $(C_TREE_H) \
|
||||||
$(GGC_H) $(TARGET_H) flags.h function.h output.h $(EXPR_H) \
|
$(GGC_H) $(TARGET_H) flags.h function.h output.h $(EXPR_H) \
|
||||||
debug.h toplev.h intl.h $(TM_P_H) tree-inline.h $(TIMEVAR_H) c-pragma.h
|
debug.h toplev.h intl.h $(TM_P_H) tree-inline.h $(TIMEVAR_H) c-pragma.h \
|
||||||
|
gt-c-decl.h
|
||||||
c-typeck.o : c-typeck.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
|
c-typeck.o : c-typeck.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
|
||||||
$(TARGET_H) flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h $(TM_P_H)
|
$(TARGET_H) flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h $(TM_P_H)
|
||||||
c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
|
c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
|
||||||
langhooks.h $(LANGHOOKS_DEF_H) c-common.h
|
$(GGC_H) langhooks.h $(LANGHOOKS_DEF_H) c-common.h gtype-c.h
|
||||||
c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) \
|
c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) \
|
||||||
debug.h $(C_TREE_H) c-common.h real.h \
|
debug.h $(C_TREE_H) c-common.h real.h \
|
||||||
c-pragma.h input.h intl.h flags.h toplev.h output.h \
|
c-pragma.h input.h intl.h flags.h toplev.h output.h \
|
||||||
|
@ -1176,20 +1181,20 @@ c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) \
|
||||||
c-objc-common.o : c-objc-common.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \
|
c-objc-common.o : c-objc-common.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) \
|
||||||
$(C_TREE_H) $(RTL_H) insn-config.h integrate.h $(EXPR_H) $(C_TREE_H) \
|
$(C_TREE_H) $(RTL_H) insn-config.h integrate.h $(EXPR_H) $(C_TREE_H) \
|
||||||
flags.h toplev.h tree-inline.h diagnostic.h integrate.h $(VARRAY_H) \
|
flags.h toplev.h tree-inline.h diagnostic.h integrate.h $(VARRAY_H) \
|
||||||
langhooks.h $(GGC_H)
|
langhooks.h $(GGC_H) gt-c-objc-common.h
|
||||||
c-aux-info.o : c-aux-info.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
|
c-aux-info.o : c-aux-info.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
|
||||||
flags.h toplev.h
|
flags.h toplev.h
|
||||||
c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h toplev.h \
|
c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h toplev.h \
|
||||||
$(C_COMMON_H)
|
$(C_COMMON_H)
|
||||||
c-pragma.o: c-pragma.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) function.h \
|
c-pragma.o: c-pragma.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) function.h \
|
||||||
c-pragma.h toplev.h output.h $(GGC_H) $(TM_P_H) $(C_COMMON_H)
|
c-pragma.h toplev.h output.h $(GGC_H) $(TM_P_H) $(C_COMMON_H) gt-c-pragma.h
|
||||||
mbchar.o: mbchar.c $(CONFIG_H) $(SYSTEM_H) mbchar.h
|
mbchar.o: mbchar.c $(CONFIG_H) $(SYSTEM_H) mbchar.h
|
||||||
graph.o: graph.c $(CONFIG_H) $(SYSTEM_H) toplev.h flags.h output.h $(RTL_H) \
|
graph.o: graph.c $(CONFIG_H) $(SYSTEM_H) toplev.h flags.h output.h $(RTL_H) \
|
||||||
function.h hard-reg-set.h $(BASIC_BLOCK_H) graph.h
|
function.h hard-reg-set.h $(BASIC_BLOCK_H) graph.h
|
||||||
sbitmap.o: sbitmap.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h \
|
sbitmap.o: sbitmap.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h \
|
||||||
$(BASIC_BLOCK_H)
|
$(BASIC_BLOCK_H)
|
||||||
|
|
||||||
COLLECT2_OBJS = collect2.o tlink.o hash.o intl.o underscore.o version.o
|
COLLECT2_OBJS = collect2.o tlink.o intl.o underscore.o version.o
|
||||||
COLLECT2_LIBS = @COLLECT2_LIBS@
|
COLLECT2_LIBS = @COLLECT2_LIBS@
|
||||||
collect2$(exeext): $(COLLECT2_OBJS) $(LIBDEPS)
|
collect2$(exeext): $(COLLECT2_OBJS) $(LIBDEPS)
|
||||||
# Don't try modifying collect2 (aka ld) in place--it might be linking this.
|
# Don't try modifying collect2 (aka ld) in place--it might be linking this.
|
||||||
|
@ -1203,9 +1208,8 @@ collect2.o : collect2.c $(CONFIG_H) $(SYSTEM_H) gstab.h intl.h \
|
||||||
-DTARGET_MACHINE=\"$(target_alias)\" \
|
-DTARGET_MACHINE=\"$(target_alias)\" \
|
||||||
-c $(srcdir)/collect2.c $(OUTPUT_OPTION)
|
-c $(srcdir)/collect2.c $(OUTPUT_OPTION)
|
||||||
|
|
||||||
tlink.o: tlink.c $(DEMANGLE_H) hash.h $(CONFIG_H) $(SYSTEM_H) collect2.h intl.h
|
tlink.o: tlink.c $(DEMANGLE_H) $(HASHTAB_H) $(CONFIG_H) $(SYSTEM_H) \
|
||||||
hash.o: hash.c hash.h $(SYSTEM_H) toplev.h $(GCONFIG_H)
|
$(OBSTACK_H) collect2.h intl.h
|
||||||
$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
|
|
||||||
|
|
||||||
underscore.c: s-under ; @true
|
underscore.c: s-under ; @true
|
||||||
|
|
||||||
|
@ -1227,7 +1231,7 @@ s-under: $(GCC_PASSES)
|
||||||
c-common.o : c-common.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(OBSTACK_H) \
|
c-common.o : c-common.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(OBSTACK_H) \
|
||||||
$(C_COMMON_H) flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
|
$(C_COMMON_H) flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
|
||||||
$(EXPR_H) $(TM_P_H) builtin-types.def builtin-attrs.def $(TARGET_H) \
|
$(EXPR_H) $(TM_P_H) builtin-types.def builtin-attrs.def $(TARGET_H) \
|
||||||
diagnostic.h tree-inline.h except.h real.h
|
diagnostic.h tree-inline.h except.h gt-c-common.h real.h
|
||||||
|
|
||||||
# A file used by all variants of C and some other languages.
|
# A file used by all variants of C and some other languages.
|
||||||
|
|
||||||
|
@ -1314,8 +1318,13 @@ dumpvers: dumpvers.c
|
||||||
|
|
||||||
version.o: version.c version.h
|
version.o: version.c version.h
|
||||||
|
|
||||||
|
gtype-desc.o: gtype-desc.c $(CONFIG_H) $(SYSTEM_H) varray.h $(HASHTAB_H) \
|
||||||
|
$(TREE_H) $(RTL_H) function.h insn-config.h $(EXPR_H) $(OPTABS_H) \
|
||||||
|
libfuncs.h debug.h $(GGC_H) bitmap.h $(BASIC_BLOCK_H) hard-reg-set.h \
|
||||||
|
ssa.h cselib.h insn-addr.h
|
||||||
|
|
||||||
ggc-common.o: ggc-common.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \
|
ggc-common.o: ggc-common.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \
|
||||||
flags.h $(GGC_H) varray.h hash.h $(HASHTAB_H) $(TM_P_H) langhooks.h
|
flags.h $(GGC_H) varray.h $(HASHTAB_H) $(TM_P_H) langhooks.h
|
||||||
|
|
||||||
ggc-simple.o: ggc-simple.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
ggc-simple.o: ggc-simple.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
||||||
$(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H)
|
$(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H)
|
||||||
|
@ -1324,7 +1333,7 @@ ggc-page.o: ggc-page.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
||||||
toplev.h $(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H)
|
toplev.h $(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H)
|
||||||
|
|
||||||
stringpool.o: stringpool.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(OBSTACK_H) \
|
stringpool.o: stringpool.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(OBSTACK_H) \
|
||||||
flags.h toplev.h
|
flags.h toplev.h $(GGC_H)
|
||||||
|
|
||||||
hashtable.o: hashtable.c hashtable.h $(CONFIG_H) $(SYSTEM_H) $(OBSTACK_H)
|
hashtable.o: hashtable.c hashtable.h $(CONFIG_H) $(SYSTEM_H) $(OBSTACK_H)
|
||||||
|
|
||||||
|
@ -1345,7 +1354,8 @@ langhooks.o : langhooks.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) toplev.h \
|
||||||
tree-inline.h $(RTL_H) insn-config.h integrate.h langhooks.h \
|
tree-inline.h $(RTL_H) insn-config.h integrate.h langhooks.h \
|
||||||
$(LANGHOOKS_DEF_H) flags.h
|
$(LANGHOOKS_DEF_H) flags.h
|
||||||
tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h function.h toplev.h \
|
tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) flags.h function.h toplev.h \
|
||||||
$(GGC_H) $(HASHTAB_H) $(TARGET_H) output.h $(TM_P_H) langhooks.h real.h
|
$(GGC_H) $(HASHTAB_H) $(TARGET_H) output.h $(TM_P_H) langhooks.h \
|
||||||
|
real.h gt-tree.h
|
||||||
tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
|
tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(C_TREE_H) \
|
||||||
flags.h langhooks.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
|
flags.h langhooks.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
|
||||||
$(EXPR_H) $(SPLAY_TREE_H) tree-dump.h
|
$(EXPR_H) $(SPLAY_TREE_H) tree-dump.h
|
||||||
|
@ -1392,21 +1402,22 @@ errors.o : errors.c $(GCONFIG_H) $(SYSTEM_H) errors.h
|
||||||
$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
|
$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
|
||||||
|
|
||||||
varasm.o : varasm.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
|
varasm.o : varasm.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
|
||||||
function.h $(EXPR_H) hard-reg-set.h $(REGS_H) $(OBSTACK_H) \
|
function.h $(EXPR_H) hard-reg-set.h $(REGS_H) \
|
||||||
output.h c-pragma.h toplev.h xcoffout.h debug.h $(GGC_H) $(TM_P_H) \
|
output.h c-pragma.h toplev.h xcoffout.h debug.h $(GGC_H) $(TM_P_H) \
|
||||||
$(HASHTAB_H) $(TARGET_H) langhooks.h
|
$(HASHTAB_H) $(TARGET_H) langhooks.h gt-varasm.h
|
||||||
function.o : function.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
function.o : function.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
||||||
function.h $(EXPR_H) libfuncs.h $(REGS_H) hard-reg-set.h \
|
function.h $(EXPR_H) libfuncs.h $(REGS_H) hard-reg-set.h \
|
||||||
insn-config.h $(RECOG_H) output.h toplev.h except.h hash.h $(GGC_H) \
|
insn-config.h $(RECOG_H) output.h toplev.h except.h $(HASHTAB_H) $(GGC_H) \
|
||||||
$(TM_P_H) langhooks.h
|
$(TM_P_H) langhooks.h gt-function.h
|
||||||
stmt.o : stmt.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h function.h \
|
stmt.o : stmt.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h function.h \
|
||||||
insn-config.h hard-reg-set.h $(EXPR_H) libfuncs.h except.h \
|
insn-config.h hard-reg-set.h $(EXPR_H) libfuncs.h except.h \
|
||||||
$(LOOP_H) $(RECOG_H) toplev.h output.h varray.h $(GGC_H) $(TM_P_H) \
|
$(LOOP_H) $(RECOG_H) toplev.h output.h varray.h $(GGC_H) $(TM_P_H) \
|
||||||
langhooks.h $(PREDICT_H)
|
langhooks.h $(PREDICT_H) gt-stmt.h
|
||||||
except.o : except.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
except.o : except.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
||||||
except.h function.h $(EXPR_H) libfuncs.h integrate.h langhooks.h \
|
except.h function.h $(EXPR_H) libfuncs.h integrate.h langhooks.h \
|
||||||
insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \
|
insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \
|
||||||
dwarf2asm.h dwarf2out.h toplev.h $(HASHTAB_H) intl.h $(GGC_H)
|
dwarf2asm.h dwarf2out.h toplev.h $(HASHTAB_H) intl.h $(GGC_H) \
|
||||||
|
gt-except.h
|
||||||
expr.o : expr.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h function.h \
|
expr.o : expr.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h function.h \
|
||||||
$(REGS_H) $(EXPR_H) $(OPTABS_H) libfuncs.h insn-attr.h insn-config.h \
|
$(REGS_H) $(EXPR_H) $(OPTABS_H) libfuncs.h insn-attr.h insn-config.h \
|
||||||
$(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
|
$(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
|
||||||
|
@ -1423,10 +1434,10 @@ expmed.o : expmed.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
||||||
toplev.h $(TM_P_H) langhooks.h
|
toplev.h $(TM_P_H) langhooks.h
|
||||||
explow.o : explow.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
explow.o : explow.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
||||||
hard-reg-set.h insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
|
hard-reg-set.h insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
|
||||||
toplev.h function.h ggc.h $(TM_P_H)
|
toplev.h function.h ggc.h $(TM_P_H) gt-explow.h
|
||||||
optabs.o : optabs.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
optabs.o : optabs.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
||||||
insn-config.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(RECOG_H) reload.h \
|
insn-config.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(RECOG_H) reload.h \
|
||||||
toplev.h $(GGC_H) real.h $(TM_P_H) except.h
|
toplev.h $(GGC_H) real.h $(TM_P_H) except.h gt-optabs.h
|
||||||
dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
|
dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
|
||||||
$(REGS_H) debug.h $(TM_P_H) $(TARGET_H) function.h langhooks.h \
|
$(REGS_H) debug.h $(TM_P_H) $(TARGET_H) function.h langhooks.h \
|
||||||
insn-config.h reload.h gstab.h xcoffout.h output.h dbxout.h toplev.h
|
insn-config.h reload.h gstab.h xcoffout.h output.h dbxout.h toplev.h
|
||||||
|
@ -1434,16 +1445,16 @@ debug.o : debug.c debug.h $(CONFIG_H) $(SYSTEM_H)
|
||||||
sdbout.o : sdbout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
|
sdbout.o : sdbout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
|
||||||
function.h $(EXPR_H) output.h hard-reg-set.h $(REGS_H) real.h \
|
function.h $(EXPR_H) output.h hard-reg-set.h $(REGS_H) real.h \
|
||||||
insn-config.h $(OBSTACK_H) xcoffout.h c-pragma.h ggc.h \
|
insn-config.h $(OBSTACK_H) xcoffout.h c-pragma.h ggc.h \
|
||||||
sdbout.h toplev.h $(TM_P_H) except.h debug.h langhooks.h
|
sdbout.h toplev.h $(TM_P_H) except.h debug.h langhooks.h gt-sdbout.h
|
||||||
dwarfout.o : dwarfout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) dwarf.h \
|
dwarfout.o : dwarfout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) dwarf.h \
|
||||||
flags.h insn-config.h reload.h output.h toplev.h $(TM_P_H) \
|
flags.h insn-config.h reload.h output.h toplev.h $(TM_P_H) \
|
||||||
debug.h langhooks.h
|
debug.h langhooks.h
|
||||||
dwarf2out.o : dwarf2out.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) dwarf2.h \
|
dwarf2out.o : dwarf2out.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) dwarf2.h \
|
||||||
debug.h flags.h insn-config.h reload.h output.h diagnostic.h real.h \
|
debug.h flags.h insn-config.h reload.h output.h diagnostic.h real.h \
|
||||||
hard-reg-set.h $(REGS_H) $(EXPR_H) libfuncs.h toplev.h dwarf2out.h varray.h \
|
hard-reg-set.h $(REGS_H) $(EXPR_H) libfuncs.h toplev.h dwarf2out.h varray.h \
|
||||||
$(GGC_H) except.h dwarf2asm.h $(TM_P_H) langhooks.h
|
$(GGC_H) except.h dwarf2asm.h $(TM_P_H) langhooks.h gt-dwarf2out.h
|
||||||
dwarf2asm.o : dwarf2asm.c $(CONFIG_H) $(SYSTEM_H) flags.h $(RTL_H) $(TREE_H) \
|
dwarf2asm.o : dwarf2asm.c $(CONFIG_H) $(SYSTEM_H) flags.h $(RTL_H) $(TREE_H) \
|
||||||
output.h dwarf2asm.h $(TM_P_H)
|
output.h dwarf2asm.h $(TM_P_H) $(GGC_H)
|
||||||
vmsdbgout.o : vmsdbgout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
|
vmsdbgout.o : vmsdbgout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) flags.h \
|
||||||
output.h vmsdbg.h debug.h langhooks.h
|
output.h vmsdbg.h debug.h langhooks.h
|
||||||
xcoffout.o : xcoffout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) xcoffout.h \
|
xcoffout.o : xcoffout.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(RTL_H) xcoffout.h \
|
||||||
|
@ -1456,7 +1467,7 @@ real.o : real.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) toplev.h $(TM_P_H)
|
||||||
integrate.o : integrate.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
integrate.o : integrate.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
||||||
debug.h $(INTEGRATE_H) insn-config.h $(EXPR_H) real.h $(REGS_H) \
|
debug.h $(INTEGRATE_H) insn-config.h $(EXPR_H) real.h $(REGS_H) \
|
||||||
intl.h function.h output.h $(RECOG_H) except.h toplev.h $(LOOP_H) \
|
intl.h function.h output.h $(RECOG_H) except.h toplev.h $(LOOP_H) \
|
||||||
$(PARAMS_H) $(TM_P_H) $(TARGET_H) langhooks.h
|
$(PARAMS_H) $(TM_P_H) $(TARGET_H) langhooks.h gt-integrate.h
|
||||||
jump.o : jump.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h $(REGS_H) \
|
jump.o : jump.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h $(REGS_H) \
|
||||||
insn-config.h $(RECOG_H) $(EXPR_H) real.h except.h function.h \
|
insn-config.h $(RECOG_H) $(EXPR_H) real.h except.h function.h \
|
||||||
toplev.h $(INSN_ATTR_H) $(TM_P_H) reload.h $(PREDICT_H)
|
toplev.h $(INSN_ATTR_H) $(TM_P_H) reload.h $(PREDICT_H)
|
||||||
|
@ -1466,13 +1477,13 @@ simplify-rtx.o : simplify-rtx.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) \
|
||||||
output.h function.h $(GGC_H) $(OBSTACK_H) $(TM_P_H)
|
output.h function.h $(GGC_H) $(OBSTACK_H) $(TM_P_H)
|
||||||
cselib.o : cselib.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) \
|
cselib.o : cselib.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) \
|
||||||
hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
|
hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
|
||||||
output.h function.h cselib.h $(GGC_H) $(OBSTACK_H) $(TM_P_H)
|
output.h function.h cselib.h $(GGC_H) $(TM_P_H) gt-cselib.h
|
||||||
cse.o : cse.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \
|
cse.o : cse.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h flags.h \
|
||||||
real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h output.h function.h \
|
real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h output.h function.h \
|
||||||
$(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H) $(TIMEVAR_H)
|
$(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H) $(TIMEVAR_H)
|
||||||
gcse.o : gcse.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h \
|
gcse.o : gcse.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) hard-reg-set.h \
|
||||||
flags.h real.h insn-config.h ggc.h $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \
|
flags.h real.h insn-config.h ggc.h $(RECOG_H) $(EXPR_H) $(BASIC_BLOCK_H) \
|
||||||
function.h output.h toplev.h $(TM_P_H) $(PARAMS_H) except.h
|
function.h output.h toplev.h $(TM_P_H) $(PARAMS_H) except.h gt-gcse.h
|
||||||
sibcall.o : sibcall.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) function.h \
|
sibcall.o : sibcall.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) function.h \
|
||||||
hard-reg-set.h flags.h insn-config.h $(RECOG_H) $(BASIC_BLOCK_H)
|
hard-reg-set.h flags.h insn-config.h $(RECOG_H) $(BASIC_BLOCK_H)
|
||||||
resource.o : resource.c $(CONFIG_H) $(RTL_H) hard-reg-set.h $(SYSTEM_H) \
|
resource.o : resource.c $(CONFIG_H) $(RTL_H) hard-reg-set.h $(SYSTEM_H) \
|
||||||
|
@ -1497,7 +1508,7 @@ conflict.o : conflict.c $(CONFIG_H) $(SYSTEM_H) $(OBSTACK_H) $(HASHTAB_H) \
|
||||||
profile.o : profile.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
profile.o : profile.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
||||||
insn-config.h output.h $(REGS_H) $(EXPR_H) function.h \
|
insn-config.h output.h $(REGS_H) $(EXPR_H) function.h \
|
||||||
gcov-io.h toplev.h $(GGC_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TARGET_H) \
|
gcov-io.h toplev.h $(GGC_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TARGET_H) \
|
||||||
langhooks.h profile.h libfuncs.h
|
langhooks.h profile.h libfuncs.h gt-profile.h
|
||||||
loop.o : loop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(LOOP_H) \
|
loop.o : loop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(LOOP_H) \
|
||||||
insn-config.h $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) \
|
insn-config.h $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) \
|
||||||
real.h $(PREDICT_H) $(BASIC_BLOCK_H) function.h \
|
real.h $(PREDICT_H) $(BASIC_BLOCK_H) function.h \
|
||||||
|
@ -1537,14 +1548,13 @@ regclass.o : regclass.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) hard-reg-set.h flags.h
|
||||||
local-alloc.o : local-alloc.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h \
|
local-alloc.o : local-alloc.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h \
|
||||||
$(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \
|
$(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \
|
||||||
output.h function.h $(INSN_ATTR_H) toplev.h except.h $(TM_P_H)
|
output.h function.h $(INSN_ATTR_H) toplev.h except.h $(TM_P_H)
|
||||||
bitmap.o : bitmap.c $(GCONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h $(BASIC_BLOCK_H) \
|
bitmap.o : bitmap.c $(GCONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h \
|
||||||
$(REGS_H)
|
$(BASIC_BLOCK_H) $(REGS_H) $(GGC_H)
|
||||||
$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
|
$(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
|
||||||
global.o : global.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h reload.h function.h \
|
global.o : global.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h reload.h function.h \
|
||||||
$(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h output.h toplev.h \
|
$(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h output.h toplev.h \
|
||||||
$(TM_P_H)
|
$(TM_P_H)
|
||||||
varray.o : varray.c $(CONFIG_H) $(SYSTEM_H) varray.h $(RTL_H) $(TREE_H) bitmap.h \
|
varray.o : varray.c $(CONFIG_H) $(SYSTEM_H) varray.h $(GGC_H) errors.h
|
||||||
errors.h
|
|
||||||
reload.o : reload.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h output.h \
|
reload.o : reload.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h output.h \
|
||||||
$(EXPR_H) $(OPTABS_H) reload.h $(RECOG_H) hard-reg-set.h insn-config.h \
|
$(EXPR_H) $(OPTABS_H) reload.h $(RECOG_H) hard-reg-set.h insn-config.h \
|
||||||
$(REGS_H) function.h real.h toplev.h $(TM_P_H)
|
$(REGS_H) function.h real.h toplev.h $(TM_P_H)
|
||||||
|
@ -1560,7 +1570,8 @@ reorg.o : reorg.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) conditions.h hard-reg-set.h \
|
||||||
$(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h $(PARAMS_H) $(TM_P_H)
|
$(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h $(PARAMS_H) $(TM_P_H)
|
||||||
alias.o : alias.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h \
|
alias.o : alias.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) flags.h hard-reg-set.h \
|
||||||
$(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h $(EXPR_H) \
|
$(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h $(EXPR_H) \
|
||||||
$(GGC_H) function.h cselib.h $(TREE_H) $(TM_P_H) langhooks.h $(TARGET_H)
|
$(GGC_H) function.h cselib.h $(TREE_H) $(TM_P_H) langhooks.h $(TARGET_H) \
|
||||||
|
gt-alias.h
|
||||||
regmove.o : regmove.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) insn-config.h \
|
regmove.o : regmove.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) insn-config.h \
|
||||||
$(RECOG_H) output.h $(REGS_H) hard-reg-set.h flags.h function.h \
|
$(RECOG_H) output.h $(REGS_H) hard-reg-set.h flags.h function.h \
|
||||||
$(EXPR_H) $(BASIC_BLOCK_H) toplev.h $(TM_P_H) except.h reload.h
|
$(EXPR_H) $(BASIC_BLOCK_H) toplev.h $(TM_P_H) except.h reload.h
|
||||||
|
@ -1588,7 +1599,7 @@ recog.o : recog.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) function.h $(BASIC_BLOCK_H) \
|
||||||
$(INSN_ATTR_H) real.h toplev.h output.h reload.h $(TM_P_H)
|
$(INSN_ATTR_H) real.h toplev.h output.h reload.h $(TM_P_H)
|
||||||
reg-stack.o : reg-stack.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) $(RECOG_H) \
|
reg-stack.o : reg-stack.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) $(RECOG_H) \
|
||||||
$(REGS_H) hard-reg-set.h flags.h insn-config.h toplev.h reload.h \
|
$(REGS_H) hard-reg-set.h flags.h insn-config.h toplev.h reload.h \
|
||||||
varray.h function.h $(TM_P_H)
|
varray.h function.h $(TM_P_H) $(GGC_H) gt-reg-stack.h
|
||||||
predict.o: predict.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
predict.o: predict.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h \
|
||||||
insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
|
insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
|
||||||
$(RECOG_H) function.h except.h $(EXPR_H) $(TM_P_H) $(PREDICT_H) real.h \
|
$(RECOG_H) function.h except.h $(EXPR_H) $(TM_P_H) $(PREDICT_H) real.h \
|
||||||
|
@ -1610,7 +1621,7 @@ ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(REGS_H) toplev.h \
|
||||||
flags.h insn-config.h function.h $(RECOG_H) $(BASIC_BLOCK_H) $(EXPR_H) \
|
flags.h insn-config.h function.h $(RECOG_H) $(BASIC_BLOCK_H) $(EXPR_H) \
|
||||||
output.h except.h $(TM_P_H)
|
output.h except.h $(TM_P_H)
|
||||||
dependence.o : dependence.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \
|
dependence.o : dependence.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) \
|
||||||
$(C_COMMON_H) flags.h varray.h $(EXPR_H)
|
$(C_COMMON_H) flags.h varray.h $(EXPR_H) $(GGC_H) gt-dependence.h
|
||||||
params.o : params.c $(CONFIG_H) $(SYSTEM_H) $(PARAMS_H) toplev.h
|
params.o : params.c $(CONFIG_H) $(SYSTEM_H) $(PARAMS_H) toplev.h
|
||||||
hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) $(HOOKS_H)
|
hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) $(HOOKS_H)
|
||||||
|
|
||||||
|
@ -1793,6 +1804,38 @@ s-preds: genpreds$(build_exeext) $(srcdir)/move-if-change
|
||||||
$(SHELL) $(srcdir)/move-if-change tmp-preds.h tm-preds.h
|
$(SHELL) $(srcdir)/move-if-change tmp-preds.h tm-preds.h
|
||||||
$(STAMP) s-preds
|
$(STAMP) s-preds
|
||||||
|
|
||||||
|
GTFILES = $(GCONFIG_H) \
|
||||||
|
$(HASHTAB_H) \
|
||||||
|
$(srcdir)/bitmap.h $(srcdir)/function.h $(srcdir)/rtl.h $(srcdir)/optabs.h \
|
||||||
|
$(srcdir)/tree.h $(srcdir)/libfuncs.h $(srcdir)/hashtable.h $(srcdir)/real.h \
|
||||||
|
$(srcdir)/varray.h $(srcdir)/ssa.h $(srcdir)/insn-addr.h $(srcdir)/cselib.h \
|
||||||
|
$(srcdir)/c-common.h $(srcdir)/c-tree.h \
|
||||||
|
$(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c \
|
||||||
|
$(srcdir)/dependence.c $(srcdir)/dwarf2out.c $(srcdir)/emit-rtl.c \
|
||||||
|
$(srcdir)/except.c $(srcdir)/explow.c $(srcdir)/expr.c \
|
||||||
|
$(srcdir)/fold-const.c $(srcdir)/function.c \
|
||||||
|
$(srcdir)/gcse.c $(srcdir)/integrate.c $(srcdir)/lists.c $(srcdir)/optabs.c \
|
||||||
|
$(srcdir)/profile.c $(srcdir)/regclass.c $(srcdir)/reg-stack.c \
|
||||||
|
$(srcdir)/sdbout.c $(srcdir)/stmt.c $(srcdir)/stor-layout.c \
|
||||||
|
$(srcdir)/tree.c $(srcdir)/varasm.c \
|
||||||
|
$(srcdir)/c-objc-common.c $(srcdir)/c-common.c $(srcdir)/c-parse.in \
|
||||||
|
$(out_file) \
|
||||||
|
$(srcdir)/c-decl.c $(srcdir)/c-pragma.c \
|
||||||
|
@all_gtfiles@
|
||||||
|
|
||||||
|
gtype-desc.h gtype-desc.c gt-except.h gt-function.h : s-gtype; @true
|
||||||
|
gt-integrate.h gt-stmt.h gt-tree.h gt-varasm.h gt-emit-rtl.h : s-gtype; @true
|
||||||
|
gt-explow.h gt-stor-layout.h gt-regclass.h gt-lists.h : s-gtype; @true
|
||||||
|
gt-alias.h gt-cselib.h gt-fold-const.h gt-gcse.h gt-profile.h : s-gtype; @true
|
||||||
|
gt-expr.h gt-sdbout.h gt-optabs.h gt-bitmap.h gt-dwarf2out.h : s-gtype ; @true
|
||||||
|
gt-reg-stack.h gt-dependence.h : s-gtype ; @true
|
||||||
|
gt-c-common.h gt-c-decl.h gt-c-parse.h gt-c-pragma.h : s-gtype; @true
|
||||||
|
gt-c-objc-common.h gtype-c.h : s-gtype ; @true
|
||||||
|
|
||||||
|
s-gtype: gengtype$(build_exeext) $(GTFILES)
|
||||||
|
./gengtype $(GTFILES)
|
||||||
|
$(STAMP) s-gtype
|
||||||
|
|
||||||
#
|
#
|
||||||
# Compile the programs that generate insn-* from the machine description.
|
# Compile the programs that generate insn-* from the machine description.
|
||||||
# They are compiled with $(HOST_CC), and associated libraries,
|
# They are compiled with $(HOST_CC), and associated libraries,
|
||||||
|
@ -1899,7 +1942,7 @@ genattrtab.o : genattrtab.c $(RTL_H) $(OBSTACK_H) $(HCONFIG_H) \
|
||||||
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattrtab.c $(OUTPUT_OPTION)
|
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattrtab.c $(OUTPUT_OPTION)
|
||||||
|
|
||||||
genautomata.o : genautomata.c $(RTL_H) $(OBSTACK_H) $(HCONFIG_H) \
|
genautomata.o : genautomata.c $(RTL_H) $(OBSTACK_H) $(HCONFIG_H) \
|
||||||
$(SYSTEM_H) errors.h varray.h hash.h genattrtab.h
|
$(SYSTEM_H) errors.h varray.h genattrtab.h $(HASHTAB_H)
|
||||||
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genautomata.c $(OUTPUT_OPTION)
|
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genautomata.c $(OUTPUT_OPTION)
|
||||||
|
|
||||||
genoutput$(build_exeext) : genoutput.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
|
genoutput$(build_exeext) : genoutput.o $(HOST_RTL) $(HOST_PRINT) $(HOST_ERRORS) $(HOST_LIBDEPS)
|
||||||
|
@ -1924,6 +1967,33 @@ genpreds$(build_exeext) : genpreds.o $(HOST_LIBDEPS)
|
||||||
genpreds.o : genpreds.c $(RTL_BASE_H) $(HCONFIG_H) $(SYSTEM_H)
|
genpreds.o : genpreds.c $(RTL_BASE_H) $(HCONFIG_H) $(SYSTEM_H)
|
||||||
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genpreds.c $(OUTPUT_OPTION)
|
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genpreds.c $(OUTPUT_OPTION)
|
||||||
|
|
||||||
|
gengtype$(build_exeext) : gengtype.o gengtype-lex.o gengtype-yacc.o \
|
||||||
|
$(HOST_LIBDEPS)
|
||||||
|
$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ \
|
||||||
|
gengtype.o gengtype-lex.o gengtype-yacc.o $(HOST_LIBS)
|
||||||
|
|
||||||
|
gengtype.o : gengtype.c gengtype.h $(HCONFIG_H) $(SYSTEM_H) real.h
|
||||||
|
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
|
||||||
|
$(srcdir)/gengtype.c $(OUTPUT_OPTION)
|
||||||
|
|
||||||
|
gengtype-lex.o : gengtype-lex.c gengtype.h gengtype-yacc.c \
|
||||||
|
$(HCONFIG_H) $(SYSTEM_H)
|
||||||
|
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
|
||||||
|
$(srcdir)/gengtype-lex.c $(OUTPUT_OPTION)
|
||||||
|
|
||||||
|
gengtype-yacc.o : gengtype-yacc.c gengtype.h $(HCONFIG_H) $(SYSTEM_H)
|
||||||
|
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
|
||||||
|
$(srcdir)/gengtype-yacc.c $(OUTPUT_OPTION)
|
||||||
|
|
||||||
|
$(srcdir)/gengtype-lex.c : $(srcdir)/gengtype-lex.l
|
||||||
|
$(FLEX) $(FLEXFLAGS) -o$@ $(srcdir)/gengtype-lex.l \
|
||||||
|
|| ( rm -f $@ && false )
|
||||||
|
|
||||||
|
$(srcdir)/gengtype-yacc.c: $(srcdir)/gengtype-yacc.y
|
||||||
|
(cd $(srcdir) && \
|
||||||
|
$(BISON) $(BISONFLAGS) -d -o gengtype-yacc.c gengtype-yacc.y || \
|
||||||
|
( rm -f $@ && false ) )
|
||||||
|
|
||||||
#
|
#
|
||||||
# Compile the libraries to be used by gen*.
|
# Compile the libraries to be used by gen*.
|
||||||
# If we are not cross-building, gen* use the same .o's that cc1 will use,
|
# If we are not cross-building, gen* use the same .o's that cc1 will use,
|
||||||
|
@ -1941,8 +2011,8 @@ $(BUILD_PREFIX_1)print-rtl.o: $(srcdir)/print-rtl.c $(HCONFIG_H) \
|
||||||
sed -e 's/config[.]h/hconfig.h/' $(srcdir)/print-rtl.c > $(BUILD_PREFIX)print-rtl.c
|
sed -e 's/config[.]h/hconfig.h/' $(srcdir)/print-rtl.c > $(BUILD_PREFIX)print-rtl.c
|
||||||
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)print-rtl.c $(OUTPUT_OPTION)
|
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)print-rtl.c $(OUTPUT_OPTION)
|
||||||
|
|
||||||
$(BUILD_PREFIX_1)bitmap.o: $(srcdir)/bitmap.c $(HCONFIG_H) $(SYSTEM_H) $(RTL_H) \
|
$(BUILD_PREFIX_1)bitmap.o: $(srcdir)/bitmap.c $(HCONFIG_H) $(SYSTEM_H) \
|
||||||
flags.h $(BASIC_BLOCK_H) $(REGS_H)
|
$(RTL_H) flags.h $(BASIC_BLOCK_H) $(REGS_H) $(GGC_H)
|
||||||
rm -f $(BUILD_PREFIX)bitmap.c
|
rm -f $(BUILD_PREFIX)bitmap.c
|
||||||
sed -e 's/config[.]h/hconfig.h/' $(srcdir)/bitmap.c > $(BUILD_PREFIX)bitmap.c
|
sed -e 's/config[.]h/hconfig.h/' $(srcdir)/bitmap.c > $(BUILD_PREFIX)bitmap.c
|
||||||
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)bitmap.c $(OUTPUT_OPTION)
|
$(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)bitmap.c $(OUTPUT_OPTION)
|
||||||
|
@ -2303,11 +2373,10 @@ docdir = $(srcdir)/doc
|
||||||
doc: $(BUILD_INFO) $(GENERATED_MANPAGES) gccbug
|
doc: $(BUILD_INFO) $(GENERATED_MANPAGES) gccbug
|
||||||
info: $(docdir)/cpp.info $(docdir)/gcc.info $(docdir)/gccint.info lang.info $(docdir)/cppinternals.info
|
info: $(docdir)/cpp.info $(docdir)/gcc.info $(docdir)/gccint.info lang.info $(docdir)/cppinternals.info
|
||||||
|
|
||||||
$(docdir)/cpp.info: $(docdir)/cpp.texi $(docdir)/include/fdl.texi \
|
TEXI_CPP_FILES = $(docdir)/cpp.texi $(docdir)/include/fdl.texi \
|
||||||
$(docdir)/cppenv.texi $(docdir)/cppopts.texi
|
$(docdir)/cppenv.texi $(docdir)/cppopts.texi
|
||||||
cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cpp.info doc/cpp.texi
|
|
||||||
|
|
||||||
$(docdir)/gcc.info: $(docdir)/gcc.texi $(docdir)/include/gcc-common.texi \
|
TEXI_GCC_FILES = $(docdir)/gcc.texi $(docdir)/include/gcc-common.texi \
|
||||||
$(docdir)/frontends.texi $(docdir)/standards.texi \
|
$(docdir)/frontends.texi $(docdir)/standards.texi \
|
||||||
$(docdir)/invoke.texi $(docdir)/extend.texi $(docdir)/md.texi \
|
$(docdir)/invoke.texi $(docdir)/extend.texi $(docdir)/md.texi \
|
||||||
$(docdir)/objc.texi $(docdir)/gcov.texi $(docdir)/trouble.texi \
|
$(docdir)/objc.texi $(docdir)/gcov.texi $(docdir)/trouble.texi \
|
||||||
|
@ -2316,9 +2385,8 @@ $(docdir)/gcc.info: $(docdir)/gcc.texi $(docdir)/include/gcc-common.texi \
|
||||||
$(docdir)/include/funding.texi $(docdir)/gnu.texi \
|
$(docdir)/include/funding.texi $(docdir)/gnu.texi \
|
||||||
$(docdir)/include/gpl.texi $(docdir)/include/fdl.texi \
|
$(docdir)/include/gpl.texi $(docdir)/include/fdl.texi \
|
||||||
$(docdir)/contrib.texi $(docdir)/cppenv.texi $(docdir)/cppopts.texi
|
$(docdir)/contrib.texi $(docdir)/cppenv.texi $(docdir)/cppopts.texi
|
||||||
cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/gcc.info doc/gcc.texi
|
|
||||||
|
|
||||||
$(docdir)/gccint.info: $(docdir)/gccint.texi \
|
TEXI_GCCINT_FILES = $(docdir)/gccint.texi \
|
||||||
$(docdir)/include/gcc-common.texi $(docdir)/contribute.texi \
|
$(docdir)/include/gcc-common.texi $(docdir)/contribute.texi \
|
||||||
$(docdir)/makefile.texi $(docdir)/configterms.texi \
|
$(docdir)/makefile.texi $(docdir)/configterms.texi \
|
||||||
$(docdir)/portability.texi $(docdir)/interface.texi \
|
$(docdir)/portability.texi $(docdir)/interface.texi \
|
||||||
|
@ -2329,46 +2397,37 @@ $(docdir)/gccint.info: $(docdir)/gccint.texi \
|
||||||
$(docdir)/headerdirs.texi $(docdir)/include/funding.texi \
|
$(docdir)/headerdirs.texi $(docdir)/include/funding.texi \
|
||||||
$(docdir)/gnu.texi $(docdir)/include/gpl.texi \
|
$(docdir)/gnu.texi $(docdir)/include/gpl.texi \
|
||||||
$(docdir)/include/fdl.texi $(docdir)/contrib.texi \
|
$(docdir)/include/fdl.texi $(docdir)/contrib.texi \
|
||||||
$(docdir)/languages.texi $(docdir)/sourcebuild.texi
|
$(docdir)/languages.texi $(docdir)/sourcebuild.texi \
|
||||||
|
$(docdir)/gty.texi
|
||||||
|
|
||||||
|
TEXI_CPPINT_FILES = $(docdir)/cppinternals.texi
|
||||||
|
|
||||||
|
$(docdir)/cpp.info: $(TEXI_CPP_FILES)
|
||||||
|
cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cpp.info doc/cpp.texi
|
||||||
|
|
||||||
|
$(docdir)/gcc.info: $(TEXI_GCC_FILES)
|
||||||
|
cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/gcc.info doc/gcc.texi
|
||||||
|
|
||||||
|
$(docdir)/gccint.info: $(TEXI_GCCINT_FILES)
|
||||||
cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/gccint.info doc/gccint.texi
|
cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/gccint.info doc/gccint.texi
|
||||||
|
|
||||||
$(docdir)/cppinternals.info: $(docdir)/cppinternals.texi
|
$(docdir)/cppinternals.info: $(TEXI_CPPINT_FILES)
|
||||||
cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cppinternals.info \
|
cd $(srcdir) && $(MAKEINFO) $(MAKEINFOFLAGS) -I doc -I doc/include -o doc/cppinternals.info \
|
||||||
doc/cppinternals.texi
|
doc/cppinternals.texi
|
||||||
|
|
||||||
dvi: gcc.dvi gccint.dvi cpp.dvi lang.dvi cppinternals.dvi
|
dvi: gcc.dvi gccint.dvi cpp.dvi lang.dvi cppinternals.dvi
|
||||||
|
|
||||||
# This works with GNU Make's default rule.
|
# This works with GNU Make's default rule.
|
||||||
cpp.dvi: $(docdir)/cpp.texi $(docdir)/include/fdl.texi \
|
cpp.dvi: $(TEXI_CPP_FILES)
|
||||||
$(docdir)/cppenv.texi $(docdir)/cppopts.texi
|
|
||||||
$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cpp.texi
|
$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cpp.texi
|
||||||
|
|
||||||
gcc.dvi: $(docdir)/gcc.texi $(docdir)/include/gcc-common.texi \
|
gcc.dvi: $(TEXI_GCC_FILES)
|
||||||
$(docdir)/frontends.texi $(docdir)/standards.texi \
|
|
||||||
$(docdir)/invoke.texi $(docdir)/extend.texi $(docdir)/md.texi \
|
|
||||||
$(docdir)/objc.texi $(docdir)/gcov.texi $(docdir)/trouble.texi \
|
|
||||||
$(docdir)/bugreport.texi $(docdir)/service.texi \
|
|
||||||
$(docdir)/contribute.texi $(docdir)/vms.texi \
|
|
||||||
$(docdir)/include/funding.texi $(docdir)/gnu.texi \
|
|
||||||
$(docdir)/include/gpl.texi $(docdir)/include/fdl.texi \
|
|
||||||
$(docdir)/contrib.texi $(docdir)/cppenv.texi $(docdir)/cppopts.texi
|
|
||||||
$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/gcc.texi
|
$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/gcc.texi
|
||||||
|
|
||||||
gccint.dvi: $(docdir)/gccint.texi \
|
gccint.dvi: $(TEXI_GCCINT_FILES)
|
||||||
$(docdir)/include/gcc-common.texi $(docdir)/contribute.texi \
|
|
||||||
$(docdir)/makefile.texi $(docdir)/configterms.texi \
|
|
||||||
$(docdir)/portability.texi $(docdir)/interface.texi \
|
|
||||||
$(docdir)/passes.texi $(docdir)/c-tree.texi \
|
|
||||||
$(docdir)/rtl.texi $(docdir)/md.texi $(docdir)/tm.texi \
|
|
||||||
$(docdir)/hostconfig.texi $(docdir)/fragments.texi \
|
|
||||||
$(docdir)/configfiles.texi $(docdir)/collect2.texi \
|
|
||||||
$(docdir)/headerdirs.texi $(docdir)/include/funding.texi \
|
|
||||||
$(docdir)/gnu.texi $(docdir)/include/gpl.texi \
|
|
||||||
$(docdir)/include/fdl.texi $(docdir)/contrib.texi \
|
|
||||||
$(docdir)/languages.texi $(docdir)/sourcebuild.texi
|
|
||||||
$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/gccint.texi
|
$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/gccint.texi
|
||||||
|
|
||||||
cppinternals.dvi: $(docdir)/cppinternals.texi
|
cppinternals.dvi: $(TEXI_CPPINT_FILES)
|
||||||
$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cppinternals.texi
|
$(TEXI2DVI) -I $(docdir) -I $(docdir)/include $(docdir)/cppinternals.texi
|
||||||
|
|
||||||
generated-manpages: $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1 \
|
generated-manpages: $(docdir)/gcov.1 $(docdir)/cpp.1 $(docdir)/gcc.1 \
|
||||||
|
|
|
@ -1,3 +1,58 @@
|
||||||
|
2002-06-03 Geoffrey Keating <geoffk@redhat.com>
|
||||||
|
|
||||||
|
Merge from pch-branch:
|
||||||
|
|
||||||
|
* config-lang.in (gtfiles): Add ada-tree.h.
|
||||||
|
* ada-tree.h (SET_TYPE_CI_CO_LIST): New.
|
||||||
|
(SET_TYPE_MODULUS): New.
|
||||||
|
(SET_TYPE_INDEX): New.
|
||||||
|
(SET_TYPE_DIGITS_VALUE): New.
|
||||||
|
(SET_TYPE_RM_SIZE): New.
|
||||||
|
(SET_TYPE_UNCONSTRAINED_ARRAY): New.
|
||||||
|
(SET_TYPE_ADA_SIZE): New.
|
||||||
|
(SET_TYPE_ACTUAL_BOUNDS): New.
|
||||||
|
(SET_DECL_CONST_CORRESPONDING_VAR): New.
|
||||||
|
(SET_DECL_ORIGINAL_FIELD): New.
|
||||||
|
(TREE_LOOP_ID): Correct typo.
|
||||||
|
* decl.c: Use new macros.
|
||||||
|
* utils.c: Include debug.h, use new macros.
|
||||||
|
* utils2.c: Use new macros.
|
||||||
|
|
||||||
|
* ada-tree.h: Update all macros for new tree description.
|
||||||
|
(struct tree_loop_id): New.
|
||||||
|
(union lang_tree_node): New.
|
||||||
|
(struct lang_decl): New.
|
||||||
|
(struct lang_type): New.
|
||||||
|
* misc.c (gnat_mark_tree): Delete.
|
||||||
|
(LANG_HOOKS_MARK_TREE): Delete.
|
||||||
|
* trans.c (tree_transform): No longer any need to cast
|
||||||
|
for TREE_LOOP_ID.
|
||||||
|
|
||||||
|
* utils.c (struct language_function): New dummy structure.
|
||||||
|
|
||||||
|
* Makefile.in (decl.o): gt-ada-<filename.h> is in objdir, not srcdir.
|
||||||
|
(misc.o): Likewise.
|
||||||
|
(utils.o): Likewise; also gtype-ada.h.
|
||||||
|
* Make-lang.in (gnat1): Add dependency on s-gtype.
|
||||||
|
(gnatbind): Add dependency on $(CONFIG_H).
|
||||||
|
* utils.c: Correct last #include.
|
||||||
|
(stuct e_stack): Remove unnecessary 'static'.
|
||||||
|
(mark_e_stack): Remove unused prototype.
|
||||||
|
|
||||||
|
* scn-nlit.adb: Remove whitespace after version number to
|
||||||
|
keep lines under 80 chars.
|
||||||
|
* snames.adb: Likewise.
|
||||||
|
* treepr.ads: Likewise.
|
||||||
|
|
||||||
|
* Makefile.in (decl.o): Include gt-ada-<filename>.h.
|
||||||
|
(misc.o): Likewise.
|
||||||
|
(utils.o): Include gt-ada-<filename>.h and gtype-ada.h.
|
||||||
|
* config-lang.in (gtfiles): New.
|
||||||
|
* decl.c: Use gengtype for roots.
|
||||||
|
* gigi.h: Use gengtype for roots.
|
||||||
|
* trans.c: Use gengtype for roots.
|
||||||
|
* utils.c: Use gengtype for roots, marking. Include gtype-ada.h.
|
||||||
|
|
||||||
2002-06-02 Gabriel Dos Reis <gdr@codesourcery.com>
|
2002-06-02 Gabriel Dos Reis <gdr@codesourcery.com>
|
||||||
|
|
||||||
* misc.c (gnat_init): Adjust setting of internal_error_function.
|
* misc.c (gnat_init): Adjust setting of internal_error_function.
|
||||||
|
|
|
@ -205,10 +205,6 @@ gnat1$(exeext): $(TARGET_ADA_SRCS) $(GNAT1_OBJS) $(ADA_BACKEND) $(LIBDEPS)
|
||||||
$(SYSLIBS)
|
$(SYSLIBS)
|
||||||
$(RM) stamp-gnatlib2 stamp-tools
|
$(RM) stamp-gnatlib2 stamp-tools
|
||||||
|
|
||||||
gnatbind$(exeext): ada/b_gnatb.o $(GNATBIND_OBJS)
|
|
||||||
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ ada/b_gnatb.o $(GNATBIND_OBJS) \
|
|
||||||
$(LIBIBERTY) $(LIBS)
|
|
||||||
|
|
||||||
# use target-gcc target-gnatmake target-gnatbind target-gnatlink
|
# use target-gcc target-gnatmake target-gnatbind target-gnatlink
|
||||||
gnattools: $(GCC_PARTS) $(CONFIG_H) prefix.o force
|
gnattools: $(GCC_PARTS) $(CONFIG_H) prefix.o force
|
||||||
$(MAKE) -C ada $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) \
|
$(MAKE) -C ada $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) \
|
||||||
|
@ -272,6 +268,9 @@ gnatlib_and_tools: gnatlib gnattools
|
||||||
# use cross-gcc
|
# use cross-gcc
|
||||||
gnat-cross: force
|
gnat-cross: force
|
||||||
$(MAKE) -C ada $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) gnat-cross
|
$(MAKE) -C ada $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) gnat-cross
|
||||||
|
|
||||||
|
gt-ada-decl.h gt-ada-trans.h gt-ada-utils.h gtype-ada.h : s-gtype ; @true
|
||||||
|
|
||||||
|
|
||||||
# Build hooks:
|
# Build hooks:
|
||||||
|
|
||||||
|
@ -1002,7 +1001,8 @@ ada/cuintp.o : ada/cuintp.c $(CONFIG_H) $(SYSTEM_H) $(TREE_H) ada/ada.h \
|
||||||
ada/decl.o : ada/decl.c $(CONFIG_H) $(TREE_H) $(srcdir)/flags.h \
|
ada/decl.o : ada/decl.c $(CONFIG_H) $(TREE_H) $(srcdir)/flags.h \
|
||||||
$(srcdir)/toplev.h $(srcdir)/convert.h ada/ada.h ada/types.h ada/atree.h \
|
$(srcdir)/toplev.h $(srcdir)/convert.h ada/ada.h ada/types.h ada/atree.h \
|
||||||
ada/nlists.h ada/elists.h ada/uintp.h ada/sinfo.h ada/einfo.h ada/snames.h \
|
ada/nlists.h ada/elists.h ada/uintp.h ada/sinfo.h ada/einfo.h ada/snames.h \
|
||||||
ada/namet.h ada/stringt.h ada/repinfo.h ada/fe.h $(ADA_TREE_H) ada/gigi.h
|
ada/namet.h ada/stringt.h ada/repinfo.h ada/fe.h $(ADA_TREE_H) ada/gigi.h \
|
||||||
|
gt-ada-decl.h
|
||||||
|
|
||||||
ada/misc.o : ada/misc.c $(CONFIG_H) $(TREE_H) $(RTL_H) $(srcdir)/expr.h \
|
ada/misc.o : ada/misc.c $(CONFIG_H) $(TREE_H) $(RTL_H) $(srcdir)/expr.h \
|
||||||
insn-codes.h insn-flags.h insn-config.h $(srcdir)/recog.h \
|
insn-codes.h insn-flags.h insn-config.h $(srcdir)/recog.h \
|
||||||
|
@ -1020,12 +1020,13 @@ ada/targtyps.o : ada/targtyps.c $(CONFIG_H) ada/ada.h ada/types.h ada/atree.h \
|
||||||
ada/trans.o : ada/trans.c $(CONFIG_H) $(TREE_H) $(RTL_H) $(srcdir)/flags.h \
|
ada/trans.o : ada/trans.c $(CONFIG_H) $(TREE_H) $(RTL_H) $(srcdir)/flags.h \
|
||||||
ada/ada.h $(srcdir)/except.h ada/types.h ada/atree.h ada/nlists.h \
|
ada/ada.h $(srcdir)/except.h ada/types.h ada/atree.h ada/nlists.h \
|
||||||
ada/elists.h ada/uintp.h ada/sinfo.h ada/einfo.h ada/namet.h ada/snames.h \
|
ada/elists.h ada/uintp.h ada/sinfo.h ada/einfo.h ada/namet.h ada/snames.h \
|
||||||
ada/stringt.h ada/urealp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h
|
ada/stringt.h ada/urealp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h gt-ada-trans.h
|
||||||
|
|
||||||
ada/utils.o : ada/utils.c $(CONFIG_H) $(TREE_H) $(srcdir)/flags.h \
|
ada/utils.o : ada/utils.c $(CONFIG_H) $(TREE_H) $(srcdir)/flags.h \
|
||||||
$(srcdir)/expr.h $(srcdir)/convert.h $(srcdir)/defaults.h ada/ada.h \
|
$(srcdir)/expr.h $(srcdir)/convert.h $(srcdir)/defaults.h ada/ada.h \
|
||||||
ada/types.h ada/atree.h ada/nlists.h ada/elists.h ada/sinfo.h ada/einfo.h \
|
ada/types.h ada/atree.h ada/nlists.h ada/elists.h ada/sinfo.h ada/einfo.h \
|
||||||
ada/namet.h ada/stringt.h ada/uintp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h
|
ada/namet.h ada/stringt.h ada/uintp.h ada/fe.h $(ADA_TREE_H) ada/gigi.h \
|
||||||
|
gt-ada-utils.h gtype-ada.h
|
||||||
|
|
||||||
ada/utils2.o : ada/utils2.c $(CONFIG_H) $(TREE_H) $(srcdir)/flags.h ada/ada.h \
|
ada/utils2.o : ada/utils2.c $(CONFIG_H) $(TREE_H) $(srcdir)/flags.h ada/ada.h \
|
||||||
ada/types.h ada/atree.h ada/nlists.h ada/elists.h ada/sinfo.h ada/einfo.h \
|
ada/types.h ada/atree.h ada/nlists.h ada/elists.h ada/sinfo.h ada/einfo.h \
|
||||||
|
|
|
@ -34,6 +34,35 @@ enum gnat_tree_code {
|
||||||
};
|
};
|
||||||
#undef DEFTREECODE
|
#undef DEFTREECODE
|
||||||
|
|
||||||
|
/* A tree to hold a loop ID. */
|
||||||
|
struct tree_loop_id GTY(())
|
||||||
|
{
|
||||||
|
struct tree_common common;
|
||||||
|
struct nesting *loop_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The language-specific tree. */
|
||||||
|
union lang_tree_node
|
||||||
|
GTY((desc ("TREE_CODE (&%h.generic) == GNAT_LOOP_ID")))
|
||||||
|
{
|
||||||
|
union tree_node GTY ((tag ("0"),
|
||||||
|
desc ("tree_node_structure (&%h)")))
|
||||||
|
generic;
|
||||||
|
struct tree_loop_id GTY ((tag ("1"))) loop_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Ada uses the lang_decl and lang_type fields to hold more trees. */
|
||||||
|
struct lang_decl GTY(())
|
||||||
|
{
|
||||||
|
union lang_tree_node
|
||||||
|
GTY((desc ("TREE_CODE (&%h.generic) == GNAT_LOOP_ID"))) t;
|
||||||
|
};
|
||||||
|
struct lang_type GTY(())
|
||||||
|
{
|
||||||
|
union lang_tree_node
|
||||||
|
GTY((desc ("TREE_CODE (&%h.generic) == GNAT_LOOP_ID"))) t;
|
||||||
|
};
|
||||||
|
|
||||||
/* Flags added to GCC type nodes. */
|
/* Flags added to GCC type nodes. */
|
||||||
|
|
||||||
/* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is a
|
/* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is a
|
||||||
|
@ -129,29 +158,39 @@ enum gnat_tree_code {
|
||||||
by copy in copy out. It is a CONSTRUCTOR. For a full description of the
|
by copy in copy out. It is a CONSTRUCTOR. For a full description of the
|
||||||
cico parameter passing mechanism refer to the routine gnat_to_gnu_entity. */
|
cico parameter passing mechanism refer to the routine gnat_to_gnu_entity. */
|
||||||
#define TYPE_CI_CO_LIST(NODE) \
|
#define TYPE_CI_CO_LIST(NODE) \
|
||||||
(tree) TYPE_LANG_SPECIFIC (FUNCTION_TYPE_CHECK (NODE))
|
(&TYPE_LANG_SPECIFIC (FUNCTION_TYPE_CHECK (NODE))->t.generic)
|
||||||
|
#define SET_TYPE_CI_CO_LIST(NODE, X) \
|
||||||
|
(TYPE_LANG_SPECIFIC (FUNCTION_TYPE_CHECK (NODE)) = (struct lang_type *)(X))
|
||||||
|
|
||||||
/* For an INTEGER_TYPE with TYPE_MODULAR_P, this is the value of the
|
/* For an INTEGER_TYPE with TYPE_MODULAR_P, this is the value of the
|
||||||
modulus. */
|
modulus. */
|
||||||
#define TYPE_MODULUS(NODE) \
|
#define TYPE_MODULUS(NODE) \
|
||||||
(tree) TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
|
(&TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))->t.generic)
|
||||||
|
#define SET_TYPE_MODULUS(NODE, X) \
|
||||||
|
(TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE)) = (struct lang_type *)(X))
|
||||||
|
|
||||||
/* For an INTEGER_TYPE that is the TYPE_DOMAIN of some ARRAY_TYPE, points to
|
/* For an INTEGER_TYPE that is the TYPE_DOMAIN of some ARRAY_TYPE, points to
|
||||||
the type corresponding to the Ada index type. */
|
the type corresponding to the Ada index type. */
|
||||||
#define TYPE_INDEX_TYPE(NODE) \
|
#define TYPE_INDEX_TYPE(NODE) \
|
||||||
(tree) TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
|
(&TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))->t.generic)
|
||||||
|
#define SET_TYPE_INDEX_TYPE(NODE, X) \
|
||||||
|
(TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE)) = (struct lang_type *)(X))
|
||||||
|
|
||||||
/* For an INTEGER_TYPE with TYPE_VAX_FLOATING_POINT_P, stores the
|
/* For an INTEGER_TYPE with TYPE_VAX_FLOATING_POINT_P, stores the
|
||||||
Digits_Value. */
|
Digits_Value. */
|
||||||
#define TYPE_DIGITS_VALUE(NODE) \
|
#define TYPE_DIGITS_VALUE(NODE) \
|
||||||
(long) TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
|
((long) TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE)))
|
||||||
|
#define SET_TYPE_DIGITS_VALUE(NODE, X) \
|
||||||
|
(TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE)) = (struct lang_type *)(X))
|
||||||
|
|
||||||
/* For INTEGER_TYPE, stores the RM_Size of the type. */
|
/* For INTEGER_TYPE, stores the RM_Size of the type. */
|
||||||
#define TYPE_RM_SIZE_INT(NODE) TYPE_VALUES (INTEGER_TYPE_CHECK (NODE))
|
#define TYPE_RM_SIZE_INT(NODE) TYPE_VALUES (INTEGER_TYPE_CHECK (NODE))
|
||||||
|
|
||||||
/* Likewise for ENUMERAL_TYPE. */
|
/* Likewise for ENUMERAL_TYPE. */
|
||||||
#define TYPE_RM_SIZE_ENUM(NODE) \
|
#define TYPE_RM_SIZE_ENUM(NODE) \
|
||||||
(tree) TYPE_LANG_SPECIFIC (ENUMERAL_TYPE_CHECK (NODE))
|
(&TYPE_LANG_SPECIFIC (ENUMERAL_TYPE_CHECK (NODE))->t.generic)
|
||||||
|
#define SET_TYPE_RM_SIZE_ENUM(NODE, X) \
|
||||||
|
(TYPE_LANG_SPECIFIC (ENUMERAL_TYPE_CHECK (NODE)) = (struct lang_type *)(X))
|
||||||
|
|
||||||
#define TYPE_RM_SIZE(NODE) \
|
#define TYPE_RM_SIZE(NODE) \
|
||||||
(TREE_CODE (NODE) == ENUMERAL_TYPE ? TYPE_RM_SIZE_ENUM (NODE) \
|
(TREE_CODE (NODE) == ENUMERAL_TYPE ? TYPE_RM_SIZE_ENUM (NODE) \
|
||||||
|
@ -162,17 +201,23 @@ enum gnat_tree_code {
|
||||||
unconstrained object. Likewise for a RECORD_TYPE that is pointed
|
unconstrained object. Likewise for a RECORD_TYPE that is pointed
|
||||||
to by a thin pointer. */
|
to by a thin pointer. */
|
||||||
#define TYPE_UNCONSTRAINED_ARRAY(NODE) \
|
#define TYPE_UNCONSTRAINED_ARRAY(NODE) \
|
||||||
(tree) TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE))
|
(&TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE))->t.generic)
|
||||||
|
#define SET_TYPE_UNCONSTRAINED_ARRAY(NODE, X) \
|
||||||
|
(TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE)) = (struct lang_type *)(X))
|
||||||
|
|
||||||
/* For other RECORD_TYPEs and all UNION_TYPEs and QUAL_UNION_TYPEs, the Ada
|
/* For other RECORD_TYPEs and all UNION_TYPEs and QUAL_UNION_TYPEs, the Ada
|
||||||
size of the object. This differs from the GCC size in that it does not
|
size of the object. This differs from the GCC size in that it does not
|
||||||
include any rounding up to the alignment of the type. */
|
include any rounding up to the alignment of the type. */
|
||||||
#define TYPE_ADA_SIZE(NODE) (tree) TYPE_LANG_SPECIFIC (NODE)
|
#define TYPE_ADA_SIZE(NODE) (&TYPE_LANG_SPECIFIC (NODE)->t.generic)
|
||||||
|
#define SET_TYPE_ADA_SIZE(NODE, X) \
|
||||||
|
(TYPE_LANG_SPECIFIC (NODE) = (struct lang_type *)(X))
|
||||||
|
|
||||||
/* For an INTEGER_TYPE with TYPE_HAS_ACTUAL_BOUNDS_P or an ARRAY_TYPE, this is
|
/* For an INTEGER_TYPE with TYPE_HAS_ACTUAL_BOUNDS_P or an ARRAY_TYPE, this is
|
||||||
the index type that should be used when the actual bounds are required for
|
the index type that should be used when the actual bounds are required for
|
||||||
a template. This is used in the case of packed arrays. */
|
a template. This is used in the case of packed arrays. */
|
||||||
#define TYPE_ACTUAL_BOUNDS(NODE) (tree) TYPE_LANG_SPECIFIC (NODE)
|
#define TYPE_ACTUAL_BOUNDS(NODE) (&TYPE_LANG_SPECIFIC (NODE)->t.generic)
|
||||||
|
#define SET_TYPE_ACTUAL_BOUNDS(NODE, X) \
|
||||||
|
(TYPE_LANG_SPECIFIC (NODE) = (struct lang_type *)(X))
|
||||||
|
|
||||||
/* In an UNCONSTRAINED_ARRAY_TYPE, points to the record containing both
|
/* In an UNCONSTRAINED_ARRAY_TYPE, points to the record containing both
|
||||||
the template and object. */
|
the template and object. */
|
||||||
|
@ -211,12 +256,16 @@ enum gnat_tree_code {
|
||||||
memory. Used when a scalar constant is aliased or has its
|
memory. Used when a scalar constant is aliased or has its
|
||||||
address taken. */
|
address taken. */
|
||||||
#define DECL_CONST_CORRESPONDING_VAR(NODE) \
|
#define DECL_CONST_CORRESPONDING_VAR(NODE) \
|
||||||
(tree) DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE))
|
(&DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE))->t.generic)
|
||||||
|
#define SET_DECL_CONST_CORRESPONDING_VAR(NODE, X) \
|
||||||
|
(DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE)) = (struct lang_decl *)(X))
|
||||||
|
|
||||||
/* In a FIELD_DECL, points to the FIELD_DECL that was the ultimate
|
/* In a FIELD_DECL, points to the FIELD_DECL that was the ultimate
|
||||||
source of the decl. */
|
source of the decl. */
|
||||||
#define DECL_ORIGINAL_FIELD(NODE) \
|
#define DECL_ORIGINAL_FIELD(NODE) \
|
||||||
(tree) DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE))
|
(&DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE))->t.generic)
|
||||||
|
#define SET_DECL_ORIGINAL_FIELD(NODE, X) \
|
||||||
|
(DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE)) = (struct lang_decl *)(X))
|
||||||
|
|
||||||
/* In a FIELD_DECL corresponding to a discriminant, contains the
|
/* In a FIELD_DECL corresponding to a discriminant, contains the
|
||||||
discriminant number. */
|
discriminant number. */
|
||||||
|
@ -224,4 +273,5 @@ enum gnat_tree_code {
|
||||||
|
|
||||||
/* This is a horrible kludge to store the loop_id of a loop into a tree
|
/* This is a horrible kludge to store the loop_id of a loop into a tree
|
||||||
node. We need to find some other place to store it! */
|
node. We need to find some other place to store it! */
|
||||||
#define TREE_LOOP_ID(NODE) (TREE_CHECK (NODE, GNAT_LOOP_ID)->real_cst.rtl)
|
#define TREE_LOOP_ID(NODE) \
|
||||||
|
(((union lang_tree_node *)TREE_CHECK (NODE, GNAT_LOOP_ID))->loop_id.loop_id)
|
||||||
|
|
|
@ -35,6 +35,8 @@ compilers="gnat1\$(exeext)"
|
||||||
|
|
||||||
stagestuff="gnatbind\$(exeext) gnat1\$(exeext)"
|
stagestuff="gnatbind\$(exeext) gnat1\$(exeext)"
|
||||||
|
|
||||||
|
gtfiles="\$(srcdir)/ada/ada-tree.h \$(srcdir)/ada/gigi.h \$(srcdir)/ada/decl.c \$(srcdir)/ada/trans.c \$(srcdir)/ada/utils.c"
|
||||||
|
|
||||||
diff_excludes="-x ada/a-einfo.h -x ada/a-sinfo.h -x ada/nmake.adb -x ada/nmake.ads -x ada/treeprs.ads -x ada/sysid.ads"
|
diff_excludes="-x ada/a-einfo.h -x ada/a-sinfo.h -x ada/nmake.adb -x ada/nmake.ads -x ada/treeprs.ads -x ada/sysid.ads"
|
||||||
|
|
||||||
outputs=ada/Makefile
|
outputs=ada/Makefile
|
||||||
|
|
|
@ -1044,10 +1044,10 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
|| Address_Taken (gnat_entity)
|
|| Address_Taken (gnat_entity)
|
||||||
|| Is_Aliased (gnat_entity)
|
|| Is_Aliased (gnat_entity)
|
||||||
|| Is_Aliased (Etype (gnat_entity))))
|
|| Is_Aliased (Etype (gnat_entity))))
|
||||||
DECL_CONST_CORRESPONDING_VAR (gnu_decl)
|
SET_DECL_CONST_CORRESPONDING_VAR (gnu_decl,
|
||||||
= create_var_decl (gnu_entity_id, gnu_ext_name, gnu_type,
|
create_var_decl (gnu_entity_id, gnu_ext_name, gnu_type,
|
||||||
gnu_expr, 0, Is_Public (gnat_entity), 0,
|
gnu_expr, 0, Is_Public (gnat_entity), 0,
|
||||||
static_p, 0);
|
static_p, 0));
|
||||||
|
|
||||||
/* If this is declared in a block that contains an block with an
|
/* If this is declared in a block that contains an block with an
|
||||||
exception handler, we must force this variable in memory to
|
exception handler, we must force this variable in memory to
|
||||||
|
@ -1184,7 +1184,7 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
if (! integer_zerop (gnu_modulus))
|
if (! integer_zerop (gnu_modulus))
|
||||||
{
|
{
|
||||||
TYPE_MODULAR_P (gnu_type) = 1;
|
TYPE_MODULAR_P (gnu_type) = 1;
|
||||||
TYPE_MODULUS (gnu_type) = gnu_modulus;
|
SET_TYPE_MODULUS (gnu_type, gnu_modulus);
|
||||||
gnu_high = fold (build (MINUS_EXPR, gnu_type, gnu_modulus,
|
gnu_high = fold (build (MINUS_EXPR, gnu_type, gnu_modulus,
|
||||||
convert (gnu_type, integer_one_node)));
|
convert (gnu_type, integer_one_node)));
|
||||||
}
|
}
|
||||||
|
@ -1308,7 +1308,7 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
gnu_field_type, gnu_type, 1, 0, 0, 1),
|
gnu_field_type, gnu_type, 1, 0, 0, 1),
|
||||||
finish_record_type (gnu_type, gnu_field, 0, 0);
|
finish_record_type (gnu_type, gnu_field, 0, 0);
|
||||||
TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_type) = 1;
|
TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_type) = 1;
|
||||||
TYPE_ADA_SIZE (gnu_type) = bitsize_int (esize);
|
SET_TYPE_ADA_SIZE (gnu_type, bitsize_int (esize));
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -1320,8 +1320,8 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
{
|
{
|
||||||
gnu_type = make_signed_type (esize);
|
gnu_type = make_signed_type (esize);
|
||||||
TYPE_VAX_FLOATING_POINT_P (gnu_type) = 1;
|
TYPE_VAX_FLOATING_POINT_P (gnu_type) = 1;
|
||||||
TYPE_DIGITS_VALUE (gnu_type)
|
SET_TYPE_DIGITS_VALUE (gnu_type,
|
||||||
= UI_To_Int (Digits_Value (gnat_entity));
|
UI_To_Int (Digits_Value (gnat_entity)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1619,7 +1619,7 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
= TYPE_REFERENCE_TO (gnu_type) = gnu_fat_type;
|
= TYPE_REFERENCE_TO (gnu_type) = gnu_fat_type;
|
||||||
TYPE_MODE (gnu_type) = BLKmode;
|
TYPE_MODE (gnu_type) = BLKmode;
|
||||||
TYPE_ALIGN (gnu_type) = TYPE_ALIGN (tem);
|
TYPE_ALIGN (gnu_type) = TYPE_ALIGN (tem);
|
||||||
TYPE_UNCONSTRAINED_ARRAY (gnu_fat_type) = gnu_type;
|
SET_TYPE_UNCONSTRAINED_ARRAY (gnu_fat_type, gnu_type);
|
||||||
|
|
||||||
/* If the maximum size doesn't overflow, use it. */
|
/* If the maximum size doesn't overflow, use it. */
|
||||||
if (TREE_CODE (gnu_max_size) == INTEGER_CST
|
if (TREE_CODE (gnu_max_size) == INTEGER_CST
|
||||||
|
@ -1647,7 +1647,7 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
DECL_FIELD_OFFSET (TREE_CHAIN (TYPE_FIELDS (tem))) = size_zero_node;
|
DECL_FIELD_OFFSET (TREE_CHAIN (TYPE_FIELDS (tem))) = size_zero_node;
|
||||||
DECL_FIELD_BIT_OFFSET (TREE_CHAIN (TYPE_FIELDS (tem)))
|
DECL_FIELD_BIT_OFFSET (TREE_CHAIN (TYPE_FIELDS (tem)))
|
||||||
= bitsize_zero_node;
|
= bitsize_zero_node;
|
||||||
TYPE_UNCONSTRAINED_ARRAY (tem) = gnu_type;
|
SET_TYPE_UNCONSTRAINED_ARRAY (tem, gnu_type);
|
||||||
TYPE_OBJECT_RECORD_TYPE (gnu_type) = tem;
|
TYPE_OBJECT_RECORD_TYPE (gnu_type) = tem;
|
||||||
|
|
||||||
/* Give the thin pointer type a name. */
|
/* Give the thin pointer type a name. */
|
||||||
|
@ -2066,18 +2066,18 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
TYPE_HAS_ACTUAL_BOUNDS_P (gnu_inner_type) = 1;
|
TYPE_HAS_ACTUAL_BOUNDS_P (gnu_inner_type) = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
TYPE_ACTUAL_BOUNDS (gnu_inner_type) = NULL_TREE;
|
SET_TYPE_ACTUAL_BOUNDS (gnu_inner_type, NULL_TREE);
|
||||||
|
|
||||||
for (gnat_index = First_Index (gnat_entity);
|
for (gnat_index = First_Index (gnat_entity);
|
||||||
Present (gnat_index); gnat_index = Next_Index (gnat_index))
|
Present (gnat_index); gnat_index = Next_Index (gnat_index))
|
||||||
TYPE_ACTUAL_BOUNDS (gnu_inner_type)
|
SET_TYPE_ACTUAL_BOUNDS (gnu_inner_type,
|
||||||
= tree_cons (NULL_TREE,
|
tree_cons (NULL_TREE,
|
||||||
get_unpadded_type (Etype (gnat_index)),
|
get_unpadded_type (Etype (gnat_index)),
|
||||||
TYPE_ACTUAL_BOUNDS (gnu_inner_type));
|
TYPE_ACTUAL_BOUNDS (gnu_inner_type)));
|
||||||
|
|
||||||
if (Convention (gnat_entity) != Convention_Fortran)
|
if (Convention (gnat_entity) != Convention_Fortran)
|
||||||
TYPE_ACTUAL_BOUNDS (gnu_inner_type)
|
SET_TYPE_ACTUAL_BOUNDS (gnu_inner_type,
|
||||||
= nreverse (TYPE_ACTUAL_BOUNDS (gnu_inner_type));
|
nreverse (TYPE_ACTUAL_BOUNDS (gnu_inner_type)));
|
||||||
|
|
||||||
if (TREE_CODE (gnu_type) == RECORD_TYPE
|
if (TREE_CODE (gnu_type) == RECORD_TYPE
|
||||||
&& TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_type))
|
&& TYPE_LEFT_JUSTIFIED_MODULAR_P (gnu_type))
|
||||||
|
@ -2577,9 +2577,10 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
|
|
||||||
DECL_INTERNAL_P (gnu_field)
|
DECL_INTERNAL_P (gnu_field)
|
||||||
= DECL_INTERNAL_P (gnu_old_field);
|
= DECL_INTERNAL_P (gnu_old_field);
|
||||||
DECL_ORIGINAL_FIELD (gnu_field)
|
SET_DECL_ORIGINAL_FIELD (gnu_field,
|
||||||
= DECL_ORIGINAL_FIELD (gnu_old_field) != 0
|
(DECL_ORIGINAL_FIELD (gnu_old_field) != 0
|
||||||
? DECL_ORIGINAL_FIELD (gnu_old_field) : gnu_old_field;
|
? DECL_ORIGINAL_FIELD (gnu_old_field)
|
||||||
|
: gnu_old_field));
|
||||||
DECL_DISCRIMINANT_NUMBER (gnu_field)
|
DECL_DISCRIMINANT_NUMBER (gnu_field)
|
||||||
= DECL_DISCRIMINANT_NUMBER (gnu_old_field);
|
= DECL_DISCRIMINANT_NUMBER (gnu_old_field);
|
||||||
TREE_THIS_VOLATILE (gnu_field)
|
TREE_THIS_VOLATILE (gnu_field)
|
||||||
|
@ -2598,7 +2599,7 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
TYPE_ALIGN (gnu_type) = TYPE_ALIGN (gnu_base_type);
|
TYPE_ALIGN (gnu_type) = TYPE_ALIGN (gnu_base_type);
|
||||||
TYPE_SIZE (gnu_type) = TYPE_SIZE (gnu_base_type);
|
TYPE_SIZE (gnu_type) = TYPE_SIZE (gnu_base_type);
|
||||||
TYPE_SIZE_UNIT (gnu_type) = TYPE_SIZE_UNIT (gnu_base_type);
|
TYPE_SIZE_UNIT (gnu_type) = TYPE_SIZE_UNIT (gnu_base_type);
|
||||||
TYPE_ADA_SIZE (gnu_type) = TYPE_ADA_SIZE (gnu_base_type);
|
SET_TYPE_ADA_SIZE (gnu_type, TYPE_ADA_SIZE (gnu_base_type));
|
||||||
|
|
||||||
if (TREE_CODE (TYPE_SIZE (gnu_type)) != INTEGER_CST
|
if (TREE_CODE (TYPE_SIZE (gnu_type)) != INTEGER_CST
|
||||||
&& contains_placeholder_p (TYPE_SIZE (gnu_type)))
|
&& contains_placeholder_p (TYPE_SIZE (gnu_type)))
|
||||||
|
@ -2623,10 +2624,10 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
&& contains_placeholder_p (TYPE_ADA_SIZE (gnu_type)))
|
&& contains_placeholder_p (TYPE_ADA_SIZE (gnu_type)))
|
||||||
for (gnu_temp = gnu_subst_list;
|
for (gnu_temp = gnu_subst_list;
|
||||||
gnu_temp; gnu_temp = TREE_CHAIN (gnu_temp))
|
gnu_temp; gnu_temp = TREE_CHAIN (gnu_temp))
|
||||||
TYPE_ADA_SIZE (gnu_type)
|
SET_TYPE_ADA_SIZE (gnu_type,
|
||||||
= substitute_in_expr (TYPE_ADA_SIZE (gnu_type),
|
substitute_in_expr (TYPE_ADA_SIZE (gnu_type),
|
||||||
TREE_PURPOSE (gnu_temp),
|
TREE_PURPOSE (gnu_temp),
|
||||||
TREE_VALUE (gnu_temp));
|
TREE_VALUE (gnu_temp)));
|
||||||
|
|
||||||
/* Recompute the mode of this record type now that we know its
|
/* Recompute the mode of this record type now that we know its
|
||||||
actual size. */
|
actual size. */
|
||||||
|
@ -2816,7 +2817,7 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
if (gnu_type == 0)
|
if (gnu_type == 0)
|
||||||
{
|
{
|
||||||
gnu_type = make_node (RECORD_TYPE);
|
gnu_type = make_node (RECORD_TYPE);
|
||||||
TYPE_UNCONSTRAINED_ARRAY (gnu_type) = gnu_old;
|
SET_TYPE_UNCONSTRAINED_ARRAY (gnu_type, gnu_old);
|
||||||
TYPE_POINTER_TO (gnu_old) = gnu_type;
|
TYPE_POINTER_TO (gnu_old) = gnu_type;
|
||||||
|
|
||||||
set_lineno (gnat_entity, 0);
|
set_lineno (gnat_entity, 0);
|
||||||
|
@ -3670,11 +3671,14 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
if (TREE_CODE (gnu_type) == RECORD_TYPE
|
if (TREE_CODE (gnu_type) == RECORD_TYPE
|
||||||
&& operand_equal_p (TYPE_ADA_SIZE (gnu_type),
|
&& operand_equal_p (TYPE_ADA_SIZE (gnu_type),
|
||||||
TYPE_SIZE (gnu_type), 0))
|
TYPE_SIZE (gnu_type), 0))
|
||||||
TYPE_ADA_SIZE (gnu_type) = TYPE_SIZE (gnu_type)
|
{
|
||||||
|
TYPE_SIZE (gnu_type)
|
||||||
= elaborate_expression_1 (gnat_entity, gnat_entity,
|
= elaborate_expression_1 (gnat_entity, gnat_entity,
|
||||||
TYPE_SIZE (gnu_type),
|
TYPE_SIZE (gnu_type),
|
||||||
get_identifier ("SIZE"),
|
get_identifier ("SIZE"),
|
||||||
definition, 0);
|
definition, 0);
|
||||||
|
SET_TYPE_ADA_SIZE (gnu_type, TYPE_SIZE (gnu_type));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TYPE_SIZE (gnu_type)
|
TYPE_SIZE (gnu_type)
|
||||||
|
@ -3699,11 +3703,11 @@ gnat_to_gnu_entity (gnat_entity, gnu_expr, definition)
|
||||||
size_int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT));
|
size_int (TYPE_ALIGN (gnu_type) / BITS_PER_UNIT));
|
||||||
|
|
||||||
if (TREE_CODE (gnu_type) == RECORD_TYPE)
|
if (TREE_CODE (gnu_type) == RECORD_TYPE)
|
||||||
TYPE_ADA_SIZE (gnu_type)
|
SET_TYPE_ADA_SIZE (gnu_type,
|
||||||
= elaborate_expression_1 (gnat_entity, gnat_entity,
|
elaborate_expression_1 (gnat_entity, gnat_entity,
|
||||||
TYPE_ADA_SIZE (gnu_type),
|
TYPE_ADA_SIZE (gnu_type),
|
||||||
get_identifier ("RM_SIZE"),
|
get_identifier ("RM_SIZE"),
|
||||||
definition, 0);
|
definition, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4040,7 +4044,7 @@ substitution_list (gnat_subtype, gnat_type, gnu_list, definition)
|
||||||
/* For the following two functions: for each GNAT entity, the GCC
|
/* For the following two functions: for each GNAT entity, the GCC
|
||||||
tree node used as a dummy for that entity, if any. */
|
tree node used as a dummy for that entity, if any. */
|
||||||
|
|
||||||
static tree *dummy_node_table;
|
static GTY((length ("max_gnat_nodes"))) tree * dummy_node_table;
|
||||||
|
|
||||||
/* Initialize the above table. */
|
/* Initialize the above table. */
|
||||||
|
|
||||||
|
@ -4049,8 +4053,7 @@ init_dummy_type ()
|
||||||
{
|
{
|
||||||
Node_Id gnat_node;
|
Node_Id gnat_node;
|
||||||
|
|
||||||
dummy_node_table = (tree *) xmalloc (max_gnat_nodes * sizeof (tree));
|
dummy_node_table = (tree *) ggc_alloc (max_gnat_nodes * sizeof (tree));
|
||||||
ggc_add_tree_root (dummy_node_table, max_gnat_nodes);
|
|
||||||
|
|
||||||
for (gnat_node = 0; gnat_node < max_gnat_nodes; gnat_node++)
|
for (gnat_node = 0; gnat_node < max_gnat_nodes; gnat_node++)
|
||||||
dummy_node_table[gnat_node] = NULL_TREE;
|
dummy_node_table[gnat_node] = NULL_TREE;
|
||||||
|
@ -4447,9 +4450,9 @@ make_packable_type (type)
|
||||||
! DECL_NONADDRESSABLE_P (old_field));
|
! DECL_NONADDRESSABLE_P (old_field));
|
||||||
|
|
||||||
DECL_INTERNAL_P (new_field) = DECL_INTERNAL_P (old_field);
|
DECL_INTERNAL_P (new_field) = DECL_INTERNAL_P (old_field);
|
||||||
DECL_ORIGINAL_FIELD (new_field)
|
SET_DECL_ORIGINAL_FIELD (new_field,
|
||||||
= (DECL_ORIGINAL_FIELD (old_field) != 0
|
(DECL_ORIGINAL_FIELD (old_field) != 0
|
||||||
? DECL_ORIGINAL_FIELD (old_field) : old_field);
|
? DECL_ORIGINAL_FIELD (old_field) : old_field));
|
||||||
TREE_CHAIN (new_field) = field_list;
|
TREE_CHAIN (new_field) = field_list;
|
||||||
field_list = new_field;
|
field_list = new_field;
|
||||||
}
|
}
|
||||||
|
@ -4583,7 +4586,7 @@ maybe_pad_type (type, size, align, gnat_entity, name_trailer,
|
||||||
|
|
||||||
/* Keep the RM_Size of the padded record as that of the old record
|
/* Keep the RM_Size of the padded record as that of the old record
|
||||||
if requested. */
|
if requested. */
|
||||||
TYPE_ADA_SIZE (record) = same_rm_size ? size : rm_size (type);
|
SET_TYPE_ADA_SIZE (record, same_rm_size ? size : rm_size (type));
|
||||||
|
|
||||||
/* Unless debugging information isn't being written for the input type,
|
/* Unless debugging information isn't being written for the input type,
|
||||||
write a record that shows what we are a subtype of and also make a
|
write a record that shows what we are a subtype of and also make a
|
||||||
|
@ -5696,12 +5699,12 @@ set_rm_size (uint_size, gnu_type, gnat_entity)
|
||||||
&& Is_Discrete_Or_Fixed_Point_Type (gnat_entity))
|
&& Is_Discrete_Or_Fixed_Point_Type (gnat_entity))
|
||||||
TYPE_RM_SIZE_INT (gnu_type) = size;
|
TYPE_RM_SIZE_INT (gnu_type) = size;
|
||||||
else if (TREE_CODE (gnu_type) == ENUMERAL_TYPE)
|
else if (TREE_CODE (gnu_type) == ENUMERAL_TYPE)
|
||||||
TYPE_RM_SIZE_ENUM (gnu_type) = size;
|
SET_TYPE_RM_SIZE_ENUM (gnu_type, size);
|
||||||
else if ((TREE_CODE (gnu_type) == RECORD_TYPE
|
else if ((TREE_CODE (gnu_type) == RECORD_TYPE
|
||||||
|| TREE_CODE (gnu_type) == UNION_TYPE
|
|| TREE_CODE (gnu_type) == UNION_TYPE
|
||||||
|| TREE_CODE (gnu_type) == QUAL_UNION_TYPE)
|
|| TREE_CODE (gnu_type) == QUAL_UNION_TYPE)
|
||||||
&& ! TYPE_IS_FAT_POINTER_P (gnu_type))
|
&& ! TYPE_IS_FAT_POINTER_P (gnu_type))
|
||||||
TYPE_ADA_SIZE (gnu_type) = size;
|
SET_TYPE_ADA_SIZE (gnu_type, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given a type TYPE, return a new type whose size is appropriate for SIZE.
|
/* Given a type TYPE, return a new type whose size is appropriate for SIZE.
|
||||||
|
@ -5935,8 +5938,8 @@ gnat_substitute_in_type (t, f, r)
|
||||||
|
|
||||||
new = build_range_type (TREE_TYPE (t), low, high);
|
new = build_range_type (TREE_TYPE (t), low, high);
|
||||||
if (TYPE_INDEX_TYPE (t))
|
if (TYPE_INDEX_TYPE (t))
|
||||||
TYPE_INDEX_TYPE (new)
|
SET_TYPE_INDEX_TYPE (new,
|
||||||
= gnat_substitute_in_type (TYPE_INDEX_TYPE (t), f, r);
|
gnat_substitute_in_type (TYPE_INDEX_TYPE (t), f, r));
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6056,9 +6059,9 @@ gnat_substitute_in_type (t, f, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
DECL_CONTEXT (new_field) = new;
|
DECL_CONTEXT (new_field) = new;
|
||||||
DECL_ORIGINAL_FIELD (new_field)
|
SET_DECL_ORIGINAL_FIELD (new_field,
|
||||||
= DECL_ORIGINAL_FIELD (field) != 0
|
(DECL_ORIGINAL_FIELD (field) != 0
|
||||||
? DECL_ORIGINAL_FIELD (field) : field;
|
? DECL_ORIGINAL_FIELD (field) : field));
|
||||||
|
|
||||||
/* If the size of the old field was set at a constant,
|
/* If the size of the old field was set at a constant,
|
||||||
propagate the size in case the type's size was variable.
|
propagate the size in case the type's size was variable.
|
||||||
|
@ -6121,7 +6124,7 @@ gnat_substitute_in_type (t, f, r)
|
||||||
{
|
{
|
||||||
TYPE_SIZE (new) = TYPE_SIZE (t);
|
TYPE_SIZE (new) = TYPE_SIZE (t);
|
||||||
TYPE_SIZE_UNIT (new) = TYPE_SIZE_UNIT (t);
|
TYPE_SIZE_UNIT (new) = TYPE_SIZE_UNIT (t);
|
||||||
TYPE_ADA_SIZE (new) = TYPE_ADA_SIZE (t);
|
SET_TYPE_ADA_SIZE (new, TYPE_ADA_SIZE (t));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new;
|
return new;
|
||||||
|
@ -6209,3 +6212,5 @@ concat_id_with_name (gnu_id, suffix)
|
||||||
strcpy (Name_Buffer + len, suffix);
|
strcpy (Name_Buffer + len, suffix);
|
||||||
return get_identifier (Name_Buffer);
|
return get_identifier (Name_Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-ada-decl.h"
|
||||||
|
|
|
@ -159,7 +159,7 @@ extern const char *ref_filename;
|
||||||
/* List of TREE_LIST nodes representing a block stack. TREE_VALUE
|
/* List of TREE_LIST nodes representing a block stack. TREE_VALUE
|
||||||
of each gives the variable used for the setjmp buffer in the current
|
of each gives the variable used for the setjmp buffer in the current
|
||||||
block, if any. */
|
block, if any. */
|
||||||
extern tree gnu_block_stack;
|
extern GTY(()) tree gnu_block_stack;
|
||||||
|
|
||||||
/* This is the main program of the back-end. It sets up all the table
|
/* This is the main program of the back-end. It sets up all the table
|
||||||
structures and then generates code. */
|
structures and then generates code. */
|
||||||
|
@ -348,8 +348,8 @@ enum standard_datatypes
|
||||||
ADT_raise_nodefer_decl,
|
ADT_raise_nodefer_decl,
|
||||||
ADT_LAST};
|
ADT_LAST};
|
||||||
|
|
||||||
extern tree gnat_std_decls[(int) ADT_LAST];
|
extern GTY(()) tree gnat_std_decls[(int) ADT_LAST];
|
||||||
extern tree gnat_raise_decls[(int) LAST_REASON_CODE + 1];
|
extern GTY(()) tree gnat_raise_decls[(int) LAST_REASON_CODE + 1];
|
||||||
|
|
||||||
#define longest_float_type_node gnat_std_decls[(int) ADT_longest_float_type]
|
#define longest_float_type_node gnat_std_decls[(int) ADT_longest_float_type]
|
||||||
#define void_type_decl_node gnat_std_decls[(int) ADT_void_type_decl]
|
#define void_type_decl_node gnat_std_decls[(int) ADT_void_type_decl]
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
@c o
|
@c o
|
||||||
@c G N A T _ RM o
|
@c G N A T _ RM o
|
||||||
@c o
|
@c o
|
||||||
@c $Revision: 1.6 $
|
@c $Revision: 1.3.8.1 $
|
||||||
@c o
|
@c o
|
||||||
@c Copyright (C) 1995-2002 Free Software Foundation o
|
@c Copyright (C) 1995-2002 Free Software Foundation o
|
||||||
@c o
|
@c o
|
||||||
|
|
|
@ -86,7 +86,6 @@ static const char *gnat_printable_name PARAMS ((tree, int));
|
||||||
static tree gnat_eh_runtime_type PARAMS ((tree));
|
static tree gnat_eh_runtime_type PARAMS ((tree));
|
||||||
static int gnat_eh_type_covers PARAMS ((tree, tree));
|
static int gnat_eh_type_covers PARAMS ((tree, tree));
|
||||||
static void gnat_parse_file PARAMS ((int));
|
static void gnat_parse_file PARAMS ((int));
|
||||||
static void gnat_mark_tree PARAMS ((tree));
|
|
||||||
static rtx gnat_expand_expr PARAMS ((tree, rtx, enum machine_mode,
|
static rtx gnat_expand_expr PARAMS ((tree, rtx, enum machine_mode,
|
||||||
int));
|
int));
|
||||||
|
|
||||||
|
@ -104,8 +103,6 @@ static rtx gnat_expand_expr PARAMS ((tree, rtx, enum machine_mode,
|
||||||
#define LANG_HOOKS_DECODE_OPTION gnat_decode_option
|
#define LANG_HOOKS_DECODE_OPTION gnat_decode_option
|
||||||
#undef LANG_HOOKS_PARSE_FILE
|
#undef LANG_HOOKS_PARSE_FILE
|
||||||
#define LANG_HOOKS_PARSE_FILE gnat_parse_file
|
#define LANG_HOOKS_PARSE_FILE gnat_parse_file
|
||||||
#undef LANG_HOOKS_MARK_TREE
|
|
||||||
#define LANG_HOOKS_MARK_TREE gnat_mark_tree
|
|
||||||
#undef LANG_HOOKS_HONOR_READONLY
|
#undef LANG_HOOKS_HONOR_READONLY
|
||||||
#define LANG_HOOKS_HONOR_READONLY 1
|
#define LANG_HOOKS_HONOR_READONLY 1
|
||||||
#undef LANG_HOOKS_FINISH_INCOMPLETE_DECL
|
#undef LANG_HOOKS_FINISH_INCOMPLETE_DECL
|
||||||
|
@ -289,53 +286,6 @@ gnat_init_options ()
|
||||||
gnat_argc = 1;
|
gnat_argc = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gnat_mark_tree (t)
|
|
||||||
tree t;
|
|
||||||
{
|
|
||||||
switch (TREE_CODE (t))
|
|
||||||
{
|
|
||||||
case FUNCTION_TYPE:
|
|
||||||
ggc_mark_tree (TYPE_CI_CO_LIST (t));
|
|
||||||
return;
|
|
||||||
|
|
||||||
case INTEGER_TYPE:
|
|
||||||
if (TYPE_MODULAR_P (t))
|
|
||||||
ggc_mark_tree (TYPE_MODULUS (t));
|
|
||||||
else if (TYPE_VAX_FLOATING_POINT_P (t))
|
|
||||||
;
|
|
||||||
else if (TYPE_HAS_ACTUAL_BOUNDS_P (t))
|
|
||||||
ggc_mark_tree (TYPE_ACTUAL_BOUNDS (t));
|
|
||||||
else
|
|
||||||
ggc_mark_tree (TYPE_INDEX_TYPE (t));
|
|
||||||
return;
|
|
||||||
|
|
||||||
case ENUMERAL_TYPE:
|
|
||||||
ggc_mark_tree (TYPE_RM_SIZE_ENUM (t));
|
|
||||||
return;
|
|
||||||
|
|
||||||
case ARRAY_TYPE:
|
|
||||||
ggc_mark_tree (TYPE_ACTUAL_BOUNDS (t));
|
|
||||||
return;
|
|
||||||
|
|
||||||
case RECORD_TYPE: case UNION_TYPE: case QUAL_UNION_TYPE:
|
|
||||||
/* This is really TYPE_UNCONSTRAINED_ARRAY for fat pointers. */
|
|
||||||
ggc_mark_tree (TYPE_ADA_SIZE (t));
|
|
||||||
return;
|
|
||||||
|
|
||||||
case CONST_DECL:
|
|
||||||
ggc_mark_tree (DECL_CONST_CORRESPONDING_VAR (t));
|
|
||||||
return;
|
|
||||||
|
|
||||||
case FIELD_DECL:
|
|
||||||
ggc_mark_tree (DECL_ORIGINAL_FIELD (t));
|
|
||||||
return;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Here is the function to handle the compiler error processing in GCC. */
|
/* Here is the function to handle the compiler error processing in GCC. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
-- --
|
-- --
|
||||||
-- B o d y --
|
-- B o d y --
|
||||||
-- --
|
-- --
|
||||||
-- $Revision$
|
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2001-2002 Free Software Foundation, Inc. --
|
-- Copyright (C) 2001-2002 Free Software Foundation, Inc. --
|
||||||
-- --
|
-- --
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
-- --
|
-- --
|
||||||
-- S p e c --
|
-- S p e c --
|
||||||
-- --
|
-- --
|
||||||
-- $Revision$
|
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2001-2002 Free Software Foundation, Inc. --
|
-- Copyright (C) 2001-2002 Free Software Foundation, Inc. --
|
||||||
-- --
|
-- --
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
-- --
|
-- --
|
||||||
-- B o d y --
|
-- B o d y --
|
||||||
-- --
|
-- --
|
||||||
-- $Revision$
|
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2001-2002 Free Software Foundation, Inc. --
|
-- Copyright (C) 2001-2002 Free Software Foundation, Inc. --
|
||||||
-- --
|
-- --
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
-- --
|
-- --
|
||||||
-- S p e c --
|
-- S p e c --
|
||||||
-- --
|
-- --
|
||||||
-- $Revision$
|
|
||||||
-- --
|
-- --
|
||||||
-- Copyright (C) 2001 Free Software Foundation, Inc. --
|
-- Copyright (C) 2001 Free Software Foundation, Inc. --
|
||||||
-- --
|
-- --
|
||||||
|
|
|
@ -86,7 +86,7 @@ tree gnu_block_stack;
|
||||||
variables. TREE_VALUE is the VAR_DECL that stores the address of
|
variables. TREE_VALUE is the VAR_DECL that stores the address of
|
||||||
the raised exception. Nonzero means we are in an exception
|
the raised exception. Nonzero means we are in an exception
|
||||||
handler. Not used in the zero-cost case. */
|
handler. Not used in the zero-cost case. */
|
||||||
static tree gnu_except_ptr_stack;
|
static GTY(()) tree gnu_except_ptr_stack;
|
||||||
|
|
||||||
/* Map GNAT tree codes to GCC tree codes for simple expressions. */
|
/* Map GNAT tree codes to GCC tree codes for simple expressions. */
|
||||||
static enum tree_code gnu_codes[Number_Node_Kinds];
|
static enum tree_code gnu_codes[Number_Node_Kinds];
|
||||||
|
@ -96,7 +96,7 @@ Node_Id error_gnat_node;
|
||||||
|
|
||||||
/* Variable that stores a list of labels to be used as a goto target instead of
|
/* Variable that stores a list of labels to be used as a goto target instead of
|
||||||
a return in some functions. See processing for N_Subprogram_Body. */
|
a return in some functions. See processing for N_Subprogram_Body. */
|
||||||
static tree gnu_return_label_stack;
|
static GTY(()) tree gnu_return_label_stack;
|
||||||
|
|
||||||
static tree tree_transform PARAMS((Node_Id));
|
static tree tree_transform PARAMS((Node_Id));
|
||||||
static void elaborate_all_entities PARAMS((Node_Id));
|
static void elaborate_all_entities PARAMS((Node_Id));
|
||||||
|
@ -188,9 +188,6 @@ gigi (gnat_root, max_gnat_node, number_name, nodes_ptr, next_node_ptr,
|
||||||
save_gnu_tree (Base_Type (standard_integer),
|
save_gnu_tree (Base_Type (standard_integer),
|
||||||
TYPE_NAME (integer_type_node), 0);
|
TYPE_NAME (integer_type_node), 0);
|
||||||
|
|
||||||
ggc_add_tree_root (&gnu_block_stack, 1);
|
|
||||||
ggc_add_tree_root (&gnu_except_ptr_stack, 1);
|
|
||||||
ggc_add_tree_root (&gnu_return_label_stack, 1);
|
|
||||||
gnu_except_ptr_stack = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE);
|
gnu_except_ptr_stack = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE);
|
||||||
|
|
||||||
dconstp5 = REAL_VALUE_ATOF ("0.5", DFmode);
|
dconstp5 = REAL_VALUE_ATOF ("0.5", DFmode);
|
||||||
|
@ -2318,7 +2315,7 @@ tree_transform (gnat_node)
|
||||||
{
|
{
|
||||||
tree gnu_loop_id = make_node (GNAT_LOOP_ID);
|
tree gnu_loop_id = make_node (GNAT_LOOP_ID);
|
||||||
|
|
||||||
TREE_LOOP_ID (gnu_loop_id) = (rtx) loop_id;
|
TREE_LOOP_ID (gnu_loop_id) = loop_id;
|
||||||
save_gnu_tree (Entity (Identifier (gnat_node)), gnu_loop_id, 1);
|
save_gnu_tree (Entity (Identifier (gnat_node)), gnu_loop_id, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2407,8 +2404,7 @@ tree_transform (gnat_node)
|
||||||
|
|
||||||
if (Present (Name (gnat_node)))
|
if (Present (Name (gnat_node)))
|
||||||
loop_id
|
loop_id
|
||||||
= (struct nesting *)
|
= TREE_LOOP_ID (get_gnu_tree (Entity (Name (gnat_node))));
|
||||||
TREE_LOOP_ID (get_gnu_tree (Entity (Name (gnat_node))));
|
|
||||||
|
|
||||||
if (Present (Condition (gnat_node)))
|
if (Present (Condition (gnat_node)))
|
||||||
gnu_cond = invert_truthvalue (gnat_truthvalue_conversion
|
gnu_cond = invert_truthvalue (gnat_truthvalue_conversion
|
||||||
|
@ -5589,3 +5585,5 @@ init_code_table ()
|
||||||
gnu_codes[N_Op_Shift_Right] = RSHIFT_EXPR;
|
gnu_codes[N_Op_Shift_Right] = RSHIFT_EXPR;
|
||||||
gnu_codes[N_Op_Shift_Right_Arithmetic] = RSHIFT_EXPR;
|
gnu_codes[N_Op_Shift_Right_Arithmetic] = RSHIFT_EXPR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-ada-trans.h"
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "toplev.h"
|
#include "toplev.h"
|
||||||
#include "output.h"
|
#include "output.h"
|
||||||
#include "ggc.h"
|
#include "ggc.h"
|
||||||
|
#include "debug.h"
|
||||||
#include "convert.h"
|
#include "convert.h"
|
||||||
|
|
||||||
#include "ada.h"
|
#include "ada.h"
|
||||||
|
@ -69,18 +70,22 @@ tree gnat_raise_decls[(int) LAST_REASON_CODE + 1];
|
||||||
/* Associates a GNAT tree node to a GCC tree node. It is used in
|
/* Associates a GNAT tree node to a GCC tree node. It is used in
|
||||||
`save_gnu_tree', `get_gnu_tree' and `present_gnu_tree'. See documentation
|
`save_gnu_tree', `get_gnu_tree' and `present_gnu_tree'. See documentation
|
||||||
of `save_gnu_tree' for more info. */
|
of `save_gnu_tree' for more info. */
|
||||||
static tree *associate_gnat_to_gnu;
|
static GTY((length ("max_gnat_nodes"))) tree *associate_gnat_to_gnu;
|
||||||
|
|
||||||
/* This listhead is used to record any global objects that need elaboration.
|
/* This listhead is used to record any global objects that need elaboration.
|
||||||
TREE_PURPOSE is the variable to be elaborated and TREE_VALUE is the
|
TREE_PURPOSE is the variable to be elaborated and TREE_VALUE is the
|
||||||
initial value to assign. */
|
initial value to assign. */
|
||||||
|
|
||||||
static tree pending_elaborations;
|
static GTY(()) tree pending_elaborations;
|
||||||
|
|
||||||
/* This stack allows us to momentarily switch to generating elaboration
|
/* This stack allows us to momentarily switch to generating elaboration
|
||||||
lists for an inner context. */
|
lists for an inner context. */
|
||||||
|
|
||||||
static struct e_stack {struct e_stack *next; tree elab_list; } *elist_stack;
|
struct e_stack GTY(()) {
|
||||||
|
struct e_stack *next;
|
||||||
|
tree elab_list;
|
||||||
|
};
|
||||||
|
static GTY(()) struct e_stack *elist_stack;
|
||||||
|
|
||||||
/* This variable keeps a table for types for each precision so that we only
|
/* This variable keeps a table for types for each precision so that we only
|
||||||
allocate each of them once. Signed and unsigned types are kept separate.
|
allocate each of them once. Signed and unsigned types are kept separate.
|
||||||
|
@ -88,10 +93,10 @@ static struct e_stack {struct e_stack *next; tree elab_list; } *elist_stack;
|
||||||
Note that these types are only used when fold-const requests something
|
Note that these types are only used when fold-const requests something
|
||||||
special. Perhaps we should NOT share these types; we'll see how it
|
special. Perhaps we should NOT share these types; we'll see how it
|
||||||
goes later. */
|
goes later. */
|
||||||
static tree signed_and_unsigned_types[2 * MAX_BITS_PER_WORD + 1][2];
|
static GTY(()) tree signed_and_unsigned_types[2 * MAX_BITS_PER_WORD + 1][2];
|
||||||
|
|
||||||
/* Likewise for float types, but record these by mode. */
|
/* Likewise for float types, but record these by mode. */
|
||||||
static tree float_types[NUM_MACHINE_MODES];
|
static GTY(()) tree float_types[NUM_MACHINE_MODES];
|
||||||
|
|
||||||
/* For each binding contour we allocate a binding_level structure which records
|
/* For each binding contour we allocate a binding_level structure which records
|
||||||
the entities defined or declared in that contour. Contours include:
|
the entities defined or declared in that contour. Contours include:
|
||||||
|
@ -102,7 +107,7 @@ static tree float_types[NUM_MACHINE_MODES];
|
||||||
|
|
||||||
Binding contours are used to create GCC tree BLOCK nodes. */
|
Binding contours are used to create GCC tree BLOCK nodes. */
|
||||||
|
|
||||||
struct binding_level
|
struct binding_level GTY(())
|
||||||
{
|
{
|
||||||
/* A chain of ..._DECL nodes for all variables, constants, functions,
|
/* A chain of ..._DECL nodes for all variables, constants, functions,
|
||||||
parameters and type declarations. These ..._DECL nodes are chained
|
parameters and type declarations. These ..._DECL nodes are chained
|
||||||
|
@ -121,10 +126,10 @@ struct binding_level
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The binding level currently in effect. */
|
/* The binding level currently in effect. */
|
||||||
static struct binding_level *current_binding_level = NULL;
|
static GTY(()) struct binding_level *current_binding_level;
|
||||||
|
|
||||||
/* A chain of binding_level structures awaiting reuse. */
|
/* A chain of binding_level structures awaiting reuse. */
|
||||||
static struct binding_level *free_binding_level = NULL;
|
static GTY((deletable (""))) struct binding_level *free_binding_level;
|
||||||
|
|
||||||
/* The outermost binding level. This binding level is created when the
|
/* The outermost binding level. This binding level is created when the
|
||||||
compiler is started and it will exist through the entire compilation. */
|
compiler is started and it will exist through the entire compilation. */
|
||||||
|
@ -133,6 +138,11 @@ static struct binding_level *global_binding_level;
|
||||||
/* Binding level structures are initialized by copying this one. */
|
/* Binding level structures are initialized by copying this one. */
|
||||||
static struct binding_level clear_binding_level = {NULL, NULL, NULL, NULL};
|
static struct binding_level clear_binding_level = {NULL, NULL, NULL, NULL};
|
||||||
|
|
||||||
|
struct language_function GTY(())
|
||||||
|
{
|
||||||
|
int unused;
|
||||||
|
};
|
||||||
|
|
||||||
static tree merge_sizes PARAMS ((tree, tree, tree, int, int));
|
static tree merge_sizes PARAMS ((tree, tree, tree, int, int));
|
||||||
static tree compute_related_constant PARAMS ((tree, tree));
|
static tree compute_related_constant PARAMS ((tree, tree));
|
||||||
static tree split_plus PARAMS ((tree, tree *));
|
static tree split_plus PARAMS ((tree, tree *));
|
||||||
|
@ -142,8 +152,6 @@ static tree convert_to_fat_pointer PARAMS ((tree, tree));
|
||||||
static tree convert_to_thin_pointer PARAMS ((tree, tree));
|
static tree convert_to_thin_pointer PARAMS ((tree, tree));
|
||||||
static tree make_descriptor_field PARAMS ((const char *,tree, tree,
|
static tree make_descriptor_field PARAMS ((const char *,tree, tree,
|
||||||
tree));
|
tree));
|
||||||
static void mark_binding_level PARAMS ((PTR));
|
|
||||||
static void mark_e_stack PARAMS ((PTR));
|
|
||||||
|
|
||||||
/* Initialize the association of GNAT nodes to GCC trees. */
|
/* Initialize the association of GNAT nodes to GCC trees. */
|
||||||
|
|
||||||
|
@ -152,22 +160,12 @@ init_gnat_to_gnu ()
|
||||||
{
|
{
|
||||||
Node_Id gnat_node;
|
Node_Id gnat_node;
|
||||||
|
|
||||||
associate_gnat_to_gnu = (tree *) xmalloc (max_gnat_nodes * sizeof (tree));
|
associate_gnat_to_gnu = (tree *) ggc_alloc (max_gnat_nodes * sizeof (tree));
|
||||||
ggc_add_tree_root (associate_gnat_to_gnu, max_gnat_nodes);
|
|
||||||
|
|
||||||
for (gnat_node = 0; gnat_node < max_gnat_nodes; gnat_node++)
|
for (gnat_node = 0; gnat_node < max_gnat_nodes; gnat_node++)
|
||||||
associate_gnat_to_gnu[gnat_node] = NULL_TREE;
|
associate_gnat_to_gnu[gnat_node] = NULL_TREE;
|
||||||
|
|
||||||
pending_elaborations = build_tree_list (NULL_TREE, NULL_TREE);
|
pending_elaborations = build_tree_list (NULL_TREE, NULL_TREE);
|
||||||
ggc_add_tree_root (&pending_elaborations, 1);
|
|
||||||
ggc_add_root ((PTR) &elist_stack, 1, sizeof (struct e_stack), mark_e_stack);
|
|
||||||
ggc_add_tree_root (&signed_and_unsigned_types[0][0],
|
|
||||||
(sizeof signed_and_unsigned_types
|
|
||||||
/ sizeof signed_and_unsigned_types[0][0]));
|
|
||||||
ggc_add_tree_root (float_types, ARRAY_SIZE (float_types));
|
|
||||||
|
|
||||||
ggc_add_root (¤t_binding_level, 1, sizeof current_binding_level,
|
|
||||||
mark_binding_level);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* GNAT_ENTITY is a GNAT tree node for an entity. GNU_DECL is the GCC tree
|
/* GNAT_ENTITY is a GNAT tree node for an entity. GNU_DECL is the GCC tree
|
||||||
|
@ -260,7 +258,7 @@ pushlevel (ignore)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
newlevel
|
newlevel
|
||||||
= (struct binding_level *) xmalloc (sizeof (struct binding_level));
|
= (struct binding_level *) ggc_alloc (sizeof (struct binding_level));
|
||||||
|
|
||||||
*newlevel = clear_binding_level;
|
*newlevel = clear_binding_level;
|
||||||
|
|
||||||
|
@ -680,9 +678,6 @@ init_gigi_decls (long_long_float_type, exception_type)
|
||||||
DECL_FUNCTION_CODE (setjmp_decl) = BUILT_IN_SETJMP;
|
DECL_FUNCTION_CODE (setjmp_decl) = BUILT_IN_SETJMP;
|
||||||
|
|
||||||
main_identifier_node = get_identifier ("main");
|
main_identifier_node = get_identifier ("main");
|
||||||
|
|
||||||
ggc_add_tree_root (gnat_std_decls, ARRAY_SIZE (gnat_std_decls));
|
|
||||||
ggc_add_tree_root (gnat_raise_decls, ARRAY_SIZE (gnat_raise_decls));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function is called indirectly from toplev.c to handle incomplete
|
/* This function is called indirectly from toplev.c to handle incomplete
|
||||||
|
@ -849,7 +844,7 @@ finish_record_type (record_type, fieldlist, has_rep, defer_debug)
|
||||||
/* Now set any of the values we've just computed that apply. */
|
/* Now set any of the values we've just computed that apply. */
|
||||||
if (! TYPE_IS_FAT_POINTER_P (record_type)
|
if (! TYPE_IS_FAT_POINTER_P (record_type)
|
||||||
&& ! TYPE_CONTAINS_TEMPLATE_P (record_type))
|
&& ! TYPE_CONTAINS_TEMPLATE_P (record_type))
|
||||||
TYPE_ADA_SIZE (record_type) = ada_size;
|
SET_TYPE_ADA_SIZE (record_type, ada_size);
|
||||||
|
|
||||||
#ifdef ROUND_TYPE_SIZE
|
#ifdef ROUND_TYPE_SIZE
|
||||||
size = ROUND_TYPE_SIZE (record_type, size, TYPE_ALIGN (record_type));
|
size = ROUND_TYPE_SIZE (record_type, size, TYPE_ALIGN (record_type));
|
||||||
|
@ -1159,7 +1154,7 @@ create_subprog_type (return_type, param_decl_list, cico_list,
|
||||||
|| TYPE_RETURNS_BY_REF_P (type) != returns_by_ref)
|
|| TYPE_RETURNS_BY_REF_P (type) != returns_by_ref)
|
||||||
type = copy_type (type);
|
type = copy_type (type);
|
||||||
|
|
||||||
TYPE_CI_CO_LIST (type) = cico_list;
|
SET_TYPE_CI_CO_LIST (type, cico_list);
|
||||||
TYPE_RETURNS_UNCONSTRAINED_P (type) = returns_unconstrained;
|
TYPE_RETURNS_UNCONSTRAINED_P (type) = returns_unconstrained;
|
||||||
TYPE_RETURNS_STACK_DEPRESSED (type) = returns_with_dsp;
|
TYPE_RETURNS_STACK_DEPRESSED (type) = returns_with_dsp;
|
||||||
TYPE_RETURNS_BY_REF_P (type) = returns_by_ref;
|
TYPE_RETURNS_BY_REF_P (type) = returns_by_ref;
|
||||||
|
@ -1207,7 +1202,7 @@ create_index_type (min, max, index)
|
||||||
else if (TYPE_INDEX_TYPE (type) != 0)
|
else if (TYPE_INDEX_TYPE (type) != 0)
|
||||||
type = copy_type (type);
|
type = copy_type (type);
|
||||||
|
|
||||||
TYPE_INDEX_TYPE (type) = index;
|
SET_TYPE_INDEX_TYPE (type, index);
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1598,37 +1593,6 @@ get_pending_elaborations ()
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark the binding level stack. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
mark_binding_level (arg)
|
|
||||||
PTR arg;
|
|
||||||
{
|
|
||||||
struct binding_level *level = *(struct binding_level **) arg;
|
|
||||||
|
|
||||||
for (; level != 0; level = level->level_chain)
|
|
||||||
{
|
|
||||||
ggc_mark_tree (level->names);
|
|
||||||
ggc_mark_tree (level->blocks);
|
|
||||||
ggc_mark_tree (level->this_block);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Mark the pending elaboration list. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
mark_e_stack (data)
|
|
||||||
PTR data;
|
|
||||||
{
|
|
||||||
struct e_stack *p = *((struct e_stack **) data);
|
|
||||||
|
|
||||||
if (p != 0)
|
|
||||||
{
|
|
||||||
ggc_mark_tree (p->elab_list);
|
|
||||||
mark_e_stack (&p->next);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return nonzero if there are pending elaborations. */
|
/* Return nonzero if there are pending elaborations. */
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -1643,7 +1607,7 @@ pending_elaborations_p ()
|
||||||
void
|
void
|
||||||
push_pending_elaborations ()
|
push_pending_elaborations ()
|
||||||
{
|
{
|
||||||
struct e_stack *p = (struct e_stack *) xmalloc (sizeof (struct e_stack));
|
struct e_stack *p = (struct e_stack *) ggc_alloc (sizeof (struct e_stack));
|
||||||
|
|
||||||
p->next = elist_stack;
|
p->next = elist_stack;
|
||||||
p->elab_list = pending_elaborations;
|
p->elab_list = pending_elaborations;
|
||||||
|
@ -1660,7 +1624,6 @@ pop_pending_elaborations ()
|
||||||
|
|
||||||
pending_elaborations = p->elab_list;
|
pending_elaborations = p->elab_list;
|
||||||
elist_stack = p->next;
|
elist_stack = p->next;
|
||||||
free (p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the current position in pending_elaborations so we can insert
|
/* Return the current position in pending_elaborations so we can insert
|
||||||
|
@ -2666,7 +2629,7 @@ update_pointer_to (old_type, new_type)
|
||||||
TREE_CHAIN (TYPE_FIELDS (ptr)), new_ref));
|
TREE_CHAIN (TYPE_FIELDS (ptr)), new_ref));
|
||||||
|
|
||||||
for (var = TYPE_MAIN_VARIANT (ptr); var; var = TYPE_NEXT_VARIANT (var))
|
for (var = TYPE_MAIN_VARIANT (ptr); var; var = TYPE_NEXT_VARIANT (var))
|
||||||
TYPE_UNCONSTRAINED_ARRAY (var) = new_type;
|
SET_TYPE_UNCONSTRAINED_ARRAY (var, new_type);
|
||||||
|
|
||||||
TYPE_POINTER_TO (new_type) = TYPE_REFERENCE_TO (new_type)
|
TYPE_POINTER_TO (new_type) = TYPE_REFERENCE_TO (new_type)
|
||||||
= TREE_TYPE (new_type) = ptr;
|
= TREE_TYPE (new_type) = ptr;
|
||||||
|
@ -3366,3 +3329,6 @@ unchecked_convert (type, expr)
|
||||||
|
|
||||||
return expr;
|
return expr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-ada-utils.h"
|
||||||
|
#include "gtype-ada.h"
|
||||||
|
|
|
@ -514,7 +514,7 @@ nonbinary_modular_operation (op_code, type, lhs, rhs)
|
||||||
/* Copy the node so we ensure it can be modified to make it modular. */
|
/* Copy the node so we ensure it can be modified to make it modular. */
|
||||||
op_type = copy_node (gnat_type_for_size (precision, unsignedp));
|
op_type = copy_node (gnat_type_for_size (precision, unsignedp));
|
||||||
modulus = convert (op_type, modulus);
|
modulus = convert (op_type, modulus);
|
||||||
TYPE_MODULUS (op_type) = modulus;
|
SET_TYPE_MODULUS (op_type, modulus);
|
||||||
TYPE_MODULAR_P (op_type) = 1;
|
TYPE_MODULAR_P (op_type) = 1;
|
||||||
lhs = convert (op_type, lhs);
|
lhs = convert (op_type, lhs);
|
||||||
rhs = convert (op_type, rhs);
|
rhs = convert (op_type, rhs);
|
||||||
|
@ -530,7 +530,7 @@ nonbinary_modular_operation (op_code, type, lhs, rhs)
|
||||||
{
|
{
|
||||||
tree div_type = copy_node (gnat_type_for_size (needed_precision, 1));
|
tree div_type = copy_node (gnat_type_for_size (needed_precision, 1));
|
||||||
modulus = convert (div_type, modulus);
|
modulus = convert (div_type, modulus);
|
||||||
TYPE_MODULUS (div_type) = modulus;
|
SET_TYPE_MODULUS (div_type, modulus);
|
||||||
TYPE_MODULAR_P (div_type) = 1;
|
TYPE_MODULAR_P (div_type) = 1;
|
||||||
result = convert (op_type,
|
result = convert (op_type,
|
||||||
fold (build (TRUNC_MOD_EXPR, div_type,
|
fold (build (TRUNC_MOD_EXPR, div_type,
|
||||||
|
|
13
gcc/alias.c
13
gcc/alias.c
|
@ -152,7 +152,7 @@ static int nonlocal_set_p PARAMS ((rtx));
|
||||||
current function performs nonlocal memory memory references for the
|
current function performs nonlocal memory memory references for the
|
||||||
purposes of marking the function as a constant function. */
|
purposes of marking the function as a constant function. */
|
||||||
|
|
||||||
static rtx *reg_base_value;
|
static GTY((length ("reg_base_value_size"))) rtx *reg_base_value;
|
||||||
static rtx *new_reg_base_value;
|
static rtx *new_reg_base_value;
|
||||||
static unsigned int reg_base_value_size; /* size of reg_base_value array */
|
static unsigned int reg_base_value_size; /* size of reg_base_value array */
|
||||||
|
|
||||||
|
@ -2663,8 +2663,8 @@ init_alias_analysis ()
|
||||||
optimization. Loop unrolling can create a large number of
|
optimization. Loop unrolling can create a large number of
|
||||||
registers. */
|
registers. */
|
||||||
reg_base_value_size = maxreg * 2;
|
reg_base_value_size = maxreg * 2;
|
||||||
reg_base_value = (rtx *) xcalloc (reg_base_value_size, sizeof (rtx));
|
reg_base_value = (rtx *) ggc_alloc_cleared (reg_base_value_size
|
||||||
ggc_add_rtx_root (reg_base_value, reg_base_value_size);
|
* sizeof (rtx));
|
||||||
|
|
||||||
new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
|
new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
|
||||||
reg_seen = (char *) xmalloc (reg_base_value_size);
|
reg_seen = (char *) xmalloc (reg_base_value_size);
|
||||||
|
@ -2878,12 +2878,7 @@ end_alias_analysis ()
|
||||||
reg_known_value_size = 0;
|
reg_known_value_size = 0;
|
||||||
free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
|
free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
|
||||||
reg_known_equiv_p = 0;
|
reg_known_equiv_p = 0;
|
||||||
if (reg_base_value)
|
|
||||||
{
|
|
||||||
ggc_del_root (reg_base_value);
|
|
||||||
free (reg_base_value);
|
|
||||||
reg_base_value = 0;
|
reg_base_value = 0;
|
||||||
}
|
|
||||||
reg_base_value_size = 0;
|
reg_base_value_size = 0;
|
||||||
if (alias_invariant)
|
if (alias_invariant)
|
||||||
{
|
{
|
||||||
|
@ -2891,3 +2886,5 @@ end_alias_analysis ()
|
||||||
alias_invariant = 0;
|
alias_invariant = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-alias.h"
|
||||||
|
|
|
@ -33,7 +33,7 @@ typedef bitmap_head regset_head;
|
||||||
typedef bitmap regset;
|
typedef bitmap regset;
|
||||||
|
|
||||||
/* Initialize a new regset. */
|
/* Initialize a new regset. */
|
||||||
#define INIT_REG_SET(HEAD) bitmap_initialize (HEAD)
|
#define INIT_REG_SET(HEAD) bitmap_initialize (HEAD, 1)
|
||||||
|
|
||||||
/* Clear a register set by freeing up the linked list. */
|
/* Clear a register set by freeing up the linked list. */
|
||||||
#define CLEAR_REG_SET(HEAD) bitmap_clear (HEAD)
|
#define CLEAR_REG_SET(HEAD) bitmap_clear (HEAD)
|
||||||
|
@ -99,7 +99,7 @@ do { \
|
||||||
#define OBSTACK_ALLOC_REG_SET(OBSTACK) BITMAP_OBSTACK_ALLOC (OBSTACK)
|
#define OBSTACK_ALLOC_REG_SET(OBSTACK) BITMAP_OBSTACK_ALLOC (OBSTACK)
|
||||||
|
|
||||||
/* Initialize a register set. Returns the new register set. */
|
/* Initialize a register set. Returns the new register set. */
|
||||||
#define INITIALIZE_REG_SET(HEAD) bitmap_initialize (&HEAD)
|
#define INITIALIZE_REG_SET(HEAD) bitmap_initialize (&HEAD, 1)
|
||||||
|
|
||||||
/* Do any cleanup needed on a regset when it is no longer used. */
|
/* Do any cleanup needed on a regset when it is no longer used. */
|
||||||
#define FREE_REG_SET(REGSET) BITMAP_FREE(REGSET)
|
#define FREE_REG_SET(REGSET) BITMAP_FREE(REGSET)
|
||||||
|
|
75
gcc/bitmap.c
75
gcc/bitmap.c
|
@ -23,6 +23,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
#include "rtl.h"
|
#include "rtl.h"
|
||||||
#include "flags.h"
|
#include "flags.h"
|
||||||
#include "obstack.h"
|
#include "obstack.h"
|
||||||
|
#include "ggc.h"
|
||||||
#include "bitmap.h"
|
#include "bitmap.h"
|
||||||
|
|
||||||
/* Obstack to allocate bitmap elements from. */
|
/* Obstack to allocate bitmap elements from. */
|
||||||
|
@ -40,13 +41,33 @@ static int bitmap_obstack_init = FALSE;
|
||||||
/* Global data */
|
/* Global data */
|
||||||
bitmap_element bitmap_zero_bits; /* An element of all zero bits. */
|
bitmap_element bitmap_zero_bits; /* An element of all zero bits. */
|
||||||
static bitmap_element *bitmap_free; /* Freelist of bitmap elements. */
|
static bitmap_element *bitmap_free; /* Freelist of bitmap elements. */
|
||||||
|
static GTY((deletable (""))) bitmap_element *bitmap_ggc_free;
|
||||||
|
|
||||||
|
static void bitmap_elem_to_freelist PARAMS ((bitmap, bitmap_element *));
|
||||||
static void bitmap_element_free PARAMS ((bitmap, bitmap_element *));
|
static void bitmap_element_free PARAMS ((bitmap, bitmap_element *));
|
||||||
static bitmap_element *bitmap_element_allocate PARAMS ((void));
|
static bitmap_element *bitmap_element_allocate PARAMS ((bitmap));
|
||||||
static int bitmap_element_zerop PARAMS ((bitmap_element *));
|
static int bitmap_element_zerop PARAMS ((bitmap_element *));
|
||||||
static void bitmap_element_link PARAMS ((bitmap, bitmap_element *));
|
static void bitmap_element_link PARAMS ((bitmap, bitmap_element *));
|
||||||
static bitmap_element *bitmap_find_bit PARAMS ((bitmap, unsigned int));
|
static bitmap_element *bitmap_find_bit PARAMS ((bitmap, unsigned int));
|
||||||
|
|
||||||
|
/* Add ELEM to the appropriate freelist. */
|
||||||
|
static INLINE void
|
||||||
|
bitmap_elem_to_freelist (head, elt)
|
||||||
|
bitmap head;
|
||||||
|
bitmap_element *elt;
|
||||||
|
{
|
||||||
|
if (head->using_obstack)
|
||||||
|
{
|
||||||
|
elt->next = bitmap_free;
|
||||||
|
bitmap_free = elt;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
elt->next = bitmap_ggc_free;
|
||||||
|
bitmap_ggc_free = elt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Free a bitmap element. Since these are allocated off the
|
/* Free a bitmap element. Since these are allocated off the
|
||||||
bitmap_obstack, "free" actually means "put onto the freelist". */
|
bitmap_obstack, "free" actually means "put onto the freelist". */
|
||||||
|
|
||||||
|
@ -75,18 +96,19 @@ bitmap_element_free (head, elt)
|
||||||
if (head->current)
|
if (head->current)
|
||||||
head->indx = head->current->indx;
|
head->indx = head->current->indx;
|
||||||
}
|
}
|
||||||
|
bitmap_elem_to_freelist (head, elt);
|
||||||
elt->next = bitmap_free;
|
|
||||||
bitmap_free = elt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate a bitmap element. The bits are cleared, but nothing else is. */
|
/* Allocate a bitmap element. The bits are cleared, but nothing else is. */
|
||||||
|
|
||||||
static INLINE bitmap_element *
|
static INLINE bitmap_element *
|
||||||
bitmap_element_allocate ()
|
bitmap_element_allocate (head)
|
||||||
|
bitmap head;
|
||||||
{
|
{
|
||||||
bitmap_element *element;
|
bitmap_element *element;
|
||||||
|
|
||||||
|
if (head->using_obstack)
|
||||||
|
{
|
||||||
if (bitmap_free != 0)
|
if (bitmap_free != 0)
|
||||||
{
|
{
|
||||||
element = bitmap_free;
|
element = bitmap_free;
|
||||||
|
@ -126,6 +148,17 @@ bitmap_element_allocate ()
|
||||||
element = (bitmap_element *) obstack_alloc (&bitmap_obstack,
|
element = (bitmap_element *) obstack_alloc (&bitmap_obstack,
|
||||||
sizeof (bitmap_element));
|
sizeof (bitmap_element));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (bitmap_ggc_free != NULL)
|
||||||
|
{
|
||||||
|
element = bitmap_ggc_free;
|
||||||
|
bitmap_ggc_free = element->next;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
element = ggc_alloc (sizeof (bitmap_element));
|
||||||
|
}
|
||||||
|
|
||||||
memset (element->bits, 0, sizeof (element->bits));
|
memset (element->bits, 0, sizeof (element->bits));
|
||||||
|
|
||||||
|
@ -232,8 +265,7 @@ bitmap_clear (head)
|
||||||
for (element = head->first; element != 0; element = next)
|
for (element = head->first; element != 0; element = next)
|
||||||
{
|
{
|
||||||
next = element->next;
|
next = element->next;
|
||||||
element->next = bitmap_free;
|
bitmap_elem_to_freelist (head, element);
|
||||||
bitmap_free = element;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
head->first = head->current = 0;
|
head->first = head->current = 0;
|
||||||
|
@ -256,7 +288,7 @@ bitmap_copy (to, from)
|
||||||
/* Copy elements in forward direction one at a time */
|
/* Copy elements in forward direction one at a time */
|
||||||
for (from_ptr = from->first; from_ptr; from_ptr = from_ptr->next)
|
for (from_ptr = from->first; from_ptr; from_ptr = from_ptr->next)
|
||||||
{
|
{
|
||||||
bitmap_element *to_elt = bitmap_element_allocate ();
|
bitmap_element *to_elt = bitmap_element_allocate (to);
|
||||||
|
|
||||||
to_elt->indx = from_ptr->indx;
|
to_elt->indx = from_ptr->indx;
|
||||||
|
|
||||||
|
@ -363,7 +395,7 @@ bitmap_set_bit (head, bit)
|
||||||
|
|
||||||
if (ptr == 0)
|
if (ptr == 0)
|
||||||
{
|
{
|
||||||
ptr = bitmap_element_allocate ();
|
ptr = bitmap_element_allocate (head);
|
||||||
ptr->indx = bit / BITMAP_ELEMENT_ALL_BITS;
|
ptr->indx = bit / BITMAP_ELEMENT_ALL_BITS;
|
||||||
ptr->bits[word_num] = bit_val;
|
ptr->bits[word_num] = bit_val;
|
||||||
bitmap_element_link (head, ptr);
|
bitmap_element_link (head, ptr);
|
||||||
|
@ -594,8 +626,7 @@ bitmap_operation (to, from1, from2, operation)
|
||||||
changed = 1;
|
changed = 1;
|
||||||
to_tmp = to_ptr;
|
to_tmp = to_ptr;
|
||||||
to_ptr = to_ptr->next;
|
to_ptr = to_ptr->next;
|
||||||
to_tmp->next = bitmap_free;
|
bitmap_elem_to_freelist (to, to_tmp);
|
||||||
bitmap_free = to_tmp;
|
|
||||||
}
|
}
|
||||||
if (to_ptr && to_ptr->indx == indx)
|
if (to_ptr && to_ptr->indx == indx)
|
||||||
{
|
{
|
||||||
|
@ -603,7 +634,7 @@ bitmap_operation (to, from1, from2, operation)
|
||||||
to_ptr = to_ptr->next;
|
to_ptr = to_ptr->next;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
to_tmp = bitmap_element_allocate ();
|
to_tmp = bitmap_element_allocate (to);
|
||||||
|
|
||||||
/* Do the operation, and if any bits are set, link it into the
|
/* Do the operation, and if any bits are set, link it into the
|
||||||
linked list. */
|
linked list. */
|
||||||
|
@ -638,8 +669,7 @@ bitmap_operation (to, from1, from2, operation)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
to_tmp->next = bitmap_free;
|
bitmap_elem_to_freelist (to, to_tmp);
|
||||||
bitmap_free = to_tmp;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -649,9 +679,17 @@ bitmap_operation (to, from1, from2, operation)
|
||||||
changed = 1;
|
changed = 1;
|
||||||
for (to_tmp = to_ptr; to_tmp->next ; to_tmp = to_tmp->next)
|
for (to_tmp = to_ptr; to_tmp->next ; to_tmp = to_tmp->next)
|
||||||
continue;
|
continue;
|
||||||
|
if (to->using_obstack)
|
||||||
|
{
|
||||||
to_tmp->next = bitmap_free;
|
to_tmp->next = bitmap_free;
|
||||||
bitmap_free = to_ptr;
|
bitmap_free = to_ptr;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
to_tmp->next = bitmap_ggc_free;
|
||||||
|
bitmap_ggc_free = to_ptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#undef DOIT
|
#undef DOIT
|
||||||
|
|
||||||
|
@ -715,10 +753,15 @@ bitmap_union_of_diff (dst, a, b, c)
|
||||||
/* Initialize a bitmap header. */
|
/* Initialize a bitmap header. */
|
||||||
|
|
||||||
bitmap
|
bitmap
|
||||||
bitmap_initialize (head)
|
bitmap_initialize (head, using_obstack)
|
||||||
bitmap head;
|
bitmap head;
|
||||||
|
int using_obstack;
|
||||||
{
|
{
|
||||||
|
if (head == NULL && ! using_obstack)
|
||||||
|
head = ggc_alloc (sizeof (*head));
|
||||||
|
|
||||||
head->first = head->current = 0;
|
head->first = head->current = 0;
|
||||||
|
head->using_obstack = using_obstack;
|
||||||
|
|
||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
@ -800,3 +843,5 @@ bitmap_print (file, head, prefix, suffix)
|
||||||
});
|
});
|
||||||
fputs (suffix, file);
|
fputs (suffix, file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-bitmap.h"
|
||||||
|
|
35
gcc/bitmap.h
35
gcc/bitmap.h
|
@ -40,7 +40,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
having to realloc and copy a giant bit array. The `prev' field is
|
having to realloc and copy a giant bit array. The `prev' field is
|
||||||
undefined for an element on the free list. */
|
undefined for an element on the free list. */
|
||||||
|
|
||||||
typedef struct bitmap_element_def
|
typedef struct bitmap_element_def GTY(())
|
||||||
{
|
{
|
||||||
struct bitmap_element_def *next; /* Next element. */
|
struct bitmap_element_def *next; /* Next element. */
|
||||||
struct bitmap_element_def *prev; /* Previous element. */
|
struct bitmap_element_def *prev; /* Previous element. */
|
||||||
|
@ -49,12 +49,14 @@ typedef struct bitmap_element_def
|
||||||
} bitmap_element;
|
} bitmap_element;
|
||||||
|
|
||||||
/* Head of bitmap linked list. */
|
/* Head of bitmap linked list. */
|
||||||
typedef struct bitmap_head_def {
|
typedef struct bitmap_head_def GTY(()) {
|
||||||
bitmap_element *first; /* First element in linked list. */
|
bitmap_element *first; /* First element in linked list. */
|
||||||
bitmap_element *current; /* Last element looked at. */
|
bitmap_element *current; /* Last element looked at. */
|
||||||
unsigned int indx; /* Index of last element looked at. */
|
unsigned int indx; /* Index of last element looked at. */
|
||||||
|
int using_obstack; /* Are we using an obstack or ggc for
|
||||||
} bitmap_head, *bitmap;
|
allocation? */
|
||||||
|
} bitmap_head;
|
||||||
|
typedef struct bitmap_head_def *bitmap;
|
||||||
|
|
||||||
/* Enumeration giving the various operations we support. */
|
/* Enumeration giving the various operations we support. */
|
||||||
enum bitmap_bits {
|
enum bitmap_bits {
|
||||||
|
@ -100,10 +102,12 @@ extern void debug_bitmap_file PARAMS ((FILE *, bitmap));
|
||||||
/* Print a bitmap */
|
/* Print a bitmap */
|
||||||
extern void bitmap_print PARAMS ((FILE *, bitmap, const char *, const char *));
|
extern void bitmap_print PARAMS ((FILE *, bitmap, const char *, const char *));
|
||||||
|
|
||||||
/* Initialize a bitmap header. */
|
/* Initialize a bitmap header. If HEAD is NULL, a new header will be
|
||||||
extern bitmap bitmap_initialize PARAMS ((bitmap));
|
allocated. USING_OBSTACK indicates how elements should be allocated. */
|
||||||
|
extern bitmap bitmap_initialize PARAMS ((bitmap head,
|
||||||
|
int using_obstack));
|
||||||
|
|
||||||
/* Release all memory held by bitmaps. */
|
/* Release all memory used by the bitmap obstack. */
|
||||||
extern void bitmap_release_memory PARAMS ((void));
|
extern void bitmap_release_memory PARAMS ((void));
|
||||||
|
|
||||||
/* A few compatibility/functions macros for compatibility with sbitmaps */
|
/* A few compatibility/functions macros for compatibility with sbitmaps */
|
||||||
|
@ -117,22 +121,15 @@ extern int bitmap_last_set_bit PARAMS((bitmap));
|
||||||
|
|
||||||
/* Allocate a bitmap with oballoc. */
|
/* Allocate a bitmap with oballoc. */
|
||||||
#define BITMAP_OBSTACK_ALLOC(OBSTACK) \
|
#define BITMAP_OBSTACK_ALLOC(OBSTACK) \
|
||||||
bitmap_initialize ((bitmap) obstack_alloc (OBSTACK, sizeof (bitmap_head)))
|
bitmap_initialize ((bitmap) obstack_alloc (OBSTACK, sizeof (bitmap_head)), 1)
|
||||||
|
|
||||||
/* Allocate a bitmap with alloca. Note alloca cannot be passed as an
|
/* Allocate a bitmap with ggc_alloc. */
|
||||||
argument to a function, so we set a temporary variable to the value
|
#define BITMAP_GGC_ALLOC() \
|
||||||
returned by alloca and pass that variable to bitmap_initialize().
|
bitmap_initialize (NULL, 0)
|
||||||
PTR is then set to the value returned from bitmap_initialize() to
|
|
||||||
avoid having it appear more than once in case it has side effects. */
|
|
||||||
#define BITMAP_ALLOCA(PTR) \
|
|
||||||
do { \
|
|
||||||
bitmap temp_bitmap_ = (bitmap) alloca (sizeof (bitmap_head)); \
|
|
||||||
(PTR) = bitmap_initialize (temp_bitmap_); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
/* Allocate a bitmap with xmalloc. */
|
/* Allocate a bitmap with xmalloc. */
|
||||||
#define BITMAP_XMALLOC() \
|
#define BITMAP_XMALLOC() \
|
||||||
bitmap_initialize ((bitmap) xmalloc (sizeof (bitmap_head)))
|
bitmap_initialize ((bitmap) xmalloc (sizeof (bitmap_head)), 1)
|
||||||
|
|
||||||
/* Do any cleanup needed on a bitmap when it is no longer used. */
|
/* Do any cleanup needed on a bitmap when it is no longer used. */
|
||||||
#define BITMAP_FREE(BITMAP) \
|
#define BITMAP_FREE(BITMAP) \
|
||||||
|
|
|
@ -3750,41 +3750,6 @@ finish_label_address_expr (label)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark P (a stmt_tree) for GC. The use of a `void *' for the
|
|
||||||
parameter allows this function to be used as a GC-marking
|
|
||||||
function. */
|
|
||||||
|
|
||||||
void
|
|
||||||
mark_stmt_tree (p)
|
|
||||||
void *p;
|
|
||||||
{
|
|
||||||
stmt_tree st = (stmt_tree) p;
|
|
||||||
|
|
||||||
ggc_mark_tree (st->x_last_stmt);
|
|
||||||
ggc_mark_tree (st->x_last_expr_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Mark LD for GC. */
|
|
||||||
|
|
||||||
void
|
|
||||||
c_mark_lang_decl (c)
|
|
||||||
struct c_lang_decl *c ATTRIBUTE_UNUSED;
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Mark F for GC. */
|
|
||||||
|
|
||||||
void
|
|
||||||
mark_c_language_function (f)
|
|
||||||
struct language_function *f;
|
|
||||||
{
|
|
||||||
if (!f)
|
|
||||||
return;
|
|
||||||
|
|
||||||
mark_stmt_tree (&f->x_stmt_tree);
|
|
||||||
ggc_mark_tree (f->x_scope_stmt_stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Hook used by expand_expr to expand language-specific tree codes. */
|
/* Hook used by expand_expr to expand language-specific tree codes. */
|
||||||
|
|
||||||
rtx
|
rtx
|
||||||
|
@ -4288,7 +4253,7 @@ enum built_in_attribute
|
||||||
ATTR_LAST
|
ATTR_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
static tree built_in_attributes[(int) ATTR_LAST];
|
static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
|
||||||
|
|
||||||
static bool c_attrs_initialized = false;
|
static bool c_attrs_initialized = false;
|
||||||
|
|
||||||
|
@ -4570,7 +4535,6 @@ c_init_attributes ()
|
||||||
#undef DEF_ATTR_IDENT
|
#undef DEF_ATTR_IDENT
|
||||||
#undef DEF_ATTR_TREE_LIST
|
#undef DEF_ATTR_TREE_LIST
|
||||||
#undef DEF_FN_ATTR
|
#undef DEF_FN_ATTR
|
||||||
ggc_add_tree_root (built_in_attributes, (int) ATTR_LAST);
|
|
||||||
c_attrs_initialized = true;
|
c_attrs_initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5938,3 +5902,5 @@ check_function_arguments_recurse (callback, ctx, param, param_num)
|
||||||
|
|
||||||
(*callback) (ctx, param, param_num);
|
(*callback) (ctx, param, param_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-c-common.h"
|
||||||
|
|
|
@ -183,10 +183,10 @@ enum c_tree_index
|
||||||
|
|
||||||
/* Identifier part common to the C front ends. Inherits from
|
/* Identifier part common to the C front ends. Inherits from
|
||||||
tree_identifier, despite appearances. */
|
tree_identifier, despite appearances. */
|
||||||
struct c_common_identifier
|
struct c_common_identifier GTY(())
|
||||||
{
|
{
|
||||||
struct tree_common common;
|
struct tree_common common;
|
||||||
struct cpp_hashnode node;
|
struct cpp_hashnode GTY ((skip (""))) node;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define wchar_type_node c_global_trees[CTI_WCHAR_TYPE]
|
#define wchar_type_node c_global_trees[CTI_WCHAR_TYPE]
|
||||||
|
@ -231,7 +231,7 @@ struct c_common_identifier
|
||||||
/* A node for `((void) 0)'. */
|
/* A node for `((void) 0)'. */
|
||||||
#define void_zero_node c_global_trees[CTI_VOID_ZERO]
|
#define void_zero_node c_global_trees[CTI_VOID_ZERO]
|
||||||
|
|
||||||
extern tree c_global_trees[CTI_MAX];
|
extern GTY(()) tree c_global_trees[CTI_MAX];
|
||||||
|
|
||||||
/* Mark which labels are explicitly declared.
|
/* Mark which labels are explicitly declared.
|
||||||
These may be shadowed, and may be referenced from nested functions. */
|
These may be shadowed, and may be referenced from nested functions. */
|
||||||
|
@ -252,7 +252,7 @@ c_language_kind;
|
||||||
|
|
||||||
/* Information about a statement tree. */
|
/* Information about a statement tree. */
|
||||||
|
|
||||||
struct stmt_tree_s {
|
struct stmt_tree_s GTY(()) {
|
||||||
/* The last statement added to the tree. */
|
/* The last statement added to the tree. */
|
||||||
tree x_last_stmt;
|
tree x_last_stmt;
|
||||||
/* The type of the last expression statement. (This information is
|
/* The type of the last expression statement. (This information is
|
||||||
|
@ -282,7 +282,7 @@ typedef struct stmt_tree_s *stmt_tree;
|
||||||
/* Global state pertinent to the current function. Some C dialects
|
/* Global state pertinent to the current function. Some C dialects
|
||||||
extend this structure with additional fields. */
|
extend this structure with additional fields. */
|
||||||
|
|
||||||
struct language_function {
|
struct c_language_function GTY(()) {
|
||||||
/* While we are parsing the function, this contains information
|
/* While we are parsing the function, this contains information
|
||||||
about the statement-tree that we are building. */
|
about the statement-tree that we are building. */
|
||||||
struct stmt_tree_s x_stmt_tree;
|
struct stmt_tree_s x_stmt_tree;
|
||||||
|
@ -344,7 +344,6 @@ extern tree walk_stmt_tree PARAMS ((tree *,
|
||||||
void *));
|
void *));
|
||||||
extern void prep_stmt PARAMS ((tree));
|
extern void prep_stmt PARAMS ((tree));
|
||||||
extern void expand_stmt PARAMS ((tree));
|
extern void expand_stmt PARAMS ((tree));
|
||||||
extern void mark_stmt_tree PARAMS ((void *));
|
|
||||||
extern void shadow_warning PARAMS ((const char *,
|
extern void shadow_warning PARAMS ((const char *,
|
||||||
tree, tree));
|
tree, tree));
|
||||||
extern tree c_begin_if_stmt PARAMS ((void));
|
extern tree c_begin_if_stmt PARAMS ((void));
|
||||||
|
@ -357,7 +356,7 @@ extern void c_finish_while_stmt_cond PARAMS ((tree, tree));
|
||||||
structure for FUNCTION_DECLs; all other DECLs have a NULL
|
structure for FUNCTION_DECLs; all other DECLs have a NULL
|
||||||
DECL_LANG_SPECIFIC field. */
|
DECL_LANG_SPECIFIC field. */
|
||||||
|
|
||||||
struct c_lang_decl {
|
struct c_lang_decl GTY(()) {
|
||||||
unsigned declared_inline : 1;
|
unsigned declared_inline : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -368,8 +367,6 @@ struct c_lang_decl {
|
||||||
#define DECL_NUM_STMTS(NODE) \
|
#define DECL_NUM_STMTS(NODE) \
|
||||||
(FUNCTION_DECL_CHECK (NODE)->decl.u1.i)
|
(FUNCTION_DECL_CHECK (NODE)->decl.u1.i)
|
||||||
|
|
||||||
extern void c_mark_lang_decl PARAMS ((struct c_lang_decl *));
|
|
||||||
|
|
||||||
/* The variant of the C language being processed. Each C language
|
/* The variant of the C language being processed. Each C language
|
||||||
front-end defines this variable. */
|
front-end defines this variable. */
|
||||||
|
|
||||||
|
@ -869,8 +866,6 @@ extern tree boolean_increment PARAMS ((enum tree_code,
|
||||||
after entering or leaving a header file. */
|
after entering or leaving a header file. */
|
||||||
extern void extract_interface_info PARAMS ((void));
|
extern void extract_interface_info PARAMS ((void));
|
||||||
|
|
||||||
extern void mark_c_language_function PARAMS ((struct language_function *));
|
|
||||||
|
|
||||||
extern int case_compare PARAMS ((splay_tree_key,
|
extern int case_compare PARAMS ((splay_tree_key,
|
||||||
splay_tree_key));
|
splay_tree_key));
|
||||||
|
|
||||||
|
|
176
gcc/c-decl.c
176
gcc/c-decl.c
|
@ -103,21 +103,21 @@ static int current_function_prototype_line;
|
||||||
|
|
||||||
/* The current statement tree. */
|
/* The current statement tree. */
|
||||||
|
|
||||||
static struct stmt_tree_s c_stmt_tree;
|
static GTY(()) struct stmt_tree_s c_stmt_tree;
|
||||||
|
|
||||||
/* The current scope statement stack. */
|
/* The current scope statement stack. */
|
||||||
|
|
||||||
static tree c_scope_stmt_stack;
|
static GTY(()) tree c_scope_stmt_stack;
|
||||||
|
|
||||||
/* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
|
/* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
|
||||||
that have names. Here so we can clear out their names' definitions
|
that have names. Here so we can clear out their names' definitions
|
||||||
at the end of the function. */
|
at the end of the function. */
|
||||||
|
|
||||||
static tree named_labels;
|
static GTY(()) tree named_labels;
|
||||||
|
|
||||||
/* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
|
/* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
|
||||||
|
|
||||||
static tree shadowed_labels;
|
static GTY(()) tree shadowed_labels;
|
||||||
|
|
||||||
/* Nonzero when store_parm_decls is called indicates a varargs function.
|
/* Nonzero when store_parm_decls is called indicates a varargs function.
|
||||||
Value not meaningful after store_parm_decls. */
|
Value not meaningful after store_parm_decls. */
|
||||||
|
@ -164,7 +164,7 @@ static int current_extern_inline;
|
||||||
/* Note that the information in the `names' component of the global contour
|
/* Note that the information in the `names' component of the global contour
|
||||||
is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
|
is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
|
||||||
|
|
||||||
struct binding_level
|
struct binding_level GTY(())
|
||||||
{
|
{
|
||||||
/* A chain of _DECL nodes for all variables, constants, functions,
|
/* A chain of _DECL nodes for all variables, constants, functions,
|
||||||
and typedef types. These are in the reverse of the order supplied.
|
and typedef types. These are in the reverse of the order supplied.
|
||||||
|
@ -229,17 +229,17 @@ struct binding_level
|
||||||
|
|
||||||
/* The binding level currently in effect. */
|
/* The binding level currently in effect. */
|
||||||
|
|
||||||
static struct binding_level *current_binding_level;
|
static GTY(()) struct binding_level *current_binding_level;
|
||||||
|
|
||||||
/* A chain of binding_level structures awaiting reuse. */
|
/* A chain of binding_level structures awaiting reuse. */
|
||||||
|
|
||||||
static struct binding_level *free_binding_level;
|
static GTY((deletable (""))) struct binding_level *free_binding_level;
|
||||||
|
|
||||||
/* The outermost binding level, for names of file scope.
|
/* The outermost binding level, for names of file scope.
|
||||||
This is created when the compiler is started and exists
|
This is created when the compiler is started and exists
|
||||||
through the entire run. */
|
through the entire run. */
|
||||||
|
|
||||||
static struct binding_level *global_binding_level;
|
static GTY(()) struct binding_level *global_binding_level;
|
||||||
|
|
||||||
/* Binding level structures are initialized by copying this one. */
|
/* Binding level structures are initialized by copying this one. */
|
||||||
|
|
||||||
|
@ -262,7 +262,7 @@ static int keep_next_if_subblocks;
|
||||||
saved values of named_labels and shadowed_labels for
|
saved values of named_labels and shadowed_labels for
|
||||||
a label binding level outside the current one. */
|
a label binding level outside the current one. */
|
||||||
|
|
||||||
static struct binding_level *label_level_chain;
|
static GTY(()) struct binding_level *label_level_chain;
|
||||||
|
|
||||||
/* Functions called automatically at the beginning and end of execution. */
|
/* Functions called automatically at the beginning and end of execution. */
|
||||||
|
|
||||||
|
@ -271,7 +271,7 @@ tree static_ctors, static_dtors;
|
||||||
/* Forward declarations. */
|
/* Forward declarations. */
|
||||||
|
|
||||||
static struct binding_level * make_binding_level PARAMS ((void));
|
static struct binding_level * make_binding_level PARAMS ((void));
|
||||||
static void mark_binding_level PARAMS ((void *));
|
static void pop_binding_level PARAMS ((struct binding_level **));
|
||||||
static void clear_limbo_values PARAMS ((tree));
|
static void clear_limbo_values PARAMS ((tree));
|
||||||
static int duplicate_decls PARAMS ((tree, tree, int));
|
static int duplicate_decls PARAMS ((tree, tree, int));
|
||||||
static int redeclaration_error_message PARAMS ((tree, tree));
|
static int redeclaration_error_message PARAMS ((tree, tree));
|
||||||
|
@ -755,13 +755,33 @@ c_finish_incomplete_decl (decl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create a new `struct binding_level'. */
|
/* Reuse or create a struct for this binding level. */
|
||||||
|
|
||||||
static struct binding_level *
|
static struct binding_level *
|
||||||
make_binding_level ()
|
make_binding_level ()
|
||||||
{
|
{
|
||||||
/* NOSTRICT */
|
if (free_binding_level)
|
||||||
return (struct binding_level *) xmalloc (sizeof (struct binding_level));
|
{
|
||||||
|
struct binding_level *result = free_binding_level;
|
||||||
|
free_binding_level = result->level_chain;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return (struct binding_level *) ggc_alloc (sizeof (struct binding_level));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove a binding level from a list and add it to the level chain. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
pop_binding_level (lp)
|
||||||
|
struct binding_level **lp;
|
||||||
|
{
|
||||||
|
struct binding_level *l = *lp;
|
||||||
|
*lp = l->level_chain;
|
||||||
|
|
||||||
|
memset (l, 0, sizeof (struct binding_level));
|
||||||
|
l->level_chain = free_binding_level;
|
||||||
|
free_binding_level = l;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Nonzero if we are currently in the global binding level. */
|
/* Nonzero if we are currently in the global binding level. */
|
||||||
|
@ -829,17 +849,7 @@ pushlevel (tag_transparent)
|
||||||
named_labels = 0;
|
named_labels = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reuse or create a struct for this binding level. */
|
|
||||||
|
|
||||||
if (free_binding_level)
|
|
||||||
{
|
|
||||||
newlevel = free_binding_level;
|
|
||||||
free_binding_level = free_binding_level->level_chain;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newlevel = make_binding_level ();
|
newlevel = make_binding_level ();
|
||||||
}
|
|
||||||
|
|
||||||
/* Add this level to the front of the chain (stack) of levels that
|
/* Add this level to the front of the chain (stack) of levels that
|
||||||
are active. */
|
are active. */
|
||||||
|
@ -1060,13 +1070,7 @@ poplevel (keep, reverse, functionbody)
|
||||||
|
|
||||||
/* Pop the current level, and free the structure for reuse. */
|
/* Pop the current level, and free the structure for reuse. */
|
||||||
|
|
||||||
{
|
pop_binding_level (¤t_binding_level);
|
||||||
struct binding_level *level = current_binding_level;
|
|
||||||
current_binding_level = current_binding_level->level_chain;
|
|
||||||
|
|
||||||
level->level_chain = free_binding_level;
|
|
||||||
free_binding_level = level;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Dispose of the block that we just made inside some higher level. */
|
/* Dispose of the block that we just made inside some higher level. */
|
||||||
if (functionbody)
|
if (functionbody)
|
||||||
|
@ -1145,17 +1149,7 @@ push_label_level ()
|
||||||
{
|
{
|
||||||
struct binding_level *newlevel;
|
struct binding_level *newlevel;
|
||||||
|
|
||||||
/* Reuse or create a struct for this binding level. */
|
|
||||||
|
|
||||||
if (free_binding_level)
|
|
||||||
{
|
|
||||||
newlevel = free_binding_level;
|
|
||||||
free_binding_level = free_binding_level->level_chain;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
newlevel = make_binding_level ();
|
newlevel = make_binding_level ();
|
||||||
}
|
|
||||||
|
|
||||||
/* Add this level to the front of the chain (stack) of label levels. */
|
/* Add this level to the front of the chain (stack) of label levels. */
|
||||||
|
|
||||||
|
@ -1217,9 +1211,7 @@ pop_label_level ()
|
||||||
shadowed_labels = level->shadowed;
|
shadowed_labels = level->shadowed;
|
||||||
|
|
||||||
/* Pop the current level, and free the structure for reuse. */
|
/* Pop the current level, and free the structure for reuse. */
|
||||||
label_level_chain = label_level_chain->level_chain;
|
pop_binding_level (&label_level_chain);
|
||||||
level->level_chain = free_binding_level;
|
|
||||||
free_binding_level = level;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Push a definition or a declaration of struct, union or enum tag "name".
|
/* Push a definition or a declaration of struct, union or enum tag "name".
|
||||||
|
@ -2864,26 +2856,6 @@ lookup_name_current_level (name)
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark ARG for GC. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
mark_binding_level (arg)
|
|
||||||
void *arg;
|
|
||||||
{
|
|
||||||
struct binding_level *level = *(struct binding_level **) arg;
|
|
||||||
|
|
||||||
for (; level != 0; level = level->level_chain)
|
|
||||||
{
|
|
||||||
ggc_mark_tree (level->names);
|
|
||||||
ggc_mark_tree (level->tags);
|
|
||||||
ggc_mark_tree (level->shadowed);
|
|
||||||
ggc_mark_tree (level->blocks);
|
|
||||||
ggc_mark_tree (level->this_block);
|
|
||||||
ggc_mark_tree (level->parm_order);
|
|
||||||
ggc_mark_tree (level->incomplete_list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create the predefined scalar types of C,
|
/* Create the predefined scalar types of C,
|
||||||
and some nodes representing standard constants (0, 1, (void *) 0).
|
and some nodes representing standard constants (0, 1, (void *) 0).
|
||||||
Initialize the global binding level.
|
Initialize the global binding level.
|
||||||
|
@ -2937,20 +2909,6 @@ c_init_decl_processing ()
|
||||||
|
|
||||||
make_fname_decl = c_make_fname_decl;
|
make_fname_decl = c_make_fname_decl;
|
||||||
start_fname_decls ();
|
start_fname_decls ();
|
||||||
|
|
||||||
/* Record our roots. */
|
|
||||||
|
|
||||||
ggc_add_tree_root (c_global_trees, CTI_MAX);
|
|
||||||
ggc_add_root (&c_stmt_tree, 1, sizeof c_stmt_tree, mark_stmt_tree);
|
|
||||||
ggc_add_tree_root (&c_scope_stmt_stack, 1);
|
|
||||||
ggc_add_tree_root (&named_labels, 1);
|
|
||||||
ggc_add_tree_root (&shadowed_labels, 1);
|
|
||||||
ggc_add_root (¤t_binding_level, 1, sizeof current_binding_level,
|
|
||||||
mark_binding_level);
|
|
||||||
ggc_add_root (&label_level_chain, 1, sizeof label_level_chain,
|
|
||||||
mark_binding_level);
|
|
||||||
ggc_add_tree_root (&static_ctors, 1);
|
|
||||||
ggc_add_tree_root (&static_dtors, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
|
/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
|
||||||
|
@ -7045,9 +7003,9 @@ check_for_loop_decls ()
|
||||||
that keep track of the progress of compilation of the current function.
|
that keep track of the progress of compilation of the current function.
|
||||||
Used for nested functions. */
|
Used for nested functions. */
|
||||||
|
|
||||||
struct c_language_function
|
struct language_function GTY(())
|
||||||
{
|
{
|
||||||
struct language_function base;
|
struct c_language_function base;
|
||||||
tree named_labels;
|
tree named_labels;
|
||||||
tree shadowed_labels;
|
tree shadowed_labels;
|
||||||
int returns_value;
|
int returns_value;
|
||||||
|
@ -7065,10 +7023,10 @@ void
|
||||||
c_push_function_context (f)
|
c_push_function_context (f)
|
||||||
struct function *f;
|
struct function *f;
|
||||||
{
|
{
|
||||||
struct c_language_function *p;
|
struct language_function *p;
|
||||||
p = ((struct c_language_function *)
|
p = ((struct language_function *)
|
||||||
xmalloc (sizeof (struct c_language_function)));
|
ggc_alloc (sizeof (struct language_function)));
|
||||||
f->language = (struct language_function *) p;
|
f->language = p;
|
||||||
|
|
||||||
p->base.x_stmt_tree = c_stmt_tree;
|
p->base.x_stmt_tree = c_stmt_tree;
|
||||||
p->base.x_scope_stmt_stack = c_scope_stmt_stack;
|
p->base.x_scope_stmt_stack = c_scope_stmt_stack;
|
||||||
|
@ -7088,8 +7046,7 @@ void
|
||||||
c_pop_function_context (f)
|
c_pop_function_context (f)
|
||||||
struct function *f;
|
struct function *f;
|
||||||
{
|
{
|
||||||
struct c_language_function *p
|
struct language_function *p = f->language;
|
||||||
= (struct c_language_function *) f->language;
|
|
||||||
tree link;
|
tree link;
|
||||||
|
|
||||||
/* Bring back all the labels that were shadowed. */
|
/* Bring back all the labels that were shadowed. */
|
||||||
|
@ -7119,26 +7076,7 @@ c_pop_function_context (f)
|
||||||
current_extern_inline = p->extern_inline;
|
current_extern_inline = p->extern_inline;
|
||||||
current_binding_level = p->binding_level;
|
current_binding_level = p->binding_level;
|
||||||
|
|
||||||
free (p);
|
f->language = NULL;
|
||||||
f->language = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Mark the language specific parts of F for GC. */
|
|
||||||
|
|
||||||
void
|
|
||||||
c_mark_function_context (f)
|
|
||||||
struct function *f;
|
|
||||||
{
|
|
||||||
struct c_language_function *p
|
|
||||||
= (struct c_language_function *) f->language;
|
|
||||||
|
|
||||||
if (p == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
mark_c_language_function (&p->base);
|
|
||||||
ggc_mark_tree (p->shadowed_labels);
|
|
||||||
ggc_mark_tree (p->named_labels);
|
|
||||||
mark_binding_level (&p->binding_level);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy the DECL_LANG_SPECIFIC data associated with DECL. */
|
/* Copy the DECL_LANG_SPECIFIC data associated with DECL. */
|
||||||
|
@ -7158,32 +7096,6 @@ c_dup_lang_specific_decl (decl)
|
||||||
DECL_LANG_SPECIFIC (decl) = ld;
|
DECL_LANG_SPECIFIC (decl) = ld;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark the language specific bits in T for GC. */
|
|
||||||
|
|
||||||
void
|
|
||||||
c_mark_tree (t)
|
|
||||||
tree t;
|
|
||||||
{
|
|
||||||
if (TREE_CODE (t) == IDENTIFIER_NODE)
|
|
||||||
{
|
|
||||||
struct lang_identifier *i = (struct lang_identifier *) t;
|
|
||||||
ggc_mark_tree (i->global_value);
|
|
||||||
ggc_mark_tree (i->local_value);
|
|
||||||
ggc_mark_tree (i->label_value);
|
|
||||||
ggc_mark_tree (i->implicit_decl);
|
|
||||||
ggc_mark_tree (i->error_locus);
|
|
||||||
ggc_mark_tree (i->limbo_value);
|
|
||||||
}
|
|
||||||
else if (TYPE_P (t) && TYPE_LANG_SPECIFIC (t))
|
|
||||||
ggc_mark (TYPE_LANG_SPECIFIC (t));
|
|
||||||
else if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
|
|
||||||
{
|
|
||||||
ggc_mark (DECL_LANG_SPECIFIC (t));
|
|
||||||
c_mark_lang_decl (&DECL_LANG_SPECIFIC (t)->base);
|
|
||||||
ggc_mark_tree (DECL_LANG_SPECIFIC (t)->pending_sizes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The functions below are required for functionality of doing
|
/* The functions below are required for functionality of doing
|
||||||
function at once processing in the C front end. Currently these
|
function at once processing in the C front end. Currently these
|
||||||
functions are not called from anywhere in the C front end, but as
|
functions are not called from anywhere in the C front end, but as
|
||||||
|
@ -7319,3 +7231,5 @@ make_pointer_declarator (type_quals_attrs, target)
|
||||||
itarget = tree_cons (attrs, target, NULL_TREE);
|
itarget = tree_cons (attrs, target, NULL_TREE);
|
||||||
return build1 (INDIRECT_REF, quals, itarget);
|
return build1 (INDIRECT_REF, quals, itarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-c-decl.h"
|
||||||
|
|
|
@ -25,6 +25,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
#include "c-tree.h"
|
#include "c-tree.h"
|
||||||
#include "c-common.h"
|
#include "c-common.h"
|
||||||
|
#include "ggc.h"
|
||||||
#include "langhooks.h"
|
#include "langhooks.h"
|
||||||
#include "langhooks-def.h"
|
#include "langhooks-def.h"
|
||||||
|
|
||||||
|
@ -49,8 +50,6 @@ static void c_init_options PARAMS ((void));
|
||||||
#define LANG_HOOKS_GET_ALIAS_SET c_common_get_alias_set
|
#define LANG_HOOKS_GET_ALIAS_SET c_common_get_alias_set
|
||||||
#undef LANG_HOOKS_SAFE_FROM_P
|
#undef LANG_HOOKS_SAFE_FROM_P
|
||||||
#define LANG_HOOKS_SAFE_FROM_P c_safe_from_p
|
#define LANG_HOOKS_SAFE_FROM_P c_safe_from_p
|
||||||
#undef LANG_HOOKS_MARK_TREE
|
|
||||||
#define LANG_HOOKS_MARK_TREE c_mark_tree
|
|
||||||
#undef LANG_HOOKS_EXPAND_EXPR
|
#undef LANG_HOOKS_EXPAND_EXPR
|
||||||
#define LANG_HOOKS_EXPAND_EXPR c_expand_expr
|
#define LANG_HOOKS_EXPAND_EXPR c_expand_expr
|
||||||
#undef LANG_HOOKS_MARK_ADDRESSABLE
|
#undef LANG_HOOKS_MARK_ADDRESSABLE
|
||||||
|
@ -75,8 +74,6 @@ static void c_init_options PARAMS ((void));
|
||||||
#define LANG_HOOKS_FUNCTION_ENTER_NESTED c_push_function_context
|
#define LANG_HOOKS_FUNCTION_ENTER_NESTED c_push_function_context
|
||||||
#undef LANG_HOOKS_FUNCTION_LEAVE_NESTED
|
#undef LANG_HOOKS_FUNCTION_LEAVE_NESTED
|
||||||
#define LANG_HOOKS_FUNCTION_LEAVE_NESTED c_pop_function_context
|
#define LANG_HOOKS_FUNCTION_LEAVE_NESTED c_pop_function_context
|
||||||
#undef LANG_HOOKS_FUNCTION_MARK
|
|
||||||
#define LANG_HOOKS_FUNCTION_MARK c_mark_function_context
|
|
||||||
#undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL
|
#undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL
|
||||||
#define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL c_dup_lang_specific_decl
|
#define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL c_dup_lang_specific_decl
|
||||||
|
|
||||||
|
@ -224,3 +221,5 @@ finish_file ()
|
||||||
{
|
{
|
||||||
c_objc_common_finish_file ();
|
c_objc_common_finish_file ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gtype-c.h"
|
||||||
|
|
|
@ -41,7 +41,7 @@ static void expand_deferred_fns PARAMS ((void));
|
||||||
static tree start_cdtor PARAMS ((int));
|
static tree start_cdtor PARAMS ((int));
|
||||||
static void finish_cdtor PARAMS ((tree));
|
static void finish_cdtor PARAMS ((tree));
|
||||||
|
|
||||||
static varray_type deferred_fns;
|
static GTY(()) varray_type deferred_fns;
|
||||||
|
|
||||||
int
|
int
|
||||||
c_missing_noreturn_ok_p (decl)
|
c_missing_noreturn_ok_p (decl)
|
||||||
|
@ -253,7 +253,6 @@ c_objc_common_init (filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns");
|
VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns");
|
||||||
ggc_add_tree_varray_root (&deferred_fns, 1);
|
|
||||||
|
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
@ -291,7 +290,7 @@ expand_deferred_fns ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VARRAY_FREE (deferred_fns);
|
deferred_fns = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
|
@ -413,3 +412,5 @@ c_tree_printer (buffer)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-c-objc-common.h"
|
||||||
|
|
|
@ -266,17 +266,17 @@ static const char *if_stmt_file;
|
||||||
static int if_stmt_line;
|
static int if_stmt_line;
|
||||||
|
|
||||||
/* List of types and structure classes of the current declaration. */
|
/* List of types and structure classes of the current declaration. */
|
||||||
static tree current_declspecs = NULL_TREE;
|
static GTY(()) tree current_declspecs;
|
||||||
static tree prefix_attributes = NULL_TREE;
|
static GTY(()) tree prefix_attributes;
|
||||||
|
|
||||||
/* List of all the attributes applying to the identifier currently being
|
/* List of all the attributes applying to the identifier currently being
|
||||||
declared; includes prefix_attributes and possibly some more attributes
|
declared; includes prefix_attributes and possibly some more attributes
|
||||||
just after a comma. */
|
just after a comma. */
|
||||||
static tree all_prefix_attributes = NULL_TREE;
|
static GTY(()) tree all_prefix_attributes;
|
||||||
|
|
||||||
/* Stack of saved values of current_declspecs, prefix_attributes and
|
/* Stack of saved values of current_declspecs, prefix_attributes and
|
||||||
all_prefix_attributes. */
|
all_prefix_attributes. */
|
||||||
static tree declspec_stack;
|
static GTY(()) tree declspec_stack;
|
||||||
|
|
||||||
/* PUSH_DECLSPEC_STACK is called from setspecs; POP_DECLSPEC_STACK
|
/* PUSH_DECLSPEC_STACK is called from setspecs; POP_DECLSPEC_STACK
|
||||||
should be called from the productions making use of setspecs. */
|
should be called from the productions making use of setspecs. */
|
||||||
|
@ -341,16 +341,11 @@ static inline int _yylex PARAMS ((void));
|
||||||
static int yylex PARAMS ((void));
|
static int yylex PARAMS ((void));
|
||||||
static void init_reswords PARAMS ((void));
|
static void init_reswords PARAMS ((void));
|
||||||
|
|
||||||
/* Add GC roots for variables local to this file. */
|
/* Initialisation routine for this file. */
|
||||||
void
|
void
|
||||||
c_parse_init ()
|
c_parse_init ()
|
||||||
{
|
{
|
||||||
init_reswords ();
|
init_reswords ();
|
||||||
|
|
||||||
ggc_add_tree_root (&declspec_stack, 1);
|
|
||||||
ggc_add_tree_root (¤t_declspecs, 1);
|
|
||||||
ggc_add_tree_root (&prefix_attributes, 1);
|
|
||||||
ggc_add_tree_root (&all_prefix_attributes, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
@ -3730,8 +3725,6 @@ end ifc
|
||||||
|| (next_type == CPP_NAME && yylexname () == STRING));
|
|| (next_type == CPP_NAME && yylexname () == STRING));
|
||||||
|
|
||||||
yylval.ttype = combine_strings (strings);
|
yylval.ttype = combine_strings (strings);
|
||||||
|
|
||||||
VARRAY_FREE (strings);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
yylval.ttype = orig;
|
yylval.ttype = orig;
|
||||||
|
@ -3943,3 +3936,5 @@ free_parser_stacks ()
|
||||||
free (malloced_yyvs);
|
free (malloced_yyvs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-c-parse.h"
|
||||||
|
|
|
@ -36,11 +36,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
#define GCC_BAD(msgid) do { warning (msgid); return; } while (0)
|
#define GCC_BAD(msgid) do { warning (msgid); return; } while (0)
|
||||||
#define GCC_BAD2(msgid, arg) do { warning (msgid, arg); return; } while (0)
|
#define GCC_BAD2(msgid, arg) do { warning (msgid, arg); return; } while (0)
|
||||||
|
|
||||||
#ifdef HANDLE_PRAGMA_PACK
|
typedef struct align_stack GTY(())
|
||||||
static void handle_pragma_pack PARAMS ((cpp_reader *));
|
|
||||||
|
|
||||||
#ifdef HANDLE_PRAGMA_PACK_PUSH_POP
|
|
||||||
typedef struct align_stack
|
|
||||||
{
|
{
|
||||||
int alignment;
|
int alignment;
|
||||||
unsigned int num_pushes;
|
unsigned int num_pushes;
|
||||||
|
@ -48,8 +44,12 @@ typedef struct align_stack
|
||||||
struct align_stack * prev;
|
struct align_stack * prev;
|
||||||
} align_stack;
|
} align_stack;
|
||||||
|
|
||||||
static struct align_stack * alignment_stack = NULL;
|
static GTY(()) struct align_stack * alignment_stack;
|
||||||
|
|
||||||
|
#ifdef HANDLE_PRAGMA_PACK
|
||||||
|
static void handle_pragma_pack PARAMS ((cpp_reader *));
|
||||||
|
|
||||||
|
#ifdef HANDLE_PRAGMA_PACK_PUSH_POP
|
||||||
/* If we have a "global" #pragma pack(<n>) in effect when the first
|
/* If we have a "global" #pragma pack(<n>) in effect when the first
|
||||||
#pragma pack(push,<n>) is encountered, this stores the value of
|
#pragma pack(push,<n>) is encountered, this stores the value of
|
||||||
maximum_field_alignment in effect. When the final pop_alignment()
|
maximum_field_alignment in effect. When the final pop_alignment()
|
||||||
|
@ -61,7 +61,6 @@ static int default_alignment;
|
||||||
|
|
||||||
static void push_alignment PARAMS ((int, tree));
|
static void push_alignment PARAMS ((int, tree));
|
||||||
static void pop_alignment PARAMS ((tree));
|
static void pop_alignment PARAMS ((tree));
|
||||||
static void mark_align_stack PARAMS ((void *));
|
|
||||||
|
|
||||||
/* Push an alignment value onto the stack. */
|
/* Push an alignment value onto the stack. */
|
||||||
static void
|
static void
|
||||||
|
@ -75,7 +74,7 @@ push_alignment (alignment, id)
|
||||||
{
|
{
|
||||||
align_stack * entry;
|
align_stack * entry;
|
||||||
|
|
||||||
entry = (align_stack *) xmalloc (sizeof (* entry));
|
entry = (align_stack *) ggc_alloc (sizeof (* entry));
|
||||||
|
|
||||||
entry->alignment = alignment;
|
entry->alignment = alignment;
|
||||||
entry->num_pushes = 1;
|
entry->num_pushes = 1;
|
||||||
|
@ -137,24 +136,9 @@ pop_alignment (id)
|
||||||
else
|
else
|
||||||
maximum_field_alignment = entry->alignment;
|
maximum_field_alignment = entry->alignment;
|
||||||
|
|
||||||
free (alignment_stack);
|
|
||||||
|
|
||||||
alignment_stack = entry;
|
alignment_stack = entry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
mark_align_stack (p)
|
|
||||||
void *p;
|
|
||||||
{
|
|
||||||
align_stack *a = *(align_stack **) p;
|
|
||||||
|
|
||||||
while (a)
|
|
||||||
{
|
|
||||||
ggc_mark_tree (a->id);
|
|
||||||
a = a->prev;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else /* not HANDLE_PRAGMA_PACK_PUSH_POP */
|
#else /* not HANDLE_PRAGMA_PACK_PUSH_POP */
|
||||||
#define SET_GLOBAL_ALIGNMENT(ALIGN) (maximum_field_alignment = (ALIGN))
|
#define SET_GLOBAL_ALIGNMENT(ALIGN) (maximum_field_alignment = (ALIGN))
|
||||||
#define push_alignment(ID, N) \
|
#define push_alignment(ID, N) \
|
||||||
|
@ -272,12 +256,12 @@ handle_pragma_pack (dummy)
|
||||||
}
|
}
|
||||||
#endif /* HANDLE_PRAGMA_PACK */
|
#endif /* HANDLE_PRAGMA_PACK */
|
||||||
|
|
||||||
|
static GTY(()) tree pending_weaks;
|
||||||
|
|
||||||
#ifdef HANDLE_PRAGMA_WEAK
|
#ifdef HANDLE_PRAGMA_WEAK
|
||||||
static void apply_pragma_weak PARAMS ((tree, tree));
|
static void apply_pragma_weak PARAMS ((tree, tree));
|
||||||
static void handle_pragma_weak PARAMS ((cpp_reader *));
|
static void handle_pragma_weak PARAMS ((cpp_reader *));
|
||||||
|
|
||||||
static tree pending_weaks;
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
apply_pragma_weak (decl, value)
|
apply_pragma_weak (decl, value)
|
||||||
tree decl, value;
|
tree decl, value;
|
||||||
|
@ -363,11 +347,11 @@ maybe_apply_pragma_weak (decl)
|
||||||
}
|
}
|
||||||
#endif /* HANDLE_PRAGMA_WEAK */
|
#endif /* HANDLE_PRAGMA_WEAK */
|
||||||
|
|
||||||
|
static GTY(()) tree pending_redefine_extname;
|
||||||
|
|
||||||
#ifdef HANDLE_PRAGMA_REDEFINE_EXTNAME
|
#ifdef HANDLE_PRAGMA_REDEFINE_EXTNAME
|
||||||
static void handle_pragma_redefine_extname PARAMS ((cpp_reader *));
|
static void handle_pragma_redefine_extname PARAMS ((cpp_reader *));
|
||||||
|
|
||||||
static tree pending_redefine_extname;
|
|
||||||
|
|
||||||
/* #pragma redefined_extname oldname newname */
|
/* #pragma redefined_extname oldname newname */
|
||||||
static void
|
static void
|
||||||
handle_pragma_redefine_extname (dummy)
|
handle_pragma_redefine_extname (dummy)
|
||||||
|
@ -404,11 +388,11 @@ handle_pragma_redefine_extname (dummy)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static GTY(()) tree pragma_extern_prefix;
|
||||||
|
|
||||||
#ifdef HANDLE_PRAGMA_EXTERN_PREFIX
|
#ifdef HANDLE_PRAGMA_EXTERN_PREFIX
|
||||||
static void handle_pragma_extern_prefix PARAMS ((cpp_reader *));
|
static void handle_pragma_extern_prefix PARAMS ((cpp_reader *));
|
||||||
|
|
||||||
static tree pragma_extern_prefix;
|
|
||||||
|
|
||||||
/* #pragma extern_prefix "prefix" */
|
/* #pragma extern_prefix "prefix" */
|
||||||
static void
|
static void
|
||||||
handle_pragma_extern_prefix (dummy)
|
handle_pragma_extern_prefix (dummy)
|
||||||
|
@ -500,25 +484,19 @@ init_pragma ()
|
||||||
#endif
|
#endif
|
||||||
#ifdef HANDLE_PRAGMA_WEAK
|
#ifdef HANDLE_PRAGMA_WEAK
|
||||||
cpp_register_pragma (parse_in, 0, "weak", handle_pragma_weak);
|
cpp_register_pragma (parse_in, 0, "weak", handle_pragma_weak);
|
||||||
ggc_add_tree_root (&pending_weaks, 1);
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef HANDLE_PRAGMA_REDEFINE_EXTNAME
|
#ifdef HANDLE_PRAGMA_REDEFINE_EXTNAME
|
||||||
cpp_register_pragma (parse_in, 0, "redefine_extname",
|
cpp_register_pragma (parse_in, 0, "redefine_extname",
|
||||||
handle_pragma_redefine_extname);
|
handle_pragma_redefine_extname);
|
||||||
ggc_add_tree_root (&pending_redefine_extname, 1);
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef HANDLE_PRAGMA_EXTERN_PREFIX
|
#ifdef HANDLE_PRAGMA_EXTERN_PREFIX
|
||||||
cpp_register_pragma (parse_in, 0, "extern_prefix",
|
cpp_register_pragma (parse_in, 0, "extern_prefix",
|
||||||
handle_pragma_extern_prefix);
|
handle_pragma_extern_prefix);
|
||||||
ggc_add_tree_root (&pragma_extern_prefix, 1);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef REGISTER_TARGET_PRAGMAS
|
#ifdef REGISTER_TARGET_PRAGMAS
|
||||||
REGISTER_TARGET_PRAGMAS (parse_in);
|
REGISTER_TARGET_PRAGMAS (parse_in);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HANDLE_PRAGMA_PACK_PUSH_POP
|
|
||||||
ggc_add_root (&alignment_stack, 1, sizeof(alignment_stack),
|
|
||||||
mark_align_stack);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-c-pragma.h"
|
||||||
|
|
35
gcc/c-tree.h
35
gcc/c-tree.h
|
@ -34,16 +34,31 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
lang_identifier nodes, because some keywords are only special in a
|
lang_identifier nodes, because some keywords are only special in a
|
||||||
particular context. */
|
particular context. */
|
||||||
|
|
||||||
struct lang_identifier
|
struct lang_identifier GTY(())
|
||||||
{
|
{
|
||||||
struct c_common_identifier ignore;
|
struct c_common_identifier common_id;
|
||||||
tree global_value, local_value, label_value, implicit_decl;
|
tree global_value;
|
||||||
tree error_locus, limbo_value;
|
tree local_value;
|
||||||
|
tree label_value;
|
||||||
|
tree implicit_decl;
|
||||||
|
tree error_locus;
|
||||||
|
tree limbo_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The resulting tree type. */
|
||||||
|
|
||||||
|
union lang_tree_node
|
||||||
|
GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE")))
|
||||||
|
{
|
||||||
|
union tree_node GTY ((tag ("0"),
|
||||||
|
desc ("tree_node_structure (&%h)")))
|
||||||
|
generic;
|
||||||
|
struct lang_identifier GTY ((tag ("1"))) identifier;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Language-specific declaration information. */
|
/* Language-specific declaration information. */
|
||||||
|
|
||||||
struct lang_decl
|
struct lang_decl GTY(())
|
||||||
{
|
{
|
||||||
struct c_lang_decl base;
|
struct c_lang_decl base;
|
||||||
/* The return types and parameter types may have variable size.
|
/* The return types and parameter types may have variable size.
|
||||||
|
@ -107,10 +122,10 @@ struct lang_decl
|
||||||
(DECL_LANG_SPECIFIC (NODE)->base.declared_inline)
|
(DECL_LANG_SPECIFIC (NODE)->base.declared_inline)
|
||||||
|
|
||||||
/* In a RECORD_TYPE, a sorted array of the fields of the type. */
|
/* In a RECORD_TYPE, a sorted array of the fields of the type. */
|
||||||
struct lang_type
|
struct lang_type GTY(())
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
tree elts[1];
|
tree GTY((length ("%h.len"))) elts[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Record whether a type or decl was written with nonconstant size.
|
/* Record whether a type or decl was written with nonconstant size.
|
||||||
|
@ -178,7 +193,6 @@ extern void c_insert_default_attributes PARAMS ((tree));
|
||||||
extern void c_init_decl_processing PARAMS ((void));
|
extern void c_init_decl_processing PARAMS ((void));
|
||||||
extern void c_dup_lang_specific_decl PARAMS ((tree));
|
extern void c_dup_lang_specific_decl PARAMS ((tree));
|
||||||
extern void c_print_identifier PARAMS ((FILE *, tree, int));
|
extern void c_print_identifier PARAMS ((FILE *, tree, int));
|
||||||
extern void c_mark_tree PARAMS ((tree));
|
|
||||||
extern tree build_array_declarator PARAMS ((tree, tree, int, int));
|
extern tree build_array_declarator PARAMS ((tree, tree, int, int));
|
||||||
extern tree build_enumerator PARAMS ((tree, tree));
|
extern tree build_enumerator PARAMS ((tree, tree));
|
||||||
extern int c_decode_option PARAMS ((int, char **));
|
extern int c_decode_option PARAMS ((int, char **));
|
||||||
|
@ -205,7 +219,6 @@ extern tree lookup_name PARAMS ((tree));
|
||||||
extern tree lookup_name_current_level PARAMS ((tree));
|
extern tree lookup_name_current_level PARAMS ((tree));
|
||||||
extern void parmlist_tags_warning PARAMS ((void));
|
extern void parmlist_tags_warning PARAMS ((void));
|
||||||
extern void pending_xref_error PARAMS ((void));
|
extern void pending_xref_error PARAMS ((void));
|
||||||
extern void c_mark_function_context PARAMS ((struct function *));
|
|
||||||
extern void c_push_function_context PARAMS ((struct function *));
|
extern void c_push_function_context PARAMS ((struct function *));
|
||||||
extern void c_pop_function_context PARAMS ((struct function *));
|
extern void c_pop_function_context PARAMS ((struct function *));
|
||||||
extern void pop_label_level PARAMS ((void));
|
extern void pop_label_level PARAMS ((void));
|
||||||
|
@ -384,7 +397,7 @@ extern int mesg_implicit_function_declaration;
|
||||||
/* In c-decl.c */
|
/* In c-decl.c */
|
||||||
extern void c_finish_incomplete_decl PARAMS ((tree));
|
extern void c_finish_incomplete_decl PARAMS ((tree));
|
||||||
|
|
||||||
extern tree static_ctors;
|
extern GTY(()) tree static_ctors;
|
||||||
extern tree static_dtors;
|
extern GTY(()) tree static_dtors;
|
||||||
|
|
||||||
#endif /* ! GCC_C_TREE_H */
|
#endif /* ! GCC_C_TREE_H */
|
||||||
|
|
|
@ -188,12 +188,8 @@ static void alpha_elf_select_rtx_section
|
||||||
PARAMS ((enum machine_mode, rtx, unsigned HOST_WIDE_INT));
|
PARAMS ((enum machine_mode, rtx, unsigned HOST_WIDE_INT));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void alpha_init_machine_status
|
static struct machine_function * alpha_init_machine_status
|
||||||
PARAMS ((struct function *p));
|
PARAMS ((void));
|
||||||
static void alpha_mark_machine_status
|
|
||||||
PARAMS ((struct function *p));
|
|
||||||
static void alpha_free_machine_status
|
|
||||||
PARAMS ((struct function *p));
|
|
||||||
|
|
||||||
static void unicosmk_output_deferred_case_vectors PARAMS ((FILE *));
|
static void unicosmk_output_deferred_case_vectors PARAMS ((FILE *));
|
||||||
static void unicosmk_gen_dsib PARAMS ((unsigned long *imaskP));
|
static void unicosmk_gen_dsib PARAMS ((unsigned long *imaskP));
|
||||||
|
@ -562,8 +558,6 @@ override_options ()
|
||||||
|
|
||||||
/* Set up function hooks. */
|
/* Set up function hooks. */
|
||||||
init_machine_status = alpha_init_machine_status;
|
init_machine_status = alpha_init_machine_status;
|
||||||
mark_machine_status = alpha_mark_machine_status;
|
|
||||||
free_machine_status = alpha_free_machine_status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns 1 if VALUE is a mask that contains full bytes of zero or ones. */
|
/* Returns 1 if VALUE is a mask that contains full bytes of zero or ones. */
|
||||||
|
@ -5311,9 +5305,9 @@ alpha_multipass_dfa_lookahead ()
|
||||||
|
|
||||||
/* Machine-specific function data. */
|
/* Machine-specific function data. */
|
||||||
|
|
||||||
struct machine_function
|
struct machine_function GTY(())
|
||||||
{
|
{
|
||||||
#if TARGET_ABI_UNICOSMK
|
/* For unicosmk. */
|
||||||
/* List of call information words for calls from this function. */
|
/* List of call information words for calls from this function. */
|
||||||
struct rtx_def *first_ciw;
|
struct rtx_def *first_ciw;
|
||||||
struct rtx_def *last_ciw;
|
struct rtx_def *last_ciw;
|
||||||
|
@ -5321,58 +5315,18 @@ struct machine_function
|
||||||
|
|
||||||
/* List of deferred case vectors. */
|
/* List of deferred case vectors. */
|
||||||
struct rtx_def *addr_list;
|
struct rtx_def *addr_list;
|
||||||
#else
|
|
||||||
#if TARGET_ABI_OSF
|
/* For OSF. */
|
||||||
const char *some_ld_name;
|
const char *some_ld_name;
|
||||||
#else
|
|
||||||
/* Non-empty struct. */
|
|
||||||
char dummy;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Register global variables and machine-specific functions with the
|
/* How to allocate a 'struct machine_function'. */
|
||||||
garbage collector. */
|
|
||||||
|
|
||||||
static void
|
static struct machine_function *
|
||||||
alpha_init_machine_status (p)
|
alpha_init_machine_status ()
|
||||||
struct function *p;
|
|
||||||
{
|
{
|
||||||
p->machine =
|
return ((struct machine_function *)
|
||||||
(struct machine_function *) xcalloc (1, sizeof (struct machine_function));
|
ggc_alloc_cleared (sizeof (struct machine_function)));
|
||||||
|
|
||||||
#if TARGET_ABI_UNICOSMK
|
|
||||||
p->machine->first_ciw = NULL_RTX;
|
|
||||||
p->machine->last_ciw = NULL_RTX;
|
|
||||||
p->machine->ciw_count = 0;
|
|
||||||
p->machine->addr_list = NULL_RTX;
|
|
||||||
#endif
|
|
||||||
#if TARGET_ABI_OSF
|
|
||||||
p->machine->some_ld_name = NULL;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
alpha_mark_machine_status (p)
|
|
||||||
struct function *p;
|
|
||||||
{
|
|
||||||
struct machine_function *machine = p->machine;
|
|
||||||
|
|
||||||
if (machine)
|
|
||||||
{
|
|
||||||
#if TARGET_ABI_UNICOSMK
|
|
||||||
ggc_mark_rtx (machine->first_ciw);
|
|
||||||
ggc_mark_rtx (machine->addr_list);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
alpha_free_machine_status (p)
|
|
||||||
struct function *p;
|
|
||||||
{
|
|
||||||
free (p->machine);
|
|
||||||
p->machine = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Functions to save and restore alpha_return_addr_rtx. */
|
/* Functions to save and restore alpha_return_addr_rtx. */
|
||||||
|
@ -9913,3 +9867,6 @@ unicosmk_need_dex (x)
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* TARGET_ABI_UNICOSMK */
|
#endif /* TARGET_ABI_UNICOSMK */
|
||||||
|
|
||||||
|
#include "gt-alpha.h"
|
||||||
|
|
||||||
|
|
|
@ -82,9 +82,7 @@ static Ccstar output_multi_immediate PARAMS ((rtx *, Ccstar, Ccstar, int, Hi
|
||||||
static void print_multi_reg PARAMS ((FILE *, Ccstar, int, int));
|
static void print_multi_reg PARAMS ((FILE *, Ccstar, int, int));
|
||||||
static Mmode select_dominance_cc_mode PARAMS ((rtx, rtx, Hint));
|
static Mmode select_dominance_cc_mode PARAMS ((rtx, rtx, Hint));
|
||||||
static Ccstar shift_op PARAMS ((rtx, Hint *));
|
static Ccstar shift_op PARAMS ((rtx, Hint *));
|
||||||
static void arm_init_machine_status PARAMS ((struct function *));
|
static struct machine_function * arm_init_machine_status PARAMS ((void));
|
||||||
static void arm_mark_machine_status PARAMS ((struct function *));
|
|
||||||
static void arm_free_machine_status PARAMS ((struct function *));
|
|
||||||
static int number_of_first_bit_set PARAMS ((int));
|
static int number_of_first_bit_set PARAMS ((int));
|
||||||
static void replace_symbols_in_block PARAMS ((tree, rtx, rtx));
|
static void replace_symbols_in_block PARAMS ((tree, rtx, rtx));
|
||||||
static void thumb_exit PARAMS ((FILE *, int, rtx));
|
static void thumb_exit PARAMS ((FILE *, int, rtx));
|
||||||
|
@ -772,10 +770,6 @@ arm_override_options ()
|
||||||
static void
|
static void
|
||||||
arm_add_gc_roots ()
|
arm_add_gc_roots ()
|
||||||
{
|
{
|
||||||
ggc_add_rtx_root (&arm_compare_op0, 1);
|
|
||||||
ggc_add_rtx_root (&arm_compare_op1, 1);
|
|
||||||
ggc_add_rtx_root (&arm_target_insn, 1); /* Not sure this is really a root. */
|
|
||||||
|
|
||||||
gcc_obstack_init(&minipool_obstack);
|
gcc_obstack_init(&minipool_obstack);
|
||||||
minipool_startobj = (char *) obstack_alloc (&minipool_obstack, 0);
|
minipool_startobj = (char *) obstack_alloc (&minipool_obstack, 0);
|
||||||
}
|
}
|
||||||
|
@ -10091,37 +10085,16 @@ thumb_unexpanded_epilogue ()
|
||||||
|
|
||||||
/* Functions to save and restore machine-specific function data. */
|
/* Functions to save and restore machine-specific function data. */
|
||||||
|
|
||||||
static void
|
static struct machine_function *
|
||||||
arm_mark_machine_status (p)
|
arm_init_machine_status ()
|
||||||
struct function * p;
|
|
||||||
{
|
{
|
||||||
machine_function *machine = p->machine;
|
struct machine_function *machine;
|
||||||
|
machine = (machine_function *) ggc_alloc_cleared (sizeof (machine_function));
|
||||||
|
|
||||||
if (machine)
|
#if ARM_FT_UNKNOWN != 0
|
||||||
ggc_mark_rtx (machine->eh_epilogue_sp_ofs);
|
machine->func_type = ARM_FT_UNKNOWN;
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
arm_init_machine_status (p)
|
|
||||||
struct function * p;
|
|
||||||
{
|
|
||||||
p->machine =
|
|
||||||
(machine_function *) xcalloc (1, sizeof (machine_function));
|
|
||||||
|
|
||||||
#if ARM_FT_UNKNOWWN != 0
|
|
||||||
((machine_function *) p->machine)->func_type = ARM_FT_UNKNOWN;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
return machine;
|
||||||
|
|
||||||
static void
|
|
||||||
arm_free_machine_status (p)
|
|
||||||
struct function * p;
|
|
||||||
{
|
|
||||||
if (p->machine)
|
|
||||||
{
|
|
||||||
free (p->machine);
|
|
||||||
p->machine = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return an RTX indicating where the return address to the
|
/* Return an RTX indicating where the return address to the
|
||||||
|
@ -10152,8 +10125,6 @@ arm_init_expanders ()
|
||||||
{
|
{
|
||||||
/* Arrange to initialize and mark the machine per-function status. */
|
/* Arrange to initialize and mark the machine per-function status. */
|
||||||
init_machine_status = arm_init_machine_status;
|
init_machine_status = arm_init_machine_status;
|
||||||
mark_machine_status = arm_mark_machine_status;
|
|
||||||
free_machine_status = arm_free_machine_status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate the rest of a function's prologue. */
|
/* Generate the rest of a function's prologue. */
|
||||||
|
@ -10851,10 +10822,11 @@ arm_strip_name_encoding (const char * name)
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rtx aof_pic_label;
|
||||||
|
|
||||||
#ifdef AOF_ASSEMBLER
|
#ifdef AOF_ASSEMBLER
|
||||||
/* Special functions only needed when producing AOF syntax assembler. */
|
/* Special functions only needed when producing AOF syntax assembler. */
|
||||||
|
|
||||||
rtx aof_pic_label = NULL_RTX;
|
|
||||||
struct pic_chain
|
struct pic_chain
|
||||||
{
|
{
|
||||||
struct pic_chain * next;
|
struct pic_chain * next;
|
||||||
|
@ -10872,10 +10844,6 @@ aof_pic_entry (x)
|
||||||
|
|
||||||
if (aof_pic_label == NULL_RTX)
|
if (aof_pic_label == NULL_RTX)
|
||||||
{
|
{
|
||||||
/* We mark this here and not in arm_add_gc_roots() to avoid
|
|
||||||
polluting even more code with ifdefs, and because it never
|
|
||||||
contains anything useful until we assign to it here. */
|
|
||||||
ggc_add_rtx_root (&aof_pic_label, 1);
|
|
||||||
aof_pic_label = gen_rtx_SYMBOL_REF (Pmode, "x$adcons");
|
aof_pic_label = gen_rtx_SYMBOL_REF (Pmode, "x$adcons");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -107,21 +107,22 @@ extern arm_cc arm_current_cc;
|
||||||
|
|
||||||
extern int arm_target_label;
|
extern int arm_target_label;
|
||||||
extern int arm_ccfsm_state;
|
extern int arm_ccfsm_state;
|
||||||
extern struct rtx_def * arm_target_insn;
|
extern GTY(()) rtx arm_target_insn;
|
||||||
/* Run-time compilation parameters selecting different hardware subsets. */
|
/* Run-time compilation parameters selecting different hardware subsets. */
|
||||||
extern int target_flags;
|
extern int target_flags;
|
||||||
/* The floating point instruction architecture, can be 2 or 3 */
|
/* The floating point instruction architecture, can be 2 or 3 */
|
||||||
extern const char * target_fp_name;
|
extern const char * target_fp_name;
|
||||||
/* Define the information needed to generate branch insns. This is
|
/* Define the information needed to generate branch insns. This is
|
||||||
stored from the compare operation. Note that we can't use "rtx" here
|
stored from the compare operation. */
|
||||||
since it hasn't been defined! */
|
extern GTY(()) rtx arm_compare_op0;
|
||||||
extern struct rtx_def * arm_compare_op0;
|
extern GTY(()) rtx arm_compare_op1;
|
||||||
extern struct rtx_def * arm_compare_op1;
|
|
||||||
/* The label of the current constant pool. */
|
/* The label of the current constant pool. */
|
||||||
extern struct rtx_def * pool_vector_label;
|
extern rtx pool_vector_label;
|
||||||
/* Set to 1 when a return insn is output, this means that the epilogue
|
/* Set to 1 when a return insn is output, this means that the epilogue
|
||||||
is not needed. */
|
is not needed. */
|
||||||
extern int return_used_this_function;
|
extern int return_used_this_function;
|
||||||
|
/* Used to produce AOF syntax assembler. */
|
||||||
|
extern GTY(()) rtx aof_pic_label;
|
||||||
|
|
||||||
/* Just in case configure has failed to define anything. */
|
/* Just in case configure has failed to define anything. */
|
||||||
#ifndef TARGET_CPU_DEFAULT
|
#ifndef TARGET_CPU_DEFAULT
|
||||||
|
@ -1412,10 +1413,10 @@ enum reg_class
|
||||||
|
|
||||||
/* A C structure for machine-specific, per-function data.
|
/* A C structure for machine-specific, per-function data.
|
||||||
This is added to the cfun structure. */
|
This is added to the cfun structure. */
|
||||||
typedef struct machine_function
|
typedef struct machine_function GTY(())
|
||||||
{
|
{
|
||||||
/* Additionsl stack adjustment in __builtin_eh_throw. */
|
/* Additionsl stack adjustment in __builtin_eh_throw. */
|
||||||
struct rtx_def *eh_epilogue_sp_ofs;
|
rtx eh_epilogue_sp_ofs;
|
||||||
/* Records if LR has to be saved for far jumps. */
|
/* Records if LR has to be saved for far jumps. */
|
||||||
int far_jump_used;
|
int far_jump_used;
|
||||||
/* Records if ARG_POINTER was ever live. */
|
/* Records if ARG_POINTER was ever live. */
|
||||||
|
|
|
@ -272,19 +272,19 @@ extern int valid_parallel_operands_5 PARAMS ((rtx *, enum machine_mode));
|
||||||
|
|
||||||
extern int valid_parallel_operands_6 PARAMS ((rtx *, enum machine_mode));
|
extern int valid_parallel_operands_6 PARAMS ((rtx *, enum machine_mode));
|
||||||
|
|
||||||
extern rtx smulhi3_libfunc;
|
extern GTY(()) rtx smulhi3_libfunc;
|
||||||
extern rtx umulhi3_libfunc;
|
extern GTY(()) rtx umulhi3_libfunc;
|
||||||
extern rtx fix_truncqfhi2_libfunc;
|
extern GTY(()) rtx fix_truncqfhi2_libfunc;
|
||||||
extern rtx fixuns_truncqfhi2_libfunc;
|
extern GTY(()) rtx fixuns_truncqfhi2_libfunc;
|
||||||
extern rtx fix_trunchfhi2_libfunc;
|
extern GTY(()) rtx fix_trunchfhi2_libfunc;
|
||||||
extern rtx fixuns_trunchfhi2_libfunc;
|
extern GTY(()) rtx fixuns_trunchfhi2_libfunc;
|
||||||
extern rtx floathiqf2_libfunc;
|
extern GTY(()) rtx floathiqf2_libfunc;
|
||||||
extern rtx floatunshiqf2_libfunc;
|
extern GTY(()) rtx floatunshiqf2_libfunc;
|
||||||
extern rtx floathihf2_libfunc;
|
extern GTY(()) rtx floathihf2_libfunc;
|
||||||
extern rtx floatunshihf2_libfunc;
|
extern GTY(()) rtx floatunshihf2_libfunc;
|
||||||
|
|
||||||
extern struct rtx_def *c4x_compare_op0; /* Operand 0 for comparisons. */
|
extern GTY(()) rtx c4x_compare_op0; /* Operand 0 for comparisons. */
|
||||||
extern struct rtx_def *c4x_compare_op1; /* Operand 1 for comparisons. */
|
extern GTY(()) rtx c4x_compare_op1; /* Operand 1 for comparisons. */
|
||||||
|
|
||||||
#endif /* RTX_CODE */
|
#endif /* RTX_CODE */
|
||||||
|
|
||||||
|
@ -303,7 +303,12 @@ extern void c4x_pr_FUNC_NEVER_RETURNS PARAMS ((cpp_reader *));
|
||||||
extern void c4x_pr_INTERRUPT PARAMS ((cpp_reader *));
|
extern void c4x_pr_INTERRUPT PARAMS ((cpp_reader *));
|
||||||
extern void c4x_pr_ignored PARAMS ((cpp_reader *));
|
extern void c4x_pr_ignored PARAMS ((cpp_reader *));
|
||||||
extern void c4x_init_pragma PARAMS ((int (*) (tree *)));
|
extern void c4x_init_pragma PARAMS ((int (*) (tree *)));
|
||||||
extern tree code_tree, data_tree, pure_tree, noreturn_tree, interrupt_tree;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern GTY(()) tree code_tree;
|
||||||
|
extern GTY(()) tree data_tree;
|
||||||
|
extern GTY(()) tree pure_tree;
|
||||||
|
extern GTY(()) tree noreturn_tree;
|
||||||
|
extern GTY(()) tree interrupt_tree;
|
||||||
|
|
||||||
#endif /* ! GCC_C4X_PROTOS_H */
|
#endif /* ! GCC_C4X_PROTOS_H */
|
||||||
|
|
|
@ -148,8 +148,8 @@ enum machine_mode c4x_caller_save_map[FIRST_PSEUDO_REGISTER] =
|
||||||
/* Test and compare insns in c4x.md store the information needed to
|
/* Test and compare insns in c4x.md store the information needed to
|
||||||
generate branch and scc insns here. */
|
generate branch and scc insns here. */
|
||||||
|
|
||||||
struct rtx_def *c4x_compare_op0 = NULL_RTX;
|
rtx c4x_compare_op0;
|
||||||
struct rtx_def *c4x_compare_op1 = NULL_RTX;
|
rtx c4x_compare_op1;
|
||||||
|
|
||||||
const char *c4x_rpts_cycles_string;
|
const char *c4x_rpts_cycles_string;
|
||||||
int c4x_rpts_cycles = 0; /* Max. cycles for RPTS. */
|
int c4x_rpts_cycles = 0; /* Max. cycles for RPTS. */
|
||||||
|
@ -165,7 +165,6 @@ tree noreturn_tree = NULL_TREE;
|
||||||
tree interrupt_tree = NULL_TREE;
|
tree interrupt_tree = NULL_TREE;
|
||||||
|
|
||||||
/* Forward declarations */
|
/* Forward declarations */
|
||||||
static void c4x_add_gc_roots PARAMS ((void));
|
|
||||||
static int c4x_isr_reg_used_p PARAMS ((unsigned int));
|
static int c4x_isr_reg_used_p PARAMS ((unsigned int));
|
||||||
static int c4x_leaf_function_p PARAMS ((void));
|
static int c4x_leaf_function_p PARAMS ((void));
|
||||||
static int c4x_assembler_function_p PARAMS ((void));
|
static int c4x_assembler_function_p PARAMS ((void));
|
||||||
|
@ -223,32 +222,6 @@ static void c4x_encode_section_info PARAMS ((tree, int));
|
||||||
|
|
||||||
struct gcc_target targetm = TARGET_INITIALIZER;
|
struct gcc_target targetm = TARGET_INITIALIZER;
|
||||||
|
|
||||||
/* Called to register all of our global variables with the garbage
|
|
||||||
collector. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
c4x_add_gc_roots ()
|
|
||||||
{
|
|
||||||
ggc_add_rtx_root (&c4x_compare_op0, 1);
|
|
||||||
ggc_add_rtx_root (&c4x_compare_op1, 1);
|
|
||||||
ggc_add_tree_root (&code_tree, 1);
|
|
||||||
ggc_add_tree_root (&data_tree, 1);
|
|
||||||
ggc_add_tree_root (&pure_tree, 1);
|
|
||||||
ggc_add_tree_root (&noreturn_tree, 1);
|
|
||||||
ggc_add_tree_root (&interrupt_tree, 1);
|
|
||||||
ggc_add_rtx_root (&smulhi3_libfunc, 1);
|
|
||||||
ggc_add_rtx_root (&umulhi3_libfunc, 1);
|
|
||||||
ggc_add_rtx_root (&fix_truncqfhi2_libfunc, 1);
|
|
||||||
ggc_add_rtx_root (&fixuns_truncqfhi2_libfunc, 1);
|
|
||||||
ggc_add_rtx_root (&fix_trunchfhi2_libfunc, 1);
|
|
||||||
ggc_add_rtx_root (&fixuns_trunchfhi2_libfunc, 1);
|
|
||||||
ggc_add_rtx_root (&floathiqf2_libfunc, 1);
|
|
||||||
ggc_add_rtx_root (&floatunshiqf2_libfunc, 1);
|
|
||||||
ggc_add_rtx_root (&floathihf2_libfunc, 1);
|
|
||||||
ggc_add_rtx_root (&floatunshihf2_libfunc, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Override command line options.
|
/* Override command line options.
|
||||||
Called once after all options have been parsed.
|
Called once after all options have been parsed.
|
||||||
Mostly we process the processor
|
Mostly we process the processor
|
||||||
|
@ -317,9 +290,6 @@ c4x_override_options ()
|
||||||
This provides compatibility with the old -mno-aliases option. */
|
This provides compatibility with the old -mno-aliases option. */
|
||||||
if (! TARGET_ALIASES && ! flag_argument_noalias)
|
if (! TARGET_ALIASES && ! flag_argument_noalias)
|
||||||
flag_argument_noalias = 1;
|
flag_argument_noalias = 1;
|
||||||
|
|
||||||
/* Register global variables with the garbage collector. */
|
|
||||||
c4x_add_gc_roots ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -5087,3 +5057,4 @@ c4x_asm_named_section (name, flags)
|
||||||
{
|
{
|
||||||
fprintf (asm_out_file, "\t.sect\t\"%s\"\n", name);
|
fprintf (asm_out_file, "\t.sect\t\"%s\"\n", name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ Boston, MA 02111-1307, USA. */
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/* Per-function machine data. */
|
/* Per-function machine data. */
|
||||||
struct machine_function
|
struct machine_function GTY(())
|
||||||
{
|
{
|
||||||
int needs_return_address_on_stack;
|
int needs_return_address_on_stack;
|
||||||
};
|
};
|
||||||
|
@ -85,7 +85,7 @@ static void cris_print_base PARAMS ((rtx, FILE *));
|
||||||
|
|
||||||
static void cris_print_index PARAMS ((rtx, FILE *));
|
static void cris_print_index PARAMS ((rtx, FILE *));
|
||||||
|
|
||||||
static void cris_init_machine_status PARAMS ((struct function *));
|
static struct machine_function * cris_init_machine_status PARAMS ((void));
|
||||||
|
|
||||||
static int cris_initial_frame_pointer_offset PARAMS ((void));
|
static int cris_initial_frame_pointer_offset PARAMS ((void));
|
||||||
|
|
||||||
|
@ -2697,11 +2697,10 @@ cris_init_expanders ()
|
||||||
|
|
||||||
/* Zero initialization is OK for all current fields. */
|
/* Zero initialization is OK for all current fields. */
|
||||||
|
|
||||||
static void
|
static struct machine_function *
|
||||||
cris_init_machine_status (p)
|
cris_init_machine_status ()
|
||||||
struct function *p;
|
|
||||||
{
|
{
|
||||||
p->machine = xcalloc (1, sizeof (struct machine_function));
|
return ggc_alloc_cleared (sizeof (struct machine_function));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Split a 2 word move (DI or presumably DF) into component parts.
|
/* Split a 2 word move (DI or presumably DF) into component parts.
|
||||||
|
@ -3129,6 +3128,8 @@ Prev_insn (insn)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "gt-cris.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Local variables:
|
* Local variables:
|
||||||
* eval: (c-set-style "gnu")
|
* eval: (c-set-style "gnu")
|
||||||
|
|
|
@ -39,3 +39,6 @@ $(LIB2FUNCS_EXTRA): $(CRIS_LIB1CSRC)
|
||||||
echo "#define L$$name" > tmp-$@ \
|
echo "#define L$$name" > tmp-$@ \
|
||||||
&& echo '#include "$<"' >> tmp-$@ \
|
&& echo '#include "$<"' >> tmp-$@ \
|
||||||
&& mv -f tmp-$@ $@
|
&& mv -f tmp-$@ $@
|
||||||
|
|
||||||
|
$(out_object_file): gt-cris.h
|
||||||
|
gt-cris.h : s-gtype ; @true
|
||||||
|
|
|
@ -140,8 +140,8 @@ extern void debug_stack_info PARAMS ((d30v_stack_t *));
|
||||||
/* Define the information needed to generate branch and scc insns. This is
|
/* Define the information needed to generate branch and scc insns. This is
|
||||||
stored from the compare operation. */
|
stored from the compare operation. */
|
||||||
|
|
||||||
extern struct rtx_def *d30v_compare_op0;
|
extern GTY(()) rtx d30v_compare_op0;
|
||||||
extern struct rtx_def *d30v_compare_op1;
|
extern GTY(()) rtx d30v_compare_op1;
|
||||||
|
|
||||||
/* Define the information needed to modify the epilogue for EH. */
|
/* Define the information needed to modify the epilogue for EH. */
|
||||||
|
|
||||||
|
|
|
@ -47,10 +47,7 @@
|
||||||
static void d30v_print_operand_memory_reference PARAMS ((FILE *, rtx));
|
static void d30v_print_operand_memory_reference PARAMS ((FILE *, rtx));
|
||||||
static void d30v_build_long_insn PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT,
|
static void d30v_build_long_insn PARAMS ((HOST_WIDE_INT, HOST_WIDE_INT,
|
||||||
rtx, rtx));
|
rtx, rtx));
|
||||||
static void d30v_add_gc_roots PARAMS ((void));
|
static struct machine_function * d30v_init_machine_status PARAMS ((void));
|
||||||
static void d30v_init_machine_status PARAMS ((struct function *));
|
|
||||||
static void d30v_mark_machine_status PARAMS ((struct function *));
|
|
||||||
static void d30v_free_machine_status PARAMS ((struct function *));
|
|
||||||
static void d30v_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
|
static void d30v_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
|
||||||
static void d30v_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
|
static void d30v_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
|
||||||
static int d30v_adjust_cost PARAMS ((rtx, rtx, rtx, int));
|
static int d30v_adjust_cost PARAMS ((rtx, rtx, rtx, int));
|
||||||
|
@ -298,8 +295,6 @@ override_options ()
|
||||||
reg_class_from_letter['x'] = F0_REGS;
|
reg_class_from_letter['x'] = F0_REGS;
|
||||||
reg_class_from_letter['y'] = F1_REGS;
|
reg_class_from_letter['y'] = F1_REGS;
|
||||||
reg_class_from_letter['z'] = OTHER_FLAG_REGS;
|
reg_class_from_letter['z'] = OTHER_FLAG_REGS;
|
||||||
|
|
||||||
d30v_add_gc_roots ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3482,35 +3477,10 @@ d30v_issue_rate ()
|
||||||
/* Routine to allocate, mark and free a per-function,
|
/* Routine to allocate, mark and free a per-function,
|
||||||
machine specific structure. */
|
machine specific structure. */
|
||||||
|
|
||||||
static void
|
static struct machine_function *
|
||||||
d30v_init_machine_status (p)
|
d30v_init_machine_status ()
|
||||||
struct function *p;
|
|
||||||
{
|
{
|
||||||
p->machine =
|
return ggc_alloc_cleared (sizeof (machine_function));
|
||||||
(machine_function *) xcalloc (1, sizeof (machine_function));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
d30v_mark_machine_status (p)
|
|
||||||
struct function * p;
|
|
||||||
{
|
|
||||||
if (p->machine == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
ggc_mark_rtx (p->machine->eh_epilogue_sp_ofs);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
d30v_free_machine_status (p)
|
|
||||||
struct function *p;
|
|
||||||
{
|
|
||||||
struct machine_function *machine = p->machine;
|
|
||||||
|
|
||||||
if (machine == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
free (machine);
|
|
||||||
p->machine = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do anything needed before RTL is emitted for each function. */
|
/* Do anything needed before RTL is emitted for each function. */
|
||||||
|
@ -3520,8 +3490,6 @@ d30v_init_expanders ()
|
||||||
{
|
{
|
||||||
/* Arrange to save and restore machine status around nested functions. */
|
/* Arrange to save and restore machine status around nested functions. */
|
||||||
init_machine_status = d30v_init_machine_status;
|
init_machine_status = d30v_init_machine_status;
|
||||||
mark_machine_status = d30v_mark_machine_status;
|
|
||||||
free_machine_status = d30v_free_machine_status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find the current function's return address.
|
/* Find the current function's return address.
|
||||||
|
@ -3536,13 +3504,3 @@ d30v_return_addr ()
|
||||||
{
|
{
|
||||||
return get_hard_reg_initial_val (Pmode, GPR_LINK);
|
return get_hard_reg_initial_val (Pmode, GPR_LINK);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called to register all of our global variables with the garbage
|
|
||||||
collector. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
d30v_add_gc_roots ()
|
|
||||||
{
|
|
||||||
ggc_add_rtx_root (&d30v_compare_op0, 1);
|
|
||||||
ggc_add_rtx_root (&d30v_compare_op1, 1);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1929,10 +1929,10 @@ typedef int CUMULATIVE_ARGS;
|
||||||
|
|
||||||
/* A C structure for machine-specific, per-function data.
|
/* A C structure for machine-specific, per-function data.
|
||||||
This is added to the cfun structure. */
|
This is added to the cfun structure. */
|
||||||
typedef struct machine_function
|
typedef struct machine_function GTY(())
|
||||||
{
|
{
|
||||||
/* Additionsl stack adjustment in __builtin_eh_throw. */
|
/* Additionsl stack adjustment in __builtin_eh_throw. */
|
||||||
struct rtx_def * eh_epilogue_sp_ofs;
|
rtx eh_epilogue_sp_ofs;
|
||||||
} machine_function;
|
} machine_function;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,8 +26,6 @@ extern char *machopic_function_base_name PARAMS ((void));
|
||||||
extern char *machopic_non_lazy_ptr_name PARAMS ((const char*));
|
extern char *machopic_non_lazy_ptr_name PARAMS ((const char*));
|
||||||
extern char *machopic_stub_name PARAMS ((const char*));
|
extern char *machopic_stub_name PARAMS ((const char*));
|
||||||
|
|
||||||
extern void machopic_add_gc_roots PARAMS ((void));
|
|
||||||
|
|
||||||
extern void machopic_picsymbol_stub_section PARAMS ((void));
|
extern void machopic_picsymbol_stub_section PARAMS ((void));
|
||||||
extern void machopic_symbol_stub_section PARAMS ((void));
|
extern void machopic_symbol_stub_section PARAMS ((void));
|
||||||
extern void machopic_lazy_symbol_ptr_section PARAMS ((void));
|
extern void machopic_lazy_symbol_ptr_section PARAMS ((void));
|
||||||
|
|
|
@ -67,7 +67,7 @@ name_needs_quotes (name)
|
||||||
/* This module assumes that (const (symbol_ref "foo")) is a legal pic
|
/* This module assumes that (const (symbol_ref "foo")) is a legal pic
|
||||||
reference, which will not be changed. */
|
reference, which will not be changed. */
|
||||||
|
|
||||||
static tree machopic_defined_list;
|
static GTY(()) tree machopic_defined_list;
|
||||||
|
|
||||||
enum machopic_addr_class
|
enum machopic_addr_class
|
||||||
machopic_classify_ident (ident)
|
machopic_classify_ident (ident)
|
||||||
|
@ -257,7 +257,7 @@ machopic_function_base_name ()
|
||||||
return function_base;
|
return function_base;
|
||||||
}
|
}
|
||||||
|
|
||||||
static tree machopic_non_lazy_pointers = NULL;
|
static GTY(()) tree machopic_non_lazy_pointers;
|
||||||
|
|
||||||
/* Return a non-lazy pointer name corresponding to the given name,
|
/* Return a non-lazy pointer name corresponding to the given name,
|
||||||
either by finding it in our list of pointer names, or by generating
|
either by finding it in our list of pointer names, or by generating
|
||||||
|
@ -321,17 +321,7 @@ machopic_non_lazy_ptr_name (name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static tree machopic_stubs = 0;
|
static GTY(()) tree machopic_stubs;
|
||||||
|
|
||||||
/* Make sure the GC knows about our homemade lists. */
|
|
||||||
|
|
||||||
void
|
|
||||||
machopic_add_gc_roots ()
|
|
||||||
{
|
|
||||||
ggc_add_tree_root (&machopic_defined_list, 1);
|
|
||||||
ggc_add_tree_root (&machopic_non_lazy_pointers, 1);
|
|
||||||
ggc_add_tree_root (&machopic_stubs, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return the name of the stub corresponding to the given name,
|
/* Return the name of the stub corresponding to the given name,
|
||||||
generating a new stub name if necessary. */
|
generating a new stub name if necessary. */
|
||||||
|
@ -1297,3 +1287,6 @@ machopic_asm_out_destructor (symbol, priority)
|
||||||
if (!flag_pic)
|
if (!flag_pic)
|
||||||
fprintf (asm_out_file, ".reference .destructors_used\n");
|
fprintf (asm_out_file, ".reference .destructors_used\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-darwin.h"
|
||||||
|
|
||||||
|
|
|
@ -1725,29 +1725,6 @@ override_options ()
|
||||||
rsect_const = tmp = (char *) xmalloc (strlen(".rsect ") +
|
rsect_const = tmp = (char *) xmalloc (strlen(".rsect ") +
|
||||||
strlen(const_seg_name) + 3);
|
strlen(const_seg_name) + 3);
|
||||||
sprintf (tmp, ".rsect \"%s\"", const_seg_name);
|
sprintf (tmp, ".rsect \"%s\"", const_seg_name);
|
||||||
|
|
||||||
/* Mark our global variables for GC. */
|
|
||||||
ggc_add_rtx_root (&dsp16xx_addhf3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_subhf3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_mulhf3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_divhf3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_cmphf3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_fixhfhi2_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_floathihf2_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_neghf2_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_mulhi3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_udivqi3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_udivhi3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_divqi3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_divhi3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_modqi3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_modhi3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_umodqi3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_umodhi3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_ashrhi3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_ashlhi3_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_ucmphi2_libcall, 1);
|
|
||||||
ggc_add_rtx_root (&dsp16xx_lshrhi3_libcall, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -31,29 +31,30 @@ extern const char *const_seg_name;
|
||||||
extern const char *rsect_const;
|
extern const char *rsect_const;
|
||||||
extern const char *chip_name;
|
extern const char *chip_name;
|
||||||
extern const char *save_chip_name;
|
extern const char *save_chip_name;
|
||||||
extern struct rtx_def *dsp16xx_compare_op0, *dsp16xx_compare_op1;
|
extern GTY(()) rtx dsp16xx_compare_op0;
|
||||||
extern struct rtx_def *dsp16xx_addhf3_libcall;
|
extern GTY(()) rtx dsp16xx_compare_op1;
|
||||||
extern struct rtx_def *dsp16xx_subhf3_libcall;
|
extern GTY(()) rtx dsp16xx_addhf3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_mulhf3_libcall;
|
extern GTY(()) rtx dsp16xx_subhf3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_divhf3_libcall;
|
extern GTY(()) rtx dsp16xx_mulhf3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_cmphf3_libcall;
|
extern GTY(()) rtx dsp16xx_divhf3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_fixhfhi2_libcall;
|
extern GTY(()) rtx dsp16xx_cmphf3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_floathihf2_libcall;
|
extern GTY(()) rtx dsp16xx_fixhfhi2_libcall;
|
||||||
extern struct rtx_def *dsp16xx_neghf2_libcall;
|
extern GTY(()) rtx dsp16xx_floathihf2_libcall;
|
||||||
extern struct rtx_def *dsp16xx_umulhi3_libcall;
|
extern GTY(()) rtx dsp16xx_neghf2_libcall;
|
||||||
extern struct rtx_def *dsp16xx_mulhi3_libcall;
|
extern GTY(()) rtx dsp16xx_umulhi3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_udivqi3_libcall;
|
extern GTY(()) rtx dsp16xx_mulhi3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_udivhi3_libcall;
|
extern GTY(()) rtx dsp16xx_udivqi3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_divqi3_libcall;
|
extern GTY(()) rtx dsp16xx_udivhi3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_divhi3_libcall;
|
extern GTY(()) rtx dsp16xx_divqi3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_modqi3_libcall;
|
extern GTY(()) rtx dsp16xx_divhi3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_modhi3_libcall;
|
extern GTY(()) rtx dsp16xx_modqi3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_umodqi3_libcall;
|
extern GTY(()) rtx dsp16xx_modhi3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_umodhi3_libcall;
|
extern GTY(()) rtx dsp16xx_umodqi3_libcall;
|
||||||
|
extern GTY(()) rtx dsp16xx_umodhi3_libcall;
|
||||||
|
|
||||||
extern struct rtx_def *dsp16xx_ashrhi3_libcall;
|
extern GTY(()) rtx dsp16xx_ashrhi3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_ashlhi3_libcall;
|
extern GTY(()) rtx dsp16xx_ashlhi3_libcall;
|
||||||
extern struct rtx_def *dsp16xx_lshrhi3_libcall;
|
extern GTY(()) rtx dsp16xx_lshrhi3_libcall;
|
||||||
|
|
||||||
/* RUN-TIME TARGET SPECIFICATION */
|
/* RUN-TIME TARGET SPECIFICATION */
|
||||||
#define DSP16XX 1
|
#define DSP16XX 1
|
||||||
|
|
|
@ -553,7 +553,7 @@ static char const tls_model_chars[] = " GLil";
|
||||||
#define X86_64_VARARGS_SIZE (REGPARM_MAX * UNITS_PER_WORD + SSE_REGPARM_MAX * 16)
|
#define X86_64_VARARGS_SIZE (REGPARM_MAX * UNITS_PER_WORD + SSE_REGPARM_MAX * 16)
|
||||||
|
|
||||||
/* Define the structure for the machine field in struct function. */
|
/* Define the structure for the machine field in struct function. */
|
||||||
struct machine_function
|
struct machine_function GTY(())
|
||||||
{
|
{
|
||||||
rtx stack_locals[(int) MAX_MACHINE_MODE][MAX_386_STACK_LOCALS];
|
rtx stack_locals[(int) MAX_MACHINE_MODE][MAX_386_STACK_LOCALS];
|
||||||
const char *some_ld_name;
|
const char *some_ld_name;
|
||||||
|
@ -680,9 +680,7 @@ static int ix86_agi_dependant PARAMS ((rtx, rtx, enum attr_type));
|
||||||
static enum attr_ppro_uops ix86_safe_ppro_uops PARAMS ((rtx));
|
static enum attr_ppro_uops ix86_safe_ppro_uops PARAMS ((rtx));
|
||||||
static void ix86_dump_ppro_packet PARAMS ((FILE *));
|
static void ix86_dump_ppro_packet PARAMS ((FILE *));
|
||||||
static void ix86_reorder_insn PARAMS ((rtx *, rtx *));
|
static void ix86_reorder_insn PARAMS ((rtx *, rtx *));
|
||||||
static void ix86_init_machine_status PARAMS ((struct function *));
|
static struct machine_function * ix86_init_machine_status PARAMS ((void));
|
||||||
static void ix86_mark_machine_status PARAMS ((struct function *));
|
|
||||||
static void ix86_free_machine_status PARAMS ((struct function *));
|
|
||||||
static int ix86_split_to_parts PARAMS ((rtx, rtx *, enum machine_mode));
|
static int ix86_split_to_parts PARAMS ((rtx, rtx *, enum machine_mode));
|
||||||
static int ix86_nsaved_regs PARAMS ((void));
|
static int ix86_nsaved_regs PARAMS ((void));
|
||||||
static void ix86_emit_save_regs PARAMS ((void));
|
static void ix86_emit_save_regs PARAMS ((void));
|
||||||
|
@ -1042,8 +1040,6 @@ override_options ()
|
||||||
|
|
||||||
/* Arrange to set up i386_stack_locals for all functions. */
|
/* Arrange to set up i386_stack_locals for all functions. */
|
||||||
init_machine_status = ix86_init_machine_status;
|
init_machine_status = ix86_init_machine_status;
|
||||||
mark_machine_status = ix86_mark_machine_status;
|
|
||||||
free_machine_status = ix86_free_machine_status;
|
|
||||||
|
|
||||||
/* Validate -mregparm= value. */
|
/* Validate -mregparm= value. */
|
||||||
if (ix86_regparm_string)
|
if (ix86_regparm_string)
|
||||||
|
@ -10636,38 +10632,10 @@ ix86_expand_call (retval, fnaddr, callarg1, callarg2, pop)
|
||||||
This is called from INIT_EXPANDERS once before RTL is emitted for each
|
This is called from INIT_EXPANDERS once before RTL is emitted for each
|
||||||
function. */
|
function. */
|
||||||
|
|
||||||
static void
|
static struct machine_function *
|
||||||
ix86_init_machine_status (p)
|
ix86_init_machine_status ()
|
||||||
struct function *p;
|
|
||||||
{
|
{
|
||||||
p->machine = (struct machine_function *)
|
return ggc_alloc_cleared (sizeof (struct machine_function));
|
||||||
xcalloc (1, sizeof (struct machine_function));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Mark machine specific bits of P for GC. */
|
|
||||||
static void
|
|
||||||
ix86_mark_machine_status (p)
|
|
||||||
struct function *p;
|
|
||||||
{
|
|
||||||
struct machine_function *machine = p->machine;
|
|
||||||
enum machine_mode mode;
|
|
||||||
int n;
|
|
||||||
|
|
||||||
if (! machine)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (mode = VOIDmode; (int) mode < (int) MAX_MACHINE_MODE;
|
|
||||||
mode = (enum machine_mode) ((int) mode + 1))
|
|
||||||
for (n = 0; n < MAX_386_STACK_LOCALS; n++)
|
|
||||||
ggc_mark_rtx (machine->stack_locals[(int) mode][n]);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
ix86_free_machine_status (p)
|
|
||||||
struct function *p;
|
|
||||||
{
|
|
||||||
free (p->machine);
|
|
||||||
p->machine = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return a MEM corresponding to a stack slot with mode MODE.
|
/* Return a MEM corresponding to a stack slot with mode MODE.
|
||||||
|
@ -10693,20 +10661,19 @@ assign_386_stack_local (mode, n)
|
||||||
|
|
||||||
/* Construct the SYMBOL_REF for the tls_get_addr function. */
|
/* Construct the SYMBOL_REF for the tls_get_addr function. */
|
||||||
|
|
||||||
|
static GTY(()) rtx ix86_tls_symbol;
|
||||||
rtx
|
rtx
|
||||||
ix86_tls_get_addr ()
|
ix86_tls_get_addr ()
|
||||||
{
|
{
|
||||||
static rtx symbol;
|
|
||||||
|
|
||||||
if (!symbol)
|
if (!ix86_tls_symbol)
|
||||||
{
|
{
|
||||||
symbol = gen_rtx_SYMBOL_REF (Pmode, (TARGET_GNU_TLS
|
ix86_tls_symbol = gen_rtx_SYMBOL_REF (Pmode, (TARGET_GNU_TLS
|
||||||
? "___tls_get_addr"
|
? "___tls_get_addr"
|
||||||
: "__tls_get_addr"));
|
: "__tls_get_addr"));
|
||||||
ggc_add_rtx_root (&symbol, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return symbol;
|
return ix86_tls_symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate the length of the memory address in the instruction
|
/* Calculate the length of the memory address in the instruction
|
||||||
|
@ -13948,3 +13915,5 @@ x86_output_mi_thunk (file, delta, function)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-i386.h"
|
||||||
|
|
|
@ -21,7 +21,8 @@ Boston, MA 02111-1307, USA. */
|
||||||
/* Variables defined in ia64.c. */
|
/* Variables defined in ia64.c. */
|
||||||
|
|
||||||
#ifdef RTX_CODE
|
#ifdef RTX_CODE
|
||||||
extern rtx ia64_compare_op0, ia64_compare_op1;
|
extern GTY(()) rtx ia64_compare_op0;
|
||||||
|
extern GTY(()) rtx ia64_compare_op1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Functions defined in ia64.c */
|
/* Functions defined in ia64.c */
|
||||||
|
|
|
@ -127,10 +127,7 @@ static rtx gen_fr_restore_x PARAMS ((rtx, rtx, rtx));
|
||||||
|
|
||||||
static enum machine_mode hfa_element_mode PARAMS ((tree, int));
|
static enum machine_mode hfa_element_mode PARAMS ((tree, int));
|
||||||
static void fix_range PARAMS ((const char *));
|
static void fix_range PARAMS ((const char *));
|
||||||
static void ia64_add_gc_roots PARAMS ((void));
|
static struct machine_function * ia64_init_machine_status PARAMS ((void));
|
||||||
static void ia64_init_machine_status PARAMS ((struct function *));
|
|
||||||
static void ia64_mark_machine_status PARAMS ((struct function *));
|
|
||||||
static void ia64_free_machine_status PARAMS ((struct function *));
|
|
||||||
static void emit_insn_group_barriers PARAMS ((FILE *, rtx));
|
static void emit_insn_group_barriers PARAMS ((FILE *, rtx));
|
||||||
static void emit_all_insn_group_barriers PARAMS ((FILE *, rtx));
|
static void emit_all_insn_group_barriers PARAMS ((FILE *, rtx));
|
||||||
static void emit_predicate_relation_info PARAMS ((void));
|
static void emit_predicate_relation_info PARAMS ((void));
|
||||||
|
@ -1044,27 +1041,25 @@ ia64_expand_load_address (dest, src, scratch)
|
||||||
emit_move_insn (dest, temp);
|
emit_move_insn (dest, temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GTY(()) rtx gen_tls_tga;
|
||||||
static rtx
|
static rtx
|
||||||
gen_tls_get_addr ()
|
gen_tls_get_addr ()
|
||||||
{
|
{
|
||||||
static rtx tga;
|
if (!gen_tls_tga)
|
||||||
if (!tga)
|
|
||||||
{
|
{
|
||||||
tga = init_one_libfunc ("__tls_get_addr");
|
gen_tls_tga = init_one_libfunc ("__tls_get_addr");
|
||||||
ggc_add_rtx_root (&tga, 1);
|
|
||||||
}
|
}
|
||||||
return tga;
|
return gen_tls_tga;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GTY(()) rtx thread_pointer_rtx;
|
||||||
static rtx
|
static rtx
|
||||||
gen_thread_pointer ()
|
gen_thread_pointer ()
|
||||||
{
|
{
|
||||||
static rtx tp;
|
if (!thread_pointer_rtx)
|
||||||
if (!tp)
|
|
||||||
{
|
{
|
||||||
tp = gen_rtx_REG (Pmode, 13);
|
thread_pointer_rtx = gen_rtx_REG (Pmode, 13);
|
||||||
RTX_UNCHANGING_P (tp);
|
RTX_UNCHANGING_P (thread_pointer_rtx);
|
||||||
ggc_add_rtx_root (&tp, 1);
|
|
||||||
}
|
}
|
||||||
return tp;
|
return tp;
|
||||||
}
|
}
|
||||||
|
@ -4146,44 +4141,10 @@ fix_range (const_str)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called to register all of our global variables with the garbage
|
static struct machine_function *
|
||||||
collector. */
|
ia64_init_machine_status ()
|
||||||
|
|
||||||
static void
|
|
||||||
ia64_add_gc_roots ()
|
|
||||||
{
|
{
|
||||||
ggc_add_rtx_root (&ia64_compare_op0, 1);
|
return ggc_alloc_cleared (sizeof (struct machine_function));
|
||||||
ggc_add_rtx_root (&ia64_compare_op1, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
ia64_init_machine_status (p)
|
|
||||||
struct function *p;
|
|
||||||
{
|
|
||||||
p->machine =
|
|
||||||
(struct machine_function *) xcalloc (1, sizeof (struct machine_function));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
ia64_mark_machine_status (p)
|
|
||||||
struct function *p;
|
|
||||||
{
|
|
||||||
struct machine_function *machine = p->machine;
|
|
||||||
|
|
||||||
if (machine)
|
|
||||||
{
|
|
||||||
ggc_mark_rtx (machine->ia64_eh_epilogue_sp);
|
|
||||||
ggc_mark_rtx (machine->ia64_eh_epilogue_bsp);
|
|
||||||
ggc_mark_rtx (machine->ia64_gp_save);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
ia64_free_machine_status (p)
|
|
||||||
struct function *p;
|
|
||||||
{
|
|
||||||
free (p->machine);
|
|
||||||
p->machine = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle TARGET_OPTIONS switches. */
|
/* Handle TARGET_OPTIONS switches. */
|
||||||
|
@ -4219,10 +4180,6 @@ ia64_override_options ()
|
||||||
ia64_section_threshold = g_switch_set ? g_switch_value : IA64_DEFAULT_GVALUE;
|
ia64_section_threshold = g_switch_set ? g_switch_value : IA64_DEFAULT_GVALUE;
|
||||||
|
|
||||||
init_machine_status = ia64_init_machine_status;
|
init_machine_status = ia64_init_machine_status;
|
||||||
mark_machine_status = ia64_mark_machine_status;
|
|
||||||
free_machine_status = ia64_free_machine_status;
|
|
||||||
|
|
||||||
ia64_add_gc_roots ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum attr_itanium_requires_unit0 ia64_safe_itanium_requires_unit0 PARAMS((rtx));
|
static enum attr_itanium_requires_unit0 ia64_safe_itanium_requires_unit0 PARAMS((rtx));
|
||||||
|
@ -8161,3 +8118,5 @@ ia64_aix_select_rtx_section (mode, x, align)
|
||||||
ia64_select_rtx_section (mode, x, align);
|
ia64_select_rtx_section (mode, x, align);
|
||||||
flag_pic = save_pic;
|
flag_pic = save_pic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-ia64.h"
|
||||||
|
|
|
@ -2440,16 +2440,16 @@ extern int ia64_final_schedule;
|
||||||
#define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 15 : INVALID_REGNUM)
|
#define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 15 : INVALID_REGNUM)
|
||||||
|
|
||||||
/* This function contains machine specific function data. */
|
/* This function contains machine specific function data. */
|
||||||
struct machine_function
|
struct machine_function GTY(())
|
||||||
{
|
{
|
||||||
/* The new stack pointer when unwinding from EH. */
|
/* The new stack pointer when unwinding from EH. */
|
||||||
struct rtx_def* ia64_eh_epilogue_sp;
|
rtx ia64_eh_epilogue_sp;
|
||||||
|
|
||||||
/* The new bsp value when unwinding from EH. */
|
/* The new bsp value when unwinding from EH. */
|
||||||
struct rtx_def* ia64_eh_epilogue_bsp;
|
rtx ia64_eh_epilogue_bsp;
|
||||||
|
|
||||||
/* The GP value save register. */
|
/* The GP value save register. */
|
||||||
struct rtx_def* ia64_gp_save;
|
rtx ia64_gp_save;
|
||||||
|
|
||||||
/* The number of varargs registers to save. */
|
/* The number of varargs registers to save. */
|
||||||
int n_varargs;
|
int n_varargs;
|
||||||
|
|
|
@ -43,10 +43,15 @@ extern void m68hc11_function_arg_advance PARAMS((CUMULATIVE_ARGS*,
|
||||||
#ifdef RTX_CODE
|
#ifdef RTX_CODE
|
||||||
extern rtx m68hc11_compare_op0;
|
extern rtx m68hc11_compare_op0;
|
||||||
extern rtx m68hc11_compare_op1;
|
extern rtx m68hc11_compare_op1;
|
||||||
extern rtx m68hc11_soft_tmp_reg;
|
extern GTY(()) rtx m68hc11_soft_tmp_reg;
|
||||||
extern rtx iy_reg;
|
extern GTY(()) rtx ix_reg;
|
||||||
extern rtx ix_reg;
|
extern GTY(()) rtx iy_reg;
|
||||||
extern rtx d_reg;
|
extern GTY(()) rtx d_reg;
|
||||||
|
extern GTY(()) rtx da_reg;
|
||||||
|
extern GTY(()) rtx stack_push_word;
|
||||||
|
extern GTY(()) rtx stack_pop_word;
|
||||||
|
extern GTY(()) rtx z_reg;
|
||||||
|
extern GTY(()) rtx z_reg_qi;
|
||||||
|
|
||||||
extern void m68hc11_initialize_trampoline PARAMS((rtx, rtx, rtx));
|
extern void m68hc11_initialize_trampoline PARAMS((rtx, rtx, rtx));
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,6 @@ static tree m68hc11_handle_fntype_attribute PARAMS ((tree *, tree, tree, int, bo
|
||||||
const struct attribute_spec m68hc11_attribute_table[];
|
const struct attribute_spec m68hc11_attribute_table[];
|
||||||
|
|
||||||
void create_regs_rtx PARAMS ((void));
|
void create_regs_rtx PARAMS ((void));
|
||||||
static void m68hc11_add_gc_roots PARAMS ((void));
|
|
||||||
|
|
||||||
static void asm_print_register PARAMS ((FILE *, int));
|
static void asm_print_register PARAMS ((FILE *, int));
|
||||||
static void m68hc11_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
|
static void m68hc11_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
|
||||||
|
@ -94,7 +93,7 @@ rtx da_reg;
|
||||||
rtx stack_push_word;
|
rtx stack_push_word;
|
||||||
rtx stack_pop_word;
|
rtx stack_pop_word;
|
||||||
static int regs_inited = 0;
|
static int regs_inited = 0;
|
||||||
static rtx z_reg;
|
rtx z_reg;
|
||||||
|
|
||||||
/* Set to 1 by expand_prologue() when the function is an interrupt handler. */
|
/* Set to 1 by expand_prologue() when the function is an interrupt handler. */
|
||||||
int current_function_interrupt;
|
int current_function_interrupt;
|
||||||
|
@ -229,8 +228,6 @@ struct gcc_target targetm = TARGET_INITIALIZER;
|
||||||
int
|
int
|
||||||
m68hc11_override_options ()
|
m68hc11_override_options ()
|
||||||
{
|
{
|
||||||
m68hc11_add_gc_roots ();
|
|
||||||
|
|
||||||
memset (m68hc11_reg_valid_for_index, 0,
|
memset (m68hc11_reg_valid_for_index, 0,
|
||||||
sizeof (m68hc11_reg_valid_for_index));
|
sizeof (m68hc11_reg_valid_for_index));
|
||||||
memset (m68hc11_reg_valid_for_base, 0, sizeof (m68hc11_reg_valid_for_base));
|
memset (m68hc11_reg_valid_for_base, 0, sizeof (m68hc11_reg_valid_for_base));
|
||||||
|
@ -4005,7 +4002,7 @@ struct replace_info
|
||||||
int z_loaded_with_sp;
|
int z_loaded_with_sp;
|
||||||
};
|
};
|
||||||
|
|
||||||
static rtx z_reg_qi;
|
rtx z_reg_qi;
|
||||||
|
|
||||||
static int m68hc11_check_z_replacement PARAMS ((rtx, struct replace_info *));
|
static int m68hc11_check_z_replacement PARAMS ((rtx, struct replace_info *));
|
||||||
static void m68hc11_find_z_replacement PARAMS ((rtx, struct replace_info *));
|
static void m68hc11_find_z_replacement PARAMS ((rtx, struct replace_info *));
|
||||||
|
@ -5414,20 +5411,6 @@ m68hc11_asm_file_start (out, main_file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
m68hc11_add_gc_roots ()
|
|
||||||
{
|
|
||||||
ggc_add_rtx_root (&m68hc11_soft_tmp_reg, 1);
|
|
||||||
ggc_add_rtx_root (&ix_reg, 1);
|
|
||||||
ggc_add_rtx_root (&iy_reg, 1);
|
|
||||||
ggc_add_rtx_root (&d_reg, 1);
|
|
||||||
ggc_add_rtx_root (&da_reg, 1);
|
|
||||||
ggc_add_rtx_root (&z_reg, 1);
|
|
||||||
ggc_add_rtx_root (&z_reg_qi, 1);
|
|
||||||
ggc_add_rtx_root (&stack_push_word, 1);
|
|
||||||
ggc_add_rtx_root (&stack_pop_word, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
m68hc11_asm_out_constructor (symbol, priority)
|
m68hc11_asm_out_constructor (symbol, priority)
|
||||||
rtx symbol;
|
rtx symbol;
|
||||||
|
|
|
@ -49,8 +49,8 @@ extern rtx mcore_function_value PARAMS ((tree, tree));
|
||||||
|
|
||||||
#ifdef RTX_CODE
|
#ifdef RTX_CODE
|
||||||
|
|
||||||
extern rtx arch_compare_op0;
|
extern GTY(()) rtx arch_compare_op0;
|
||||||
extern rtx arch_compare_op1;
|
extern GTY(()) rtx arch_compare_op1;
|
||||||
|
|
||||||
extern const char * mcore_output_bclri PARAMS ((rtx, int));
|
extern const char * mcore_output_bclri PARAMS ((rtx, int));
|
||||||
extern const char * mcore_output_bseti PARAMS ((rtx, int));
|
extern const char * mcore_output_bseti PARAMS ((rtx, int));
|
||||||
|
|
|
@ -125,7 +125,6 @@ static cond_type is_cond_candidate PARAMS ((rtx));
|
||||||
static rtx emit_new_cond_insn PARAMS ((rtx, int));
|
static rtx emit_new_cond_insn PARAMS ((rtx, int));
|
||||||
static rtx conditionalize_block PARAMS ((rtx));
|
static rtx conditionalize_block PARAMS ((rtx));
|
||||||
static void conditionalize_optimization PARAMS ((rtx));
|
static void conditionalize_optimization PARAMS ((rtx));
|
||||||
static void mcore_add_gc_roots PARAMS ((void));
|
|
||||||
static rtx handle_structs_in_regs PARAMS ((enum machine_mode, tree, int));
|
static rtx handle_structs_in_regs PARAMS ((enum machine_mode, tree, int));
|
||||||
static void mcore_mark_dllexport PARAMS ((tree));
|
static void mcore_mark_dllexport PARAMS ((tree));
|
||||||
static void mcore_mark_dllimport PARAMS ((tree));
|
static void mcore_mark_dllimport PARAMS ((tree));
|
||||||
|
@ -3069,15 +3068,6 @@ mcore_is_same_reg (x, y)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called to register all of our global variables with the garbage
|
|
||||||
collector. */
|
|
||||||
static void
|
|
||||||
mcore_add_gc_roots ()
|
|
||||||
{
|
|
||||||
ggc_add_rtx_root (&arch_compare_op0, 1);
|
|
||||||
ggc_add_rtx_root (&arch_compare_op1, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
mcore_override_options ()
|
mcore_override_options ()
|
||||||
{
|
{
|
||||||
|
@ -3096,8 +3086,6 @@ mcore_override_options ()
|
||||||
/* Only the m340 supports little endian code. */
|
/* Only the m340 supports little endian code. */
|
||||||
if (TARGET_LITTLE_END && ! TARGET_M340)
|
if (TARGET_LITTLE_END && ! TARGET_M340)
|
||||||
target_flags |= M340_BIT;
|
target_flags |= M340_BIT;
|
||||||
|
|
||||||
mcore_add_gc_roots ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -124,7 +124,6 @@ static rtx mips_find_symbol PARAMS ((rtx));
|
||||||
static void abort_with_insn PARAMS ((rtx, const char *))
|
static void abort_with_insn PARAMS ((rtx, const char *))
|
||||||
ATTRIBUTE_NORETURN;
|
ATTRIBUTE_NORETURN;
|
||||||
static int symbolic_expression_p PARAMS ((rtx));
|
static int symbolic_expression_p PARAMS ((rtx));
|
||||||
static void mips_add_gc_roots PARAMS ((void));
|
|
||||||
static bool mips_assemble_integer PARAMS ((rtx, unsigned int, int));
|
static bool mips_assemble_integer PARAMS ((rtx, unsigned int, int));
|
||||||
static void mips_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
|
static void mips_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
|
||||||
static void mips_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
|
static void mips_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
|
||||||
|
@ -143,9 +142,7 @@ static int iris6_section_align_1 PARAMS ((void **, void *));
|
||||||
static int mips_adjust_cost PARAMS ((rtx, rtx, rtx, int));
|
static int mips_adjust_cost PARAMS ((rtx, rtx, rtx, int));
|
||||||
static int mips_issue_rate PARAMS ((void));
|
static int mips_issue_rate PARAMS ((void));
|
||||||
|
|
||||||
static void mips_init_machine_status PARAMS ((struct function *));
|
static struct machine_function * mips_init_machine_status PARAMS ((void));
|
||||||
static void mips_free_machine_status PARAMS ((struct function *));
|
|
||||||
static void mips_mark_machine_status PARAMS ((struct function *));
|
|
||||||
static void mips_select_section PARAMS ((tree, int, unsigned HOST_WIDE_INT))
|
static void mips_select_section PARAMS ((tree, int, unsigned HOST_WIDE_INT))
|
||||||
ATTRIBUTE_UNUSED;
|
ATTRIBUTE_UNUSED;
|
||||||
static void mips_unique_section PARAMS ((tree, int))
|
static void mips_unique_section PARAMS ((tree, int))
|
||||||
|
@ -154,7 +151,7 @@ static void mips_select_rtx_section PARAMS ((enum machine_mode, rtx,
|
||||||
unsigned HOST_WIDE_INT));
|
unsigned HOST_WIDE_INT));
|
||||||
static void mips_encode_section_info PARAMS ((tree, int));
|
static void mips_encode_section_info PARAMS ((tree, int));
|
||||||
|
|
||||||
struct machine_function {
|
struct machine_function GTY(()) {
|
||||||
/* Pseudo-reg holding the address of the current function when
|
/* Pseudo-reg holding the address of the current function when
|
||||||
generating embedded PIC code. Created by LEGITIMIZE_ADDRESS,
|
generating embedded PIC code. Created by LEGITIMIZE_ADDRESS,
|
||||||
used by mips_finalize_pic if it was created. */
|
used by mips_finalize_pic if it was created. */
|
||||||
|
@ -5435,44 +5432,16 @@ override_options ()
|
||||||
align_functions = 8;
|
align_functions = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Register global variables with the garbage collector. */
|
/* Function to allocate machine-dependent function status. */
|
||||||
mips_add_gc_roots ();
|
|
||||||
|
|
||||||
/* Functions to allocate, mark and deallocate machine-dependent
|
|
||||||
function status. */
|
|
||||||
init_machine_status = &mips_init_machine_status;
|
init_machine_status = &mips_init_machine_status;
|
||||||
free_machine_status = &mips_free_machine_status;
|
|
||||||
mark_machine_status = &mips_mark_machine_status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate a chunk of memory for per-function machine-dependent data. */
|
/* Allocate a chunk of memory for per-function machine-dependent data. */
|
||||||
static void
|
static struct machine_function *
|
||||||
mips_init_machine_status (fn)
|
mips_init_machine_status ()
|
||||||
struct function *fn;
|
|
||||||
{
|
{
|
||||||
fn->machine = ((struct machine_function *)
|
return ((struct machine_function *)
|
||||||
xcalloc (1, sizeof (struct machine_function)));
|
ggc_alloc_cleared (sizeof (struct machine_function)));
|
||||||
}
|
|
||||||
|
|
||||||
/* Release the chunk of memory for per-function machine-dependent data. */
|
|
||||||
static void
|
|
||||||
mips_free_machine_status (fn)
|
|
||||||
struct function *fn;
|
|
||||||
{
|
|
||||||
free (fn->machine);
|
|
||||||
fn->machine = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Mark per-function machine-dependent data. */
|
|
||||||
static void
|
|
||||||
mips_mark_machine_status (fn)
|
|
||||||
struct function *fn;
|
|
||||||
{
|
|
||||||
if (fn->machine)
|
|
||||||
{
|
|
||||||
ggc_mark_rtx (fn->machine->embedded_pic_fnaddr_rtx);
|
|
||||||
ggc_mark_rtx (fn->machine->mips16_gp_pseudo_rtx);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* On the mips16, we want to allocate $24 (T_REG) before other
|
/* On the mips16, we want to allocate $24 (T_REG) before other
|
||||||
|
@ -10128,19 +10097,6 @@ mips_output_conditional_branch (insn,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called to register all of our global variables with the garbage
|
|
||||||
collector. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
mips_add_gc_roots ()
|
|
||||||
{
|
|
||||||
ggc_add_rtx_root (&mips_load_reg, 1);
|
|
||||||
ggc_add_rtx_root (&mips_load_reg2, 1);
|
|
||||||
ggc_add_rtx_root (&mips_load_reg3, 1);
|
|
||||||
ggc_add_rtx_root (&mips_load_reg4, 1);
|
|
||||||
ggc_add_rtx_root (branch_cmp, ARRAY_SIZE (branch_cmp));
|
|
||||||
}
|
|
||||||
|
|
||||||
static enum processor_type
|
static enum processor_type
|
||||||
mips_parse_cpu (cpu_string)
|
mips_parse_cpu (cpu_string)
|
||||||
const char *cpu_string;
|
const char *cpu_string;
|
||||||
|
@ -10547,3 +10503,5 @@ iris6_asm_file_end (stream)
|
||||||
mips_asm_file_end (stream);
|
mips_asm_file_end (stream);
|
||||||
}
|
}
|
||||||
#endif /* TARGET_IRIX6 */
|
#endif /* TARGET_IRIX6 */
|
||||||
|
|
||||||
|
#include "gt-mips.h"
|
||||||
|
|
|
@ -137,7 +137,7 @@ extern int set_noat; /* # of nested .set noat's */
|
||||||
extern int set_volatile; /* # of nested .set volatile's */
|
extern int set_volatile; /* # of nested .set volatile's */
|
||||||
extern int mips_branch_likely; /* emit 'l' after br (branch likely) */
|
extern int mips_branch_likely; /* emit 'l' after br (branch likely) */
|
||||||
extern int mips_dbx_regno[]; /* Map register # to debug register # */
|
extern int mips_dbx_regno[]; /* Map register # to debug register # */
|
||||||
extern struct rtx_def *branch_cmp[2]; /* operands for compare */
|
extern GTY(()) rtx branch_cmp[2]; /* operands for compare */
|
||||||
extern enum cmp_type branch_type; /* what type of branch to use */
|
extern enum cmp_type branch_type; /* what type of branch to use */
|
||||||
extern enum processor_type mips_arch; /* which cpu to codegen for */
|
extern enum processor_type mips_arch; /* which cpu to codegen for */
|
||||||
extern enum processor_type mips_tune; /* which cpu to schedule for */
|
extern enum processor_type mips_tune; /* which cpu to schedule for */
|
||||||
|
@ -162,10 +162,10 @@ extern int dslots_jump_total; /* total # jump related delay slots */
|
||||||
extern int dslots_jump_filled; /* # filled jump delay slots */
|
extern int dslots_jump_filled; /* # filled jump delay slots */
|
||||||
extern int dslots_number_nops; /* # of nops needed by previous insn */
|
extern int dslots_number_nops; /* # of nops needed by previous insn */
|
||||||
extern int num_refs[3]; /* # 1/2/3 word references */
|
extern int num_refs[3]; /* # 1/2/3 word references */
|
||||||
extern struct rtx_def *mips_load_reg; /* register to check for load delay */
|
extern GTY(()) rtx mips_load_reg; /* register to check for load delay */
|
||||||
extern struct rtx_def *mips_load_reg2; /* 2nd reg to check for load delay */
|
extern GTY(()) rtx mips_load_reg2; /* 2nd reg to check for load delay */
|
||||||
extern struct rtx_def *mips_load_reg3; /* 3rd reg to check for load delay */
|
extern GTY(()) rtx mips_load_reg3; /* 3rd reg to check for load delay */
|
||||||
extern struct rtx_def *mips_load_reg4; /* 4th reg to check for load delay */
|
extern GTY(()) rtx mips_load_reg4; /* 4th reg to check for load delay */
|
||||||
extern int mips_string_length; /* length of strings for mips16 */
|
extern int mips_string_length; /* length of strings for mips16 */
|
||||||
|
|
||||||
/* Functions to change what output section we are using. */
|
/* Functions to change what output section we are using. */
|
||||||
|
@ -2790,7 +2790,7 @@ typedef struct mips_args {
|
||||||
the shift patterns, and function_arg, which returns them when given
|
the shift patterns, and function_arg, which returns them when given
|
||||||
a VOIDmode argument. */
|
a VOIDmode argument. */
|
||||||
unsigned int num_adjusts;
|
unsigned int num_adjusts;
|
||||||
struct rtx_def *adjust[MAX_ARGS_IN_REGISTERS];
|
rtx adjust[MAX_ARGS_IN_REGISTERS];
|
||||||
} CUMULATIVE_ARGS;
|
} CUMULATIVE_ARGS;
|
||||||
|
|
||||||
/* Initialize a variable CUM of type CUMULATIVE_ARGS
|
/* Initialize a variable CUM of type CUMULATIVE_ARGS
|
||||||
|
|
|
@ -98,6 +98,7 @@ static void mmix_output_condition PARAMS ((FILE *, rtx, int));
|
||||||
static HOST_WIDEST_INT mmix_intval PARAMS ((rtx));
|
static HOST_WIDEST_INT mmix_intval PARAMS ((rtx));
|
||||||
static void mmix_output_octa PARAMS ((FILE *, HOST_WIDEST_INT, int));
|
static void mmix_output_octa PARAMS ((FILE *, HOST_WIDEST_INT, int));
|
||||||
static bool mmix_assemble_integer PARAMS ((rtx, unsigned int, int));
|
static bool mmix_assemble_integer PARAMS ((rtx, unsigned int, int));
|
||||||
|
static struct machine_function * mmix_init_machine_status PARAMS ((void));
|
||||||
static void mmix_init_machine_status PARAMS ((struct function *));
|
static void mmix_init_machine_status PARAMS ((struct function *));
|
||||||
static void mmix_encode_section_info PARAMS ((tree, int));
|
static void mmix_encode_section_info PARAMS ((tree, int));
|
||||||
static const char *mmix_strip_name_encoding PARAMS ((const char *));
|
static const char *mmix_strip_name_encoding PARAMS ((const char *));
|
||||||
|
@ -155,11 +156,6 @@ mmix_override_options ()
|
||||||
warning ("-f%s not supported: ignored", (flag_pic > 1) ? "PIC" : "pic");
|
warning ("-f%s not supported: ignored", (flag_pic > 1) ? "PIC" : "pic");
|
||||||
flag_pic = 0;
|
flag_pic = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* All other targets add GC roots from their override_options function,
|
|
||||||
so play along. */
|
|
||||||
ggc_add_rtx_root (&mmix_compare_op0, 1);
|
|
||||||
ggc_add_rtx_root (&mmix_compare_op1, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* INIT_EXPANDERS. */
|
/* INIT_EXPANDERS. */
|
||||||
|
@ -172,11 +168,10 @@ mmix_init_expanders ()
|
||||||
|
|
||||||
/* Set the per-function data. */
|
/* Set the per-function data. */
|
||||||
|
|
||||||
static void
|
static struct machine_function *
|
||||||
mmix_init_machine_status (f)
|
mmix_init_machine_status ()
|
||||||
struct function *f;
|
|
||||||
{
|
{
|
||||||
f->machine = xcalloc (1, sizeof (struct machine_function));
|
return ggc_alloc_cleared (sizeof (struct machine_function));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DATA_ALIGNMENT.
|
/* DATA_ALIGNMENT.
|
||||||
|
|
|
@ -82,13 +82,13 @@ Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
/* Declarations for helper variables that are not tied to a particular
|
/* Declarations for helper variables that are not tied to a particular
|
||||||
target macro. */
|
target macro. */
|
||||||
extern struct rtx_def *mmix_compare_op0;
|
extern GTY(()) rtx mmix_compare_op0;
|
||||||
extern struct rtx_def *mmix_compare_op1;
|
extern GTY(()) rtx mmix_compare_op1;
|
||||||
|
|
||||||
/* Per-function machine data. This is normally an opaque type just
|
/* Per-function machine data. This is normally an opaque type just
|
||||||
defined and used in the tm.c file, but we need to see the definition in
|
defined and used in the tm.c file, but we need to see the definition in
|
||||||
mmix.md too. */
|
mmix.md too. */
|
||||||
struct machine_function
|
struct machine_function GTY(())
|
||||||
{
|
{
|
||||||
int has_landing_pad;
|
int has_landing_pad;
|
||||||
int highest_saved_stack_register;
|
int highest_saved_stack_register;
|
||||||
|
|
|
@ -85,8 +85,6 @@ asm_file_start (file)
|
||||||
else
|
else
|
||||||
fprintf (file, "\n\n");
|
fprintf (file, "\n\n");
|
||||||
output_file_directive (file, main_input_filename);
|
output_file_directive (file, main_input_filename);
|
||||||
ggc_add_rtx_root (&zero_dreg, 1);
|
|
||||||
ggc_add_rtx_root (&zero_areg, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print operand X using operand code CODE to assembly language output file
|
/* Print operand X using operand code CODE to assembly language output file
|
||||||
|
|
|
@ -983,5 +983,5 @@ struct cum_arg { int nbytes; };
|
||||||
SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM }}, \
|
SYMBOL_REF, LABEL_REF, SUBREG, REG, MEM }}, \
|
||||||
{"nshift_operator", { ASHIFTRT, LSHIFTRT, ASHIFT }},
|
{"nshift_operator", { ASHIFTRT, LSHIFTRT, ASHIFT }},
|
||||||
|
|
||||||
extern struct rtx_def *zero_dreg;
|
extern GTY(()) rtx zero_dreg;
|
||||||
extern struct rtx_def *zero_areg;
|
extern GTY(()) rtx zero_areg;
|
||||||
|
|
|
@ -100,8 +100,6 @@ static void pa_combine_instructions PARAMS ((rtx));
|
||||||
static int pa_can_combine_p PARAMS ((rtx, rtx, rtx, int, rtx, rtx, rtx));
|
static int pa_can_combine_p PARAMS ((rtx, rtx, rtx, int, rtx, rtx, rtx));
|
||||||
static int forward_branch_p PARAMS ((rtx));
|
static int forward_branch_p PARAMS ((rtx));
|
||||||
static int shadd_constant_p PARAMS ((int));
|
static int shadd_constant_p PARAMS ((int));
|
||||||
static void pa_add_gc_roots PARAMS ((void));
|
|
||||||
static void mark_deferred_plabels PARAMS ((void *));
|
|
||||||
static void compute_zdepwi_operands PARAMS ((unsigned HOST_WIDE_INT, unsigned *));
|
static void compute_zdepwi_operands PARAMS ((unsigned HOST_WIDE_INT, unsigned *));
|
||||||
static int compute_movstrsi_length PARAMS ((rtx));
|
static int compute_movstrsi_length PARAMS ((rtx));
|
||||||
static bool pa_assemble_integer PARAMS ((rtx, unsigned int, int));
|
static bool pa_assemble_integer PARAMS ((rtx, unsigned int, int));
|
||||||
|
@ -151,12 +149,14 @@ unsigned int total_code_bytes;
|
||||||
/* Variables to handle plabels that we discover are necessary at assembly
|
/* Variables to handle plabels that we discover are necessary at assembly
|
||||||
output time. They are output after the current function. */
|
output time. They are output after the current function. */
|
||||||
|
|
||||||
struct deferred_plabel
|
struct deferred_plabel GTY(())
|
||||||
{
|
{
|
||||||
rtx internal_label;
|
rtx internal_label;
|
||||||
char *name;
|
char *name;
|
||||||
} *deferred_plabels = 0;
|
};
|
||||||
int n_deferred_plabels = 0;
|
static GTY((length ("n_deferred_plabels"))) struct deferred_plabel *
|
||||||
|
deferred_plabels;
|
||||||
|
static int n_deferred_plabels = 0;
|
||||||
|
|
||||||
/* Initialize the GCC target structure. */
|
/* Initialize the GCC target structure. */
|
||||||
|
|
||||||
|
@ -301,9 +301,6 @@ override_options ()
|
||||||
targetm.asm_out.unaligned_op.si = NULL;
|
targetm.asm_out.unaligned_op.si = NULL;
|
||||||
targetm.asm_out.unaligned_op.di = NULL;
|
targetm.asm_out.unaligned_op.di = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Register global variables with the garbage collector. */
|
|
||||||
pa_add_gc_roots ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return non-zero only if OP is a register of mode MODE,
|
/* Return non-zero only if OP is a register of mode MODE,
|
||||||
|
@ -6277,10 +6274,10 @@ output_call (insn, call_dest, sibcall)
|
||||||
|
|
||||||
if (deferred_plabels == 0)
|
if (deferred_plabels == 0)
|
||||||
deferred_plabels = (struct deferred_plabel *)
|
deferred_plabels = (struct deferred_plabel *)
|
||||||
xmalloc (1 * sizeof (struct deferred_plabel));
|
ggc_alloc (sizeof (struct deferred_plabel));
|
||||||
else
|
else
|
||||||
deferred_plabels = (struct deferred_plabel *)
|
deferred_plabels = (struct deferred_plabel *)
|
||||||
xrealloc (deferred_plabels,
|
ggc_realloc (deferred_plabels,
|
||||||
((n_deferred_plabels + 1)
|
((n_deferred_plabels + 1)
|
||||||
* sizeof (struct deferred_plabel)));
|
* sizeof (struct deferred_plabel)));
|
||||||
|
|
||||||
|
@ -7666,31 +7663,6 @@ cmpib_comparison_operator (op, mode)
|
||||||
|| GET_CODE (op) == LEU));
|
|| GET_CODE (op) == LEU));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark ARG (which is really a struct deferred_plabel **) for GC. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
mark_deferred_plabels (arg)
|
|
||||||
void *arg;
|
|
||||||
{
|
|
||||||
struct deferred_plabel *dp = *(struct deferred_plabel **) arg;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < n_deferred_plabels; ++i)
|
|
||||||
ggc_mark_rtx (dp[i].internal_label);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Called to register all of our global variables with the garbage
|
|
||||||
collector. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
pa_add_gc_roots ()
|
|
||||||
{
|
|
||||||
ggc_add_rtx_root (&hppa_compare_op0, 1);
|
|
||||||
ggc_add_rtx_root (&hppa_compare_op1, 1);
|
|
||||||
ggc_add_root (&deferred_plabels, 1, sizeof (&deferred_plabels),
|
|
||||||
&mark_deferred_plabels);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* On hpux10, the linker will give an error if we have a reference
|
/* On hpux10, the linker will give an error if we have a reference
|
||||||
in the read-only data section to a symbol defined in a shared
|
in the read-only data section to a symbol defined in a shared
|
||||||
library. Therefore, expressions that might require a reloc can
|
library. Therefore, expressions that might require a reloc can
|
||||||
|
@ -7717,3 +7689,5 @@ pa_select_section (exp, reloc, align)
|
||||||
else
|
else
|
||||||
data_section ();
|
data_section ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-pa.h"
|
||||||
|
|
|
@ -865,7 +865,8 @@ struct hppa_args {int words, nargs_prototype, indirect; };
|
||||||
|| ((MODE) && GET_MODE_SIZE (MODE) > 8)))
|
|| ((MODE) && GET_MODE_SIZE (MODE) > 8)))
|
||||||
|
|
||||||
|
|
||||||
extern struct rtx_def *hppa_compare_op0, *hppa_compare_op1;
|
extern GTY(()) rtx hppa_compare_op0;
|
||||||
|
extern GTY(()) rtx hppa_compare_op1;
|
||||||
extern enum cmp_type hppa_branch_type;
|
extern enum cmp_type hppa_branch_type;
|
||||||
|
|
||||||
#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
|
#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
|
||||||
|
|
|
@ -147,8 +147,7 @@ static int toc_hash_eq PARAMS ((const void *, const void *));
|
||||||
static int toc_hash_mark_entry PARAMS ((void **, void *));
|
static int toc_hash_mark_entry PARAMS ((void **, void *));
|
||||||
static void toc_hash_mark_table PARAMS ((void *));
|
static void toc_hash_mark_table PARAMS ((void *));
|
||||||
static int constant_pool_expr_1 PARAMS ((rtx, int *, int *));
|
static int constant_pool_expr_1 PARAMS ((rtx, int *, int *));
|
||||||
static void rs6000_free_machine_status PARAMS ((struct function *));
|
static struct machine_function * rs6000_init_machine_status PARAMS ((void));
|
||||||
static void rs6000_init_machine_status PARAMS ((struct function *));
|
|
||||||
static bool rs6000_assemble_integer PARAMS ((rtx, unsigned int, int));
|
static bool rs6000_assemble_integer PARAMS ((rtx, unsigned int, int));
|
||||||
static int rs6000_ra_ever_killed PARAMS ((void));
|
static int rs6000_ra_ever_killed PARAMS ((void));
|
||||||
static tree rs6000_handle_longcall_attribute PARAMS ((tree *, tree, tree, int, bool *));
|
static tree rs6000_handle_longcall_attribute PARAMS ((tree *, tree, tree, int, bool *));
|
||||||
|
@ -631,7 +630,6 @@ rs6000_override_options (default_cpu)
|
||||||
|
|
||||||
/* Arrange to save and restore machine status around nested functions. */
|
/* Arrange to save and restore machine status around nested functions. */
|
||||||
init_machine_status = rs6000_init_machine_status;
|
init_machine_status = rs6000_init_machine_status;
|
||||||
free_machine_status = rs6000_free_machine_status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle -mvrsave= options. */
|
/* Handle -mvrsave= options. */
|
||||||
|
@ -6268,28 +6266,15 @@ rs6000_got_register (value)
|
||||||
return pic_offset_table_rtx;
|
return pic_offset_table_rtx;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Functions to init, mark and free struct machine_function.
|
/* Function to init struct machine_function.
|
||||||
These will be called, via pointer variables,
|
This will be called, via a pointer variable,
|
||||||
from push_function_context and pop_function_context. */
|
from push_function_context. */
|
||||||
|
|
||||||
static void
|
static struct machine_function *
|
||||||
rs6000_init_machine_status (p)
|
rs6000_init_machine_status ()
|
||||||
struct function *p;
|
|
||||||
{
|
{
|
||||||
p->machine = (machine_function *) xcalloc (1, sizeof (machine_function));
|
return ggc_alloc_cleared (sizeof (machine_function));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
rs6000_free_machine_status (p)
|
|
||||||
struct function *p;
|
|
||||||
{
|
|
||||||
if (p->machine == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
free (p->machine);
|
|
||||||
p->machine = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Print an operand. Recognize special options, documented below. */
|
/* Print an operand. Recognize special options, documented below. */
|
||||||
|
|
||||||
|
@ -11254,16 +11239,9 @@ rs6000_fatal_bad_address (op)
|
||||||
static void
|
static void
|
||||||
rs6000_add_gc_roots ()
|
rs6000_add_gc_roots ()
|
||||||
{
|
{
|
||||||
ggc_add_rtx_root (&rs6000_compare_op0, 1);
|
|
||||||
ggc_add_rtx_root (&rs6000_compare_op1, 1);
|
|
||||||
|
|
||||||
toc_hash_table = htab_create (1021, toc_hash_function, toc_hash_eq, NULL);
|
toc_hash_table = htab_create (1021, toc_hash_function, toc_hash_eq, NULL);
|
||||||
ggc_add_root (&toc_hash_table, 1, sizeof (toc_hash_table),
|
ggc_add_root (&toc_hash_table, 1, sizeof (toc_hash_table),
|
||||||
toc_hash_mark_table);
|
toc_hash_mark_table);
|
||||||
|
|
||||||
#if TARGET_MACHO
|
|
||||||
machopic_add_gc_roots ();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if TARGET_MACHO
|
#if TARGET_MACHO
|
||||||
|
|
|
@ -1559,7 +1559,7 @@ typedef struct rs6000_stack {
|
||||||
|
|
||||||
/* A C structure for machine-specific, per-function data.
|
/* A C structure for machine-specific, per-function data.
|
||||||
This is added to the cfun structure. */
|
This is added to the cfun structure. */
|
||||||
typedef struct machine_function
|
typedef struct machine_function GTY(())
|
||||||
{
|
{
|
||||||
/* Whether a System V.4 varargs area was created. */
|
/* Whether a System V.4 varargs area was created. */
|
||||||
int sysv_varargs_p;
|
int sysv_varargs_p;
|
||||||
|
@ -2400,7 +2400,8 @@ do { \
|
||||||
stored from the compare operation. Note that we can't use "rtx" here
|
stored from the compare operation. Note that we can't use "rtx" here
|
||||||
since it hasn't been defined! */
|
since it hasn't been defined! */
|
||||||
|
|
||||||
extern struct rtx_def *rs6000_compare_op0, *rs6000_compare_op1;
|
extern GTY(()) rtx rs6000_compare_op0;
|
||||||
|
extern GTY(()) rtx rs6000_compare_op1;
|
||||||
extern int rs6000_compare_fp_p;
|
extern int rs6000_compare_fp_p;
|
||||||
|
|
||||||
/* Control the assembler format that we output. */
|
/* Control the assembler format that we output. */
|
||||||
|
|
|
@ -16,13 +16,15 @@ fp-bit.c: $(srcdir)/config/fp-bit.c
|
||||||
darwin.o: $(srcdir)/config/darwin.c $(CONFIG_H) $(SYSTEM_H) $(RTL_BASE_H) \
|
darwin.o: $(srcdir)/config/darwin.c $(CONFIG_H) $(SYSTEM_H) $(RTL_BASE_H) \
|
||||||
$(REGS_H) hard-reg-set.h insn-config.h conditions.h output.h \
|
$(REGS_H) hard-reg-set.h insn-config.h conditions.h output.h \
|
||||||
insn-attr.h flags.h $(TREE_H) $(EXPR_H) reload.h \
|
insn-attr.h flags.h $(TREE_H) $(EXPR_H) reload.h \
|
||||||
function.h $(GGC_H) $(TM_P_H)
|
function.h $(GGC_H) $(TM_P_H) gt-darwin.h
|
||||||
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
|
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
|
||||||
|
|
||||||
darwin-c.o: $(srcdir)/config/darwin-c.c $(CONFIG_H) $(SYSTEM_H) \
|
darwin-c.o: $(srcdir)/config/darwin-c.c $(CONFIG_H) $(SYSTEM_H) \
|
||||||
$(TREE_H) $(C_TREE_H) c-pragma.h toplev.h cpplib.h $(TM_P_H)
|
$(TREE_H) $(C_TREE_H) c-pragma.h toplev.h cpplib.h $(TM_P_H)
|
||||||
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
|
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
|
||||||
|
|
||||||
|
gt-darwin.h : s-gtype ; @true
|
||||||
|
|
||||||
# Build the libraries for both hard and soft floating point
|
# Build the libraries for both hard and soft floating point
|
||||||
|
|
||||||
MULTILIB_OPTIONS = msoft-float
|
MULTILIB_OPTIONS = msoft-float
|
||||||
|
|
|
@ -6230,16 +6230,14 @@ reg_unused_after (reg, insn)
|
||||||
|
|
||||||
#include "ggc.h"
|
#include "ggc.h"
|
||||||
|
|
||||||
|
static GTY(()) rtx fpscr_rtx;
|
||||||
rtx
|
rtx
|
||||||
get_fpscr_rtx ()
|
get_fpscr_rtx ()
|
||||||
{
|
{
|
||||||
static rtx fpscr_rtx;
|
|
||||||
|
|
||||||
if (! fpscr_rtx)
|
if (! fpscr_rtx)
|
||||||
{
|
{
|
||||||
fpscr_rtx = gen_rtx (REG, PSImode, FPSCR_REG);
|
fpscr_rtx = gen_rtx (REG, PSImode, FPSCR_REG);
|
||||||
REG_USERVAR_P (fpscr_rtx) = 1;
|
REG_USERVAR_P (fpscr_rtx) = 1;
|
||||||
ggc_add_rtx_root (&fpscr_rtx, 1);
|
|
||||||
mark_user_reg (fpscr_rtx);
|
mark_user_reg (fpscr_rtx);
|
||||||
}
|
}
|
||||||
if (! reload_completed || mdep_reorg_phase != SH_AFTER_MDEP_REORG)
|
if (! reload_completed || mdep_reorg_phase != SH_AFTER_MDEP_REORG)
|
||||||
|
@ -6819,3 +6817,5 @@ sh_strip_name_encoding (str)
|
||||||
str += *str == '*';
|
str += *str == '*';
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-sh.h"
|
||||||
|
|
|
@ -44,5 +44,8 @@ $(T)crti.o: $(srcdir)/config/sh/crti.asm $(GCC_PASSES)
|
||||||
$(T)crtn.o: $(srcdir)/config/sh/crtn.asm $(GCC_PASSES)
|
$(T)crtn.o: $(srcdir)/config/sh/crtn.asm $(GCC_PASSES)
|
||||||
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/sh/crtn.asm
|
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/sh/crtn.asm
|
||||||
|
|
||||||
|
$(out_object_file): gt-sh.h
|
||||||
|
gt-sh.h : s-gtype ; @true
|
||||||
|
|
||||||
# These are not suitable for COFF.
|
# These are not suitable for COFF.
|
||||||
# EXTRA_MULTILIB_PARTS= crt1.o crti.o crtn.o crtbegin.o crtend.o
|
# EXTRA_MULTILIB_PARTS= crt1.o crti.o crtn.o crtbegin.o crtend.o
|
||||||
|
|
|
@ -140,7 +140,6 @@ static int hypersparc_adjust_cost PARAMS ((rtx, rtx, rtx, int));
|
||||||
static void sparc_output_addr_vec PARAMS ((rtx));
|
static void sparc_output_addr_vec PARAMS ((rtx));
|
||||||
static void sparc_output_addr_diff_vec PARAMS ((rtx));
|
static void sparc_output_addr_diff_vec PARAMS ((rtx));
|
||||||
static void sparc_output_deferred_case_vectors PARAMS ((void));
|
static void sparc_output_deferred_case_vectors PARAMS ((void));
|
||||||
static void sparc_add_gc_roots PARAMS ((void));
|
|
||||||
static int check_return_regs PARAMS ((rtx));
|
static int check_return_regs PARAMS ((rtx));
|
||||||
static int epilogue_renumber PARAMS ((rtx *, int));
|
static int epilogue_renumber PARAMS ((rtx *, int));
|
||||||
static bool sparc_assemble_integer PARAMS ((rtx, unsigned int, int));
|
static bool sparc_assemble_integer PARAMS ((rtx, unsigned int, int));
|
||||||
|
@ -438,9 +437,6 @@ sparc_override_options ()
|
||||||
|
|
||||||
/* Do various machine dependent initializations. */
|
/* Do various machine dependent initializations. */
|
||||||
sparc_init_modes ();
|
sparc_init_modes ();
|
||||||
|
|
||||||
/* Register global variables with the garbage collector. */
|
|
||||||
sparc_add_gc_roots ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Miscellaneous utilities. */
|
/* Miscellaneous utilities. */
|
||||||
|
@ -3114,10 +3110,10 @@ reg_unused_after (reg, insn)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The table we use to reference PIC data. */
|
/* The table we use to reference PIC data. */
|
||||||
static rtx global_offset_table;
|
static GTY(()) rtx global_offset_table;
|
||||||
|
|
||||||
/* The function we use to get at it. */
|
/* The function we use to get at it. */
|
||||||
static rtx get_pc_symbol;
|
static GTY(()) rtx get_pc_symbol;
|
||||||
static char get_pc_symbol_name[256];
|
static char get_pc_symbol_name[256];
|
||||||
|
|
||||||
/* Ensure that we are not using patterns that are not OK with PIC. */
|
/* Ensure that we are not using patterns that are not OK with PIC. */
|
||||||
|
@ -7786,8 +7782,8 @@ set_extends (insn)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We _ought_ to have only one kind per function, but... */
|
/* We _ought_ to have only one kind per function, but... */
|
||||||
static rtx sparc_addr_diff_list;
|
static GTY(()) rtx sparc_addr_diff_list;
|
||||||
static rtx sparc_addr_list;
|
static GTY(()) rtx sparc_addr_list;
|
||||||
|
|
||||||
void
|
void
|
||||||
sparc_defer_case_vector (lab, vec, diff)
|
sparc_defer_case_vector (lab, vec, diff)
|
||||||
|
@ -7997,20 +7993,6 @@ sparc_profile_hook (labelno)
|
||||||
emit_library_call (fun, LCT_NORMAL, VOIDmode, 1, lab, Pmode);
|
emit_library_call (fun, LCT_NORMAL, VOIDmode, 1, lab, Pmode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called to register all of our global variables with the garbage
|
|
||||||
collector. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
sparc_add_gc_roots ()
|
|
||||||
{
|
|
||||||
ggc_add_rtx_root (&sparc_compare_op0, 1);
|
|
||||||
ggc_add_rtx_root (&sparc_compare_op1, 1);
|
|
||||||
ggc_add_rtx_root (&global_offset_table, 1);
|
|
||||||
ggc_add_rtx_root (&get_pc_symbol, 1);
|
|
||||||
ggc_add_rtx_root (&sparc_addr_diff_list, 1);
|
|
||||||
ggc_add_rtx_root (&sparc_addr_list, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef OBJECT_FORMAT_ELF
|
#ifdef OBJECT_FORMAT_ELF
|
||||||
static void
|
static void
|
||||||
sparc_elf_asm_named_section (name, flags)
|
sparc_elf_asm_named_section (name, flags)
|
||||||
|
@ -8530,3 +8512,5 @@ sparc_output_mi_thunk (file, thunk_fndecl, delta, function)
|
||||||
reload_completed = 0;
|
reload_completed = 0;
|
||||||
no_new_pseudos = 0;
|
no_new_pseudos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-sparc.h"
|
||||||
|
|
|
@ -1809,7 +1809,8 @@ function_arg_padding ((MODE), (TYPE))
|
||||||
stored from the compare operation. Note that we can't use "rtx" here
|
stored from the compare operation. Note that we can't use "rtx" here
|
||||||
since it hasn't been defined! */
|
since it hasn't been defined! */
|
||||||
|
|
||||||
extern struct rtx_def *sparc_compare_op0, *sparc_compare_op1;
|
extern GTY(()) rtx sparc_compare_op0;
|
||||||
|
extern GTY(()) rtx sparc_compare_op1;
|
||||||
|
|
||||||
|
|
||||||
/* Generate the special assembly code needed to tell the assembler whatever
|
/* Generate the special assembly code needed to tell the assembler whatever
|
||||||
|
|
|
@ -27,3 +27,6 @@ LIB1ASMFUNCS = _mulsi3 _nsau _divsi3 _modsi3 _udivsi3 _umodsi3
|
||||||
TARGET_LIBGCC2_CFLAGS += -mlongcalls
|
TARGET_LIBGCC2_CFLAGS += -mlongcalls
|
||||||
|
|
||||||
LIB2FUNCS_EXTRA += $(srcdir)/config/xtensa/lib2funcs.S
|
LIB2FUNCS_EXTRA += $(srcdir)/config/xtensa/lib2funcs.S
|
||||||
|
|
||||||
|
$(out_object_file): gt-xtensa.h
|
||||||
|
gt-xtensa.h : s-gtype ; @true
|
||||||
|
|
|
@ -85,7 +85,7 @@ const char *xtensa_st_opcodes[(int) MAX_MACHINE_MODE];
|
||||||
#define LARGEST_MOVE_RATIO 15
|
#define LARGEST_MOVE_RATIO 15
|
||||||
|
|
||||||
/* Define the structure for the machine field in struct function. */
|
/* Define the structure for the machine field in struct function. */
|
||||||
struct machine_function
|
struct machine_function GTY(())
|
||||||
{
|
{
|
||||||
int accesses_prev_frame;
|
int accesses_prev_frame;
|
||||||
};
|
};
|
||||||
|
@ -193,8 +193,7 @@ static rtx gen_float_relational PARAMS ((enum rtx_code, rtx, rtx));
|
||||||
static rtx gen_conditional_move PARAMS ((rtx));
|
static rtx gen_conditional_move PARAMS ((rtx));
|
||||||
static rtx fixup_subreg_mem PARAMS ((rtx x));
|
static rtx fixup_subreg_mem PARAMS ((rtx x));
|
||||||
static enum machine_mode xtensa_find_mode_for_size PARAMS ((unsigned));
|
static enum machine_mode xtensa_find_mode_for_size PARAMS ((unsigned));
|
||||||
static void xtensa_init_machine_status PARAMS ((struct function *p));
|
static struct machine_status * xtensa_init_machine_status PARAMS ((void));
|
||||||
static void xtensa_free_machine_status PARAMS ((struct function *p));
|
|
||||||
static void printx PARAMS ((FILE *, signed int));
|
static void printx PARAMS ((FILE *, signed int));
|
||||||
static void xtensa_select_rtx_section PARAMS ((enum machine_mode, rtx,
|
static void xtensa_select_rtx_section PARAMS ((enum machine_mode, rtx,
|
||||||
unsigned HOST_WIDE_INT));
|
unsigned HOST_WIDE_INT));
|
||||||
|
@ -1549,21 +1548,10 @@ xtensa_expand_nonlocal_goto (operands)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static struct machine_function *
|
||||||
xtensa_init_machine_status (p)
|
xtensa_init_machine_status ()
|
||||||
struct function *p;
|
|
||||||
{
|
{
|
||||||
p->machine = (struct machine_function *)
|
return ggc_alloc_cleared (sizeof (struct machine_function));
|
||||||
xcalloc (1, sizeof (struct machine_function));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
xtensa_free_machine_status (p)
|
|
||||||
struct function *p;
|
|
||||||
{
|
|
||||||
free (p->machine);
|
|
||||||
p->machine = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1846,7 +1834,6 @@ override_options ()
|
||||||
}
|
}
|
||||||
|
|
||||||
init_machine_status = xtensa_init_machine_status;
|
init_machine_status = xtensa_init_machine_status;
|
||||||
free_machine_status = xtensa_free_machine_status;
|
|
||||||
|
|
||||||
/* Check PIC settings. There's no need for -fPIC on Xtensa and
|
/* Check PIC settings. There's no need for -fPIC on Xtensa and
|
||||||
some targets need to always use PIC. */
|
some targets need to always use PIC. */
|
||||||
|
@ -2759,3 +2746,5 @@ xtensa_encode_section_info (decl, first)
|
||||||
if (TREE_CODE (decl) == FUNCTION_DECL && ! TREE_PUBLIC (decl))
|
if (TREE_CODE (decl) == FUNCTION_DECL && ! TREE_PUBLIC (decl))
|
||||||
SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
|
SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-xtensa.h"
|
||||||
|
|
|
@ -2226,7 +2226,7 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Find some useful tools
|
# Find some useful tools
|
||||||
for ac_prog in mawk gawk nawk awk
|
for ac_prog in gawk mawk nawk awk
|
||||||
do
|
do
|
||||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||||
set dummy $ac_prog; ac_word=$2
|
set dummy $ac_prog; ac_word=$2
|
||||||
|
@ -6706,7 +6706,7 @@ for f in $tm_file; do
|
||||||
ansidecl.h )
|
ansidecl.h )
|
||||||
tm_file_list="${tm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
tm_file_list="${tm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
||||||
defaults.h )
|
defaults.h )
|
||||||
tm_file_list="${tm_file_list} $f" ;;
|
tm_file_list="${tm_file_list} \$(srcdir)/$f" ;;
|
||||||
*) tm_file_list="${tm_file_list} \$(srcdir)/config/$f" ;;
|
*) tm_file_list="${tm_file_list} \$(srcdir)/config/$f" ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
@ -6721,8 +6721,10 @@ for f in $host_xm_file; do
|
||||||
case $f in
|
case $f in
|
||||||
ansidecl.h )
|
ansidecl.h )
|
||||||
host_xm_file_list="${host_xm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
host_xm_file_list="${host_xm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
||||||
auto-host.h | defaults.h )
|
auto-host.h )
|
||||||
host_xm_file_list="${host_xm_file_list} $f" ;;
|
host_xm_file_list="${host_xm_file_list} $f" ;;
|
||||||
|
defaults.h )
|
||||||
|
host_xm_file_list="${host_xm_file_list} \$(srcdir)/$f" ;;
|
||||||
*) host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f" ;;
|
*) host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f" ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
@ -6732,8 +6734,10 @@ for f in $build_xm_file; do
|
||||||
case $f in
|
case $f in
|
||||||
ansidecl.h )
|
ansidecl.h )
|
||||||
build_xm_file_list="${build_xm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
build_xm_file_list="${build_xm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
||||||
auto-build.h | auto-host.h | defaults.h )
|
auto-build.h | auto-host.h )
|
||||||
build_xm_file_list="${build_xm_file_list} $f" ;;
|
build_xm_file_list="${build_xm_file_list} $f" ;;
|
||||||
|
defaults.h )
|
||||||
|
host_xm_file_list="${host_xm_file_list} \$(srcdir)/$f" ;;
|
||||||
*) build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f" ;;
|
*) build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f" ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
@ -6841,7 +6845,7 @@ fi
|
||||||
|
|
||||||
# Figure out what assembler we will be using.
|
# Figure out what assembler we will be using.
|
||||||
echo $ac_n "checking what assembler to use""... $ac_c" 1>&6
|
echo $ac_n "checking what assembler to use""... $ac_c" 1>&6
|
||||||
echo "configure:6845: checking what assembler to use" >&5
|
echo "configure:6849: checking what assembler to use" >&5
|
||||||
gcc_cv_as=
|
gcc_cv_as=
|
||||||
gcc_cv_gas_major_version=
|
gcc_cv_gas_major_version=
|
||||||
gcc_cv_gas_minor_version=
|
gcc_cv_gas_minor_version=
|
||||||
|
@ -6935,7 +6939,7 @@ fi
|
||||||
|
|
||||||
# Figure out what linker we will be using.
|
# Figure out what linker we will be using.
|
||||||
echo $ac_n "checking what linker to use""... $ac_c" 1>&6
|
echo $ac_n "checking what linker to use""... $ac_c" 1>&6
|
||||||
echo "configure:6939: checking what linker to use" >&5
|
echo "configure:6943: checking what linker to use" >&5
|
||||||
gcc_cv_ld=
|
gcc_cv_ld=
|
||||||
gcc_cv_gld_major_version=
|
gcc_cv_gld_major_version=
|
||||||
gcc_cv_gld_minor_version=
|
gcc_cv_gld_minor_version=
|
||||||
|
@ -7028,7 +7032,7 @@ fi
|
||||||
|
|
||||||
# Figure out what nm we will be using.
|
# Figure out what nm we will be using.
|
||||||
echo $ac_n "checking what nm to use""... $ac_c" 1>&6
|
echo $ac_n "checking what nm to use""... $ac_c" 1>&6
|
||||||
echo "configure:7032: checking what nm to use" >&5
|
echo "configure:7036: checking what nm to use" >&5
|
||||||
if test -x nm$host_exeext; then
|
if test -x nm$host_exeext; then
|
||||||
gcc_cv_nm=./nm$host_exeext
|
gcc_cv_nm=./nm$host_exeext
|
||||||
elif test "x$program_prefix" != xNONE; then
|
elif test "x$program_prefix" != xNONE; then
|
||||||
|
@ -7040,7 +7044,7 @@ echo "$ac_t""$gcc_cv_nm" 1>&6
|
||||||
|
|
||||||
# Figure out what objdump we will be using.
|
# Figure out what objdump we will be using.
|
||||||
echo $ac_n "checking what objdump to use""... $ac_c" 1>&6
|
echo $ac_n "checking what objdump to use""... $ac_c" 1>&6
|
||||||
echo "configure:7044: checking what objdump to use" >&5
|
echo "configure:7048: checking what objdump to use" >&5
|
||||||
if test -x objdump$host_exeext; then
|
if test -x objdump$host_exeext; then
|
||||||
gcc_cv_objdump=./objdump$host_exeext
|
gcc_cv_objdump=./objdump$host_exeext
|
||||||
elif test "x$program_prefix" != xNONE; then
|
elif test "x$program_prefix" != xNONE; then
|
||||||
|
@ -7052,7 +7056,7 @@ echo "$ac_t""$gcc_cv_objdump" 1>&6
|
||||||
|
|
||||||
# Figure out what assembler alignment features are present.
|
# Figure out what assembler alignment features are present.
|
||||||
echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6
|
echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6
|
||||||
echo "configure:7056: checking assembler alignment features" >&5
|
echo "configure:7060: checking assembler alignment features" >&5
|
||||||
gcc_cv_as_alignment_features=none
|
gcc_cv_as_alignment_features=none
|
||||||
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
||||||
# Gas version 2.6 and later support for .balign and .p2align.
|
# Gas version 2.6 and later support for .balign and .p2align.
|
||||||
|
@ -7100,7 +7104,7 @@ fi
|
||||||
echo "$ac_t""$gcc_cv_as_alignment_features" 1>&6
|
echo "$ac_t""$gcc_cv_as_alignment_features" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking assembler subsection support""... $ac_c" 1>&6
|
echo $ac_n "checking assembler subsection support""... $ac_c" 1>&6
|
||||||
echo "configure:7104: checking assembler subsection support" >&5
|
echo "configure:7108: checking assembler subsection support" >&5
|
||||||
gcc_cv_as_subsections=no
|
gcc_cv_as_subsections=no
|
||||||
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
||||||
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
|
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
|
||||||
|
@ -7140,7 +7144,7 @@ fi
|
||||||
echo "$ac_t""$gcc_cv_as_subsections" 1>&6
|
echo "$ac_t""$gcc_cv_as_subsections" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking assembler weak support""... $ac_c" 1>&6
|
echo $ac_n "checking assembler weak support""... $ac_c" 1>&6
|
||||||
echo "configure:7144: checking assembler weak support" >&5
|
echo "configure:7148: checking assembler weak support" >&5
|
||||||
gcc_cv_as_weak=no
|
gcc_cv_as_weak=no
|
||||||
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
||||||
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 2 -o "$gcc_cv_gas_major_version" -gt 2; then
|
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 2 -o "$gcc_cv_gas_major_version" -gt 2; then
|
||||||
|
@ -7163,7 +7167,7 @@ fi
|
||||||
echo "$ac_t""$gcc_cv_as_weak" 1>&6
|
echo "$ac_t""$gcc_cv_as_weak" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking assembler hidden support""... $ac_c" 1>&6
|
echo $ac_n "checking assembler hidden support""... $ac_c" 1>&6
|
||||||
echo "configure:7167: checking assembler hidden support" >&5
|
echo "configure:7171: checking assembler hidden support" >&5
|
||||||
gcc_cv_as_hidden=no
|
gcc_cv_as_hidden=no
|
||||||
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
||||||
if test "$gcc_cv_gas_major_version" -eq 2 \
|
if test "$gcc_cv_gas_major_version" -eq 2 \
|
||||||
|
@ -7226,7 +7230,7 @@ libgcc_visibility=$gcc_cv_as_hidden
|
||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking assembler leb128 support""... $ac_c" 1>&6
|
echo $ac_n "checking assembler leb128 support""... $ac_c" 1>&6
|
||||||
echo "configure:7230: checking assembler leb128 support" >&5
|
echo "configure:7234: checking assembler leb128 support" >&5
|
||||||
gcc_cv_as_leb128=no
|
gcc_cv_as_leb128=no
|
||||||
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
||||||
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 11 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
|
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 11 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
|
||||||
|
@ -7271,7 +7275,7 @@ fi
|
||||||
echo "$ac_t""$gcc_cv_as_leb128" 1>&6
|
echo "$ac_t""$gcc_cv_as_leb128" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking assembler eh_frame optimization""... $ac_c" 1>&6
|
echo $ac_n "checking assembler eh_frame optimization""... $ac_c" 1>&6
|
||||||
echo "configure:7275: checking assembler eh_frame optimization" >&5
|
echo "configure:7279: checking assembler eh_frame optimization" >&5
|
||||||
gcc_cv_as_eh_frame=no
|
gcc_cv_as_eh_frame=no
|
||||||
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
||||||
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
|
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
|
||||||
|
@ -7352,7 +7356,7 @@ fi
|
||||||
echo "$ac_t""$gcc_cv_as_eh_frame" 1>&6
|
echo "$ac_t""$gcc_cv_as_eh_frame" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking assembler section merging support""... $ac_c" 1>&6
|
echo $ac_n "checking assembler section merging support""... $ac_c" 1>&6
|
||||||
echo "configure:7356: checking assembler section merging support" >&5
|
echo "configure:7360: checking assembler section merging support" >&5
|
||||||
gcc_cv_as_shf_merge=no
|
gcc_cv_as_shf_merge=no
|
||||||
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
||||||
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
|
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
|
||||||
|
@ -7375,7 +7379,7 @@ fi
|
||||||
echo "$ac_t""$gcc_cv_as_shf_merge" 1>&6
|
echo "$ac_t""$gcc_cv_as_shf_merge" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking assembler thread-local storage support""... $ac_c" 1>&6
|
echo $ac_n "checking assembler thread-local storage support""... $ac_c" 1>&6
|
||||||
echo "configure:7379: checking assembler thread-local storage support" >&5
|
echo "configure:7383: checking assembler thread-local storage support" >&5
|
||||||
gcc_cv_as_tls=no
|
gcc_cv_as_tls=no
|
||||||
conftest_s=
|
conftest_s=
|
||||||
tls_first_major=
|
tls_first_major=
|
||||||
|
@ -7467,7 +7471,7 @@ case "$target" in
|
||||||
# All TARGET_ABI_OSF targets.
|
# All TARGET_ABI_OSF targets.
|
||||||
alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
|
alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
|
||||||
echo $ac_n "checking assembler supports explicit relocations""... $ac_c" 1>&6
|
echo $ac_n "checking assembler supports explicit relocations""... $ac_c" 1>&6
|
||||||
echo "configure:7471: checking assembler supports explicit relocations" >&5
|
echo "configure:7475: checking assembler supports explicit relocations" >&5
|
||||||
if eval "test \"`echo '$''{'gcc_cv_as_explicit_relocs'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'gcc_cv_as_explicit_relocs'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -7517,7 +7521,7 @@ EOF
|
||||||
;;
|
;;
|
||||||
sparc*-*-*)
|
sparc*-*-*)
|
||||||
echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6
|
echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6
|
||||||
echo "configure:7521: checking assembler .register pseudo-op support" >&5
|
echo "configure:7525: checking assembler .register pseudo-op support" >&5
|
||||||
if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -7545,7 +7549,7 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6
|
echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6
|
||||||
echo "configure:7549: checking assembler supports -relax" >&5
|
echo "configure:7553: checking assembler supports -relax" >&5
|
||||||
if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -7573,7 +7577,7 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6
|
echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6
|
||||||
echo "configure:7577: checking assembler and linker support unaligned pc related relocs" >&5
|
echo "configure:7581: checking assembler and linker support unaligned pc related relocs" >&5
|
||||||
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -7600,7 +7604,7 @@ EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking assembler and linker support unaligned pc related relocs against hidden symbols""... $ac_c" 1>&6
|
echo $ac_n "checking assembler and linker support unaligned pc related relocs against hidden symbols""... $ac_c" 1>&6
|
||||||
echo "configure:7604: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5
|
echo "configure:7608: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5
|
||||||
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel_hidden'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel_hidden'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -7641,7 +7645,7 @@ EOF
|
||||||
|
|
||||||
if test "x$gcc_cv_as_flags64" != xno; then
|
if test "x$gcc_cv_as_flags64" != xno; then
|
||||||
echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6
|
echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6
|
||||||
echo "configure:7645: checking for assembler offsetable %lo() support" >&5
|
echo "configure:7649: checking for assembler offsetable %lo() support" >&5
|
||||||
if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
|
@ -7681,7 +7685,7 @@ EOF
|
||||||
|
|
||||||
i[34567]86-*-* | x86_64-*-*)
|
i[34567]86-*-* | x86_64-*-*)
|
||||||
echo $ac_n "checking assembler instructions""... $ac_c" 1>&6
|
echo $ac_n "checking assembler instructions""... $ac_c" 1>&6
|
||||||
echo "configure:7685: checking assembler instructions" >&5
|
echo "configure:7689: checking assembler instructions" >&5
|
||||||
gcc_cv_as_instructions=
|
gcc_cv_as_instructions=
|
||||||
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
|
||||||
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then
|
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then
|
||||||
|
@ -7708,7 +7712,7 @@ EOF
|
||||||
echo "$ac_t""$gcc_cv_as_instructions" 1>&6
|
echo "$ac_t""$gcc_cv_as_instructions" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6
|
echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6
|
||||||
echo "configure:7712: checking assembler GOTOFF in data directives" >&5
|
echo "configure:7716: checking assembler GOTOFF in data directives" >&5
|
||||||
gcc_cv_as_gotoff_in_data=no
|
gcc_cv_as_gotoff_in_data=no
|
||||||
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
|
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
|
||||||
then
|
then
|
||||||
|
@ -7738,7 +7742,7 @@ EOF
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6
|
echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6
|
||||||
echo "configure:7742: checking assembler dwarf2 debug_line support" >&5
|
echo "configure:7746: checking assembler dwarf2 debug_line support" >&5
|
||||||
gcc_cv_as_dwarf2_debug_line=no
|
gcc_cv_as_dwarf2_debug_line=no
|
||||||
# ??? Not all targets support dwarf2 debug_line, even within a version
|
# ??? Not all targets support dwarf2 debug_line, even within a version
|
||||||
# of gas. Moreover, we need to emit a valid instruction to trigger any
|
# of gas. Moreover, we need to emit a valid instruction to trigger any
|
||||||
|
@ -7794,7 +7798,7 @@ fi
|
||||||
echo "$ac_t""$gcc_cv_as_dwarf2_debug_line" 1>&6
|
echo "$ac_t""$gcc_cv_as_dwarf2_debug_line" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking assembler --gdwarf2 support""... $ac_c" 1>&6
|
echo $ac_n "checking assembler --gdwarf2 support""... $ac_c" 1>&6
|
||||||
echo "configure:7798: checking assembler --gdwarf2 support" >&5
|
echo "configure:7802: checking assembler --gdwarf2 support" >&5
|
||||||
gcc_cv_as_gdwarf2_flag=no
|
gcc_cv_as_gdwarf2_flag=no
|
||||||
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
|
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
|
||||||
then
|
then
|
||||||
|
@ -7823,7 +7827,7 @@ fi
|
||||||
echo "$ac_t""$gcc_cv_as_gdwarf2_flag" 1>&6
|
echo "$ac_t""$gcc_cv_as_gdwarf2_flag" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking assembler --gstabs support""... $ac_c" 1>&6
|
echo $ac_n "checking assembler --gstabs support""... $ac_c" 1>&6
|
||||||
echo "configure:7827: checking assembler --gstabs support" >&5
|
echo "configure:7831: checking assembler --gstabs support" >&5
|
||||||
gcc_cv_as_gstabs_flag=no
|
gcc_cv_as_gstabs_flag=no
|
||||||
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
|
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
|
||||||
then
|
then
|
||||||
|
@ -7851,7 +7855,7 @@ fi
|
||||||
echo "$ac_t""$gcc_cv_as_gstabs_flag" 1>&6
|
echo "$ac_t""$gcc_cv_as_gstabs_flag" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking linker PT_GNU_EH_FRAME support""... $ac_c" 1>&6
|
echo $ac_n "checking linker PT_GNU_EH_FRAME support""... $ac_c" 1>&6
|
||||||
echo "configure:7855: checking linker PT_GNU_EH_FRAME support" >&5
|
echo "configure:7859: checking linker PT_GNU_EH_FRAME support" >&5
|
||||||
gcc_cv_ld_eh_frame_hdr=no
|
gcc_cv_ld_eh_frame_hdr=no
|
||||||
if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
|
if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
|
||||||
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
|
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
|
||||||
|
@ -8014,7 +8018,7 @@ fi
|
||||||
|
|
||||||
|
|
||||||
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
|
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
|
||||||
echo "configure:8018: checking whether to enable maintainer-specific portions of Makefiles" >&5
|
echo "configure:8022: checking whether to enable maintainer-specific portions of Makefiles" >&5
|
||||||
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
|
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
|
||||||
if test "${enable_maintainer_mode+set}" = set; then
|
if test "${enable_maintainer_mode+set}" = set; then
|
||||||
enableval="$enable_maintainer_mode"
|
enableval="$enable_maintainer_mode"
|
||||||
|
@ -8072,6 +8076,8 @@ all_stagestuff=
|
||||||
all_outputs='Makefile intl/Makefile fixinc/Makefile gccbug mklibgcc mkheaders'
|
all_outputs='Makefile intl/Makefile fixinc/Makefile gccbug mklibgcc mkheaders'
|
||||||
# List of language makefile fragments.
|
# List of language makefile fragments.
|
||||||
all_lang_makefiles=
|
all_lang_makefiles=
|
||||||
|
# Files for gengtype
|
||||||
|
all_gtfiles=
|
||||||
|
|
||||||
# Add the language fragments.
|
# Add the language fragments.
|
||||||
# Languages are added via two mechanisms. Some information must be
|
# Languages are added via two mechanisms. Some information must be
|
||||||
|
@ -8092,6 +8098,7 @@ do
|
||||||
compilers=
|
compilers=
|
||||||
stagestuff=
|
stagestuff=
|
||||||
outputs=
|
outputs=
|
||||||
|
gtfiles=
|
||||||
. ${srcdir}/$s/config-lang.in
|
. ${srcdir}/$s/config-lang.in
|
||||||
if test "x$language" = x
|
if test "x$language" = x
|
||||||
then
|
then
|
||||||
|
@ -8110,6 +8117,7 @@ do
|
||||||
all_compilers="$all_compilers $compilers"
|
all_compilers="$all_compilers $compilers"
|
||||||
all_stagestuff="$all_stagestuff $stagestuff"
|
all_stagestuff="$all_stagestuff $stagestuff"
|
||||||
all_outputs="$all_outputs $outputs"
|
all_outputs="$all_outputs $outputs"
|
||||||
|
all_gtfiles="$all_gtfiles $gtfiles"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -8304,6 +8312,7 @@ ${CONFIG_SHELL-/bin/sh} $srcdir/configure.frag $srcdir "$subdirs" "$dep_host_xma
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Echo that links are built
|
# Echo that links are built
|
||||||
|
@ -8569,6 +8578,7 @@ s%@objdir@%$objdir%g
|
||||||
s%@subdirs@%$subdirs%g
|
s%@subdirs@%$subdirs%g
|
||||||
s%@all_boot_languages@%$all_boot_languages%g
|
s%@all_boot_languages@%$all_boot_languages%g
|
||||||
s%@all_compilers@%$all_compilers%g
|
s%@all_compilers@%$all_compilers%g
|
||||||
|
s%@all_gtfiles@%$all_gtfiles%g
|
||||||
s%@all_lang_makefiles@%$all_lang_makefiles%g
|
s%@all_lang_makefiles@%$all_lang_makefiles%g
|
||||||
s%@all_languages@%$all_languages%g
|
s%@all_languages@%$all_languages%g
|
||||||
s%@all_stagestuff@%$all_stagestuff%g
|
s%@all_stagestuff@%$all_stagestuff%g
|
||||||
|
|
|
@ -1062,7 +1062,7 @@ for f in $tm_file; do
|
||||||
ansidecl.h )
|
ansidecl.h )
|
||||||
tm_file_list="${tm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
tm_file_list="${tm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
||||||
defaults.h )
|
defaults.h )
|
||||||
tm_file_list="${tm_file_list} $f" ;;
|
tm_file_list="${tm_file_list} \$(srcdir)/$f" ;;
|
||||||
*) tm_file_list="${tm_file_list} \$(srcdir)/config/$f" ;;
|
*) tm_file_list="${tm_file_list} \$(srcdir)/config/$f" ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
@ -1077,8 +1077,10 @@ for f in $host_xm_file; do
|
||||||
case $f in
|
case $f in
|
||||||
ansidecl.h )
|
ansidecl.h )
|
||||||
host_xm_file_list="${host_xm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
host_xm_file_list="${host_xm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
||||||
auto-host.h | defaults.h )
|
auto-host.h )
|
||||||
host_xm_file_list="${host_xm_file_list} $f" ;;
|
host_xm_file_list="${host_xm_file_list} $f" ;;
|
||||||
|
defaults.h )
|
||||||
|
host_xm_file_list="${host_xm_file_list} \$(srcdir)/$f" ;;
|
||||||
*) host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f" ;;
|
*) host_xm_file_list="${host_xm_file_list} \$(srcdir)/config/$f" ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
@ -1088,8 +1090,10 @@ for f in $build_xm_file; do
|
||||||
case $f in
|
case $f in
|
||||||
ansidecl.h )
|
ansidecl.h )
|
||||||
build_xm_file_list="${build_xm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
build_xm_file_list="${build_xm_file_list} \$(srcdir)/../include/ansidecl.h" ;;
|
||||||
auto-build.h | auto-host.h | defaults.h )
|
auto-build.h | auto-host.h )
|
||||||
build_xm_file_list="${build_xm_file_list} $f" ;;
|
build_xm_file_list="${build_xm_file_list} $f" ;;
|
||||||
|
defaults.h )
|
||||||
|
host_xm_file_list="${host_xm_file_list} \$(srcdir)/$f" ;;
|
||||||
*) build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f" ;;
|
*) build_xm_file_list="${build_xm_file_list} \$(srcdir)/config/$f" ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
@ -2326,6 +2330,8 @@ all_stagestuff=
|
||||||
all_outputs='Makefile intl/Makefile fixinc/Makefile gccbug mklibgcc mkheaders'
|
all_outputs='Makefile intl/Makefile fixinc/Makefile gccbug mklibgcc mkheaders'
|
||||||
# List of language makefile fragments.
|
# List of language makefile fragments.
|
||||||
all_lang_makefiles=
|
all_lang_makefiles=
|
||||||
|
# Files for gengtype
|
||||||
|
all_gtfiles=
|
||||||
|
|
||||||
# Add the language fragments.
|
# Add the language fragments.
|
||||||
# Languages are added via two mechanisms. Some information must be
|
# Languages are added via two mechanisms. Some information must be
|
||||||
|
@ -2346,6 +2352,7 @@ do
|
||||||
compilers=
|
compilers=
|
||||||
stagestuff=
|
stagestuff=
|
||||||
outputs=
|
outputs=
|
||||||
|
gtfiles=
|
||||||
. ${srcdir}/$s/config-lang.in
|
. ${srcdir}/$s/config-lang.in
|
||||||
if test "x$language" = x
|
if test "x$language" = x
|
||||||
then
|
then
|
||||||
|
@ -2364,6 +2371,7 @@ do
|
||||||
all_compilers="$all_compilers $compilers"
|
all_compilers="$all_compilers $compilers"
|
||||||
all_stagestuff="$all_stagestuff $stagestuff"
|
all_stagestuff="$all_stagestuff $stagestuff"
|
||||||
all_outputs="$all_outputs $outputs"
|
all_outputs="$all_outputs $outputs"
|
||||||
|
all_gtfiles="$all_gtfiles $gtfiles"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -2496,6 +2504,7 @@ ${CONFIG_SHELL-/bin/sh} $srcdir/configure.frag $srcdir "$subdirs" "$dep_host_xma
|
||||||
AC_SUBST(subdirs)
|
AC_SUBST(subdirs)
|
||||||
AC_SUBST(all_boot_languages)
|
AC_SUBST(all_boot_languages)
|
||||||
AC_SUBST(all_compilers)
|
AC_SUBST(all_compilers)
|
||||||
|
AC_SUBST(all_gtfiles)
|
||||||
AC_SUBST(all_lang_makefiles)
|
AC_SUBST(all_lang_makefiles)
|
||||||
AC_SUBST(all_languages)
|
AC_SUBST(all_languages)
|
||||||
AC_SUBST(all_stagestuff)
|
AC_SUBST(all_stagestuff)
|
||||||
|
|
210
gcc/cp/ChangeLog
210
gcc/cp/ChangeLog
|
@ -1,3 +1,213 @@
|
||||||
|
2002-06-03 Geoffrey Keating <geoffk@redhat.com>
|
||||||
|
|
||||||
|
* pt.c (inline_parm_levels): Mark for GC.
|
||||||
|
|
||||||
|
* mangle.c (start_mangling): Allocate G.substitutions here...
|
||||||
|
(init_mangle): ... rather than here.
|
||||||
|
(finish_mangling): Clear the varray pointer when done with it.
|
||||||
|
* spew.c (yylexstring): Don't use VARRAY_FREE.
|
||||||
|
* search.c (bfs_walk): Don't use VARRAY_FREE.
|
||||||
|
* decl2.c (pending_statics): Use gengtype to mark.
|
||||||
|
(deferred_fns): Likewise.
|
||||||
|
(ssdf_decls): Likewise.
|
||||||
|
(init_decl2): Delete.
|
||||||
|
* decl.c (pop_from_top_level): Don't use VARRAY_FREE.
|
||||||
|
(cxx_init_decl_processing): Don't call init_decl2.
|
||||||
|
(cxx_pop_function_context): Don't use VARRAY_FREE.
|
||||||
|
* cp-tree.h (struct saved_scope): No need for special marking
|
||||||
|
of varrays.
|
||||||
|
(struct language_function): Likewise.
|
||||||
|
(local_classes): Use gengtype to mark.
|
||||||
|
(init_decl2): Delete prototype.
|
||||||
|
* class.c (init_class_processing): Don't use
|
||||||
|
ggc_add_tree_varray_root.
|
||||||
|
(build_vtbl_initializer): Don't use VARRAY_FREE.
|
||||||
|
|
||||||
|
* decl.c (typename_compare): Don't use same_type_p.
|
||||||
|
|
||||||
|
* decl.c: Include hashtab.h instead of hash.h.
|
||||||
|
(typename_hash): Update to use htab_h.
|
||||||
|
(typename_compare): Likewise.
|
||||||
|
(typename_htab): Use gengtype to mark.
|
||||||
|
(build_typename_type): Update to use htab_h.
|
||||||
|
* Make-lang.in (cp/decl.o): Use HASHTAB_H instead of hash.h.
|
||||||
|
|
||||||
|
* Make-lang.in (gt-cp-tree.h): New rule.
|
||||||
|
(cp/tree.o): Depend on gt-cp-tree.h.
|
||||||
|
* config-lang.in (gtfiles): Add cp/tree.c.
|
||||||
|
* tree.c: Include gt-cp-tree.h.
|
||||||
|
(list_hash_table): Use gengtype to mark.
|
||||||
|
(init_tree): Use gengtype to mark trees.
|
||||||
|
|
||||||
|
* Make-lang.in (cp/decl.o): Add debug.h dependency.
|
||||||
|
* call.c (struct z_candidate): Use gengtype.
|
||||||
|
(USER_CONV_CAND): Use WRAPPER_ZC.
|
||||||
|
(convert_class_to_reference): Use build_zc_wrapper.
|
||||||
|
(build_type_conversion_1): Likewise.
|
||||||
|
(build_over_call): Use WRAPPER_ZC.
|
||||||
|
(add_warning): Use build_zc_wrapper.
|
||||||
|
* cp-lang.c (LANG_HOOKS_MARK_TREE): Delete.
|
||||||
|
* cp-tree.h (struct lang_identifier): Use gengtype.
|
||||||
|
(struct template_parm_index_s): Likewise.
|
||||||
|
(struct ptrmem_cst): Likewise.
|
||||||
|
(struct tree_binding): Likewise.
|
||||||
|
(struct tree_overload): Likewise.
|
||||||
|
(struct tree_srcloc): Likewise.
|
||||||
|
(struct tree_wrapper): Likewise. Also modify to have a pointer
|
||||||
|
to struct z_candidate rather than void.
|
||||||
|
(enum cp_tree_node_structure_enum): New.
|
||||||
|
(union lang_tree_node): New.
|
||||||
|
(cxx_mark_tree): Delete prototype.
|
||||||
|
(cp_tree_node_structure): New prototype.
|
||||||
|
(build_ptr_wrapper): Delete prototype.
|
||||||
|
(build_int_wrapper): Delete prototype.
|
||||||
|
(build_zc_wrapper): New prototype.
|
||||||
|
* decl.c: Include debug.h
|
||||||
|
(cxx_mark_tree): Delete.
|
||||||
|
(cp_tree_node_structure): New.
|
||||||
|
* tree.c (build_ptr_wrapper): Delete.
|
||||||
|
(build_int_wrapper): Delete.
|
||||||
|
(build_zc_wrapper): New.
|
||||||
|
|
||||||
|
* cp-tree.h [! ENABLE_TREE_CHECKING] (LANG_TYPE_PTRMEM_CHECK):
|
||||||
|
Correct typo. Patch from k_fukui@highway.ne.jp.
|
||||||
|
|
||||||
|
* semantics.c (current_stmt_tree): Update for change to
|
||||||
|
struct language_function.
|
||||||
|
(finish_mem_initializers): Likewise.
|
||||||
|
* decl.c (cxx_init_decl_processing): Don't set mark_lang_status.
|
||||||
|
* cp-tree.h (struct language_function): Rename from
|
||||||
|
cp_language_function. Change all uses.
|
||||||
|
(cp_function_chain): Don't need to cast.
|
||||||
|
|
||||||
|
* class.c (duplicate_tag_error): Reset discriminator.
|
||||||
|
(check_bases_and_members): Update for data structure changes.
|
||||||
|
* cp-tree.h (struct lang_id2): Use gengtype.
|
||||||
|
(flagged_type_tree): Likewise.
|
||||||
|
(SET_LANG_ID): Use GGC on struct lang_id2.
|
||||||
|
(struct cp_language_function): Use gengtype. Remove field
|
||||||
|
'x_vcalls_possible_p'.
|
||||||
|
(current_vcalls_possible_p): Delete.
|
||||||
|
(struct lang_type_header): New.
|
||||||
|
(struct lang_type_class): Rename from struct lang_type. Include
|
||||||
|
struct lang_type_header.
|
||||||
|
(struct lang_type_ptrmem): New.
|
||||||
|
(struct lang_type): New.
|
||||||
|
(LANG_TYPE_CLASS_CHECK): New. Use it in all the appropriate macros.
|
||||||
|
(LANG_TYPE_PTRMEM_CHECK): New. Use it in all the appropriate macros.
|
||||||
|
(TYPE_SET_PTRMEMFUNC_TYPE): Set discriminator, update for changes.
|
||||||
|
(struct lang_decl_flags): Use gengtype. Add discriminators.
|
||||||
|
(struct lang_decl): Use gengtype. Add and use discriminators.
|
||||||
|
Update the macros that reference moved fields.
|
||||||
|
(LANG_DECL_U2_CHECK): New function. Use it when appropriate.
|
||||||
|
(SET_DECL_THUNK_P): Set discriminator too.
|
||||||
|
(clear_inline_text_obstack): Delete prototype.
|
||||||
|
(finish_inline_definitions): Delete prototype.
|
||||||
|
(mark_pending_inlines): Delete prototype.
|
||||||
|
(lang_check_failed): New prototype.
|
||||||
|
* decl.c (struct named_label_use_list): Use gengtype.
|
||||||
|
(struct named_label_list): Likewise.
|
||||||
|
(mark_binding_level): Delete.
|
||||||
|
(mark_named_label_lists): Delete.
|
||||||
|
(push_local_name): Set discriminator on DECL_LANG_SPECIFIC.
|
||||||
|
(cxx_init_decl_processing): Use generated marker routine.
|
||||||
|
(begin_destructor_body): Delete dead set to
|
||||||
|
current_vcalls_possible_p.
|
||||||
|
(mark_lang_function): Delete.
|
||||||
|
(mark_cp_function_context): Delete.
|
||||||
|
(lang_mark_tree): Use generated marker routines.
|
||||||
|
* decl2.c (start_objects): Set discriminator when setting
|
||||||
|
GLOBAL_INIT_PRIORITY.
|
||||||
|
* lex.c (retrofit_lang_decl): Set discriminators.
|
||||||
|
(copy_lang_type): Update for changes to lang_type structure.
|
||||||
|
(cp_make_lang_type): Set discriminator.
|
||||||
|
* parse.y: Use gengtype on YYLVAL. Don't use dots in identifiers.
|
||||||
|
* search.c: Include ggc.h.
|
||||||
|
* semantics.c (anon_aggr_type_p): Use the macro, don't hand-code it.
|
||||||
|
(finish_inline_definitions): Delete.
|
||||||
|
* spew.c (struct token): Use gengtype.
|
||||||
|
(struct token_chunk): New.
|
||||||
|
(struct unparsed_text): Use gengtype. Store tokens in chunks.
|
||||||
|
(struct feed): Use gengtype.
|
||||||
|
(feed_obstack): Delete.
|
||||||
|
(feed): Mark as GC root.
|
||||||
|
(pending_inlines): Mark as GC root.
|
||||||
|
(pending_inlines_tail): Likewise.
|
||||||
|
(processing_these_inlines): Likewise.
|
||||||
|
(token_obstack): Make static.
|
||||||
|
(first_token): Likewise.
|
||||||
|
(init_spew): Don't initialise deleted things; use gengtype for roots.
|
||||||
|
(clear_inline_text_obstack): Delete.
|
||||||
|
(feed_input): Use GC for struct feed. Update for changes to
|
||||||
|
struct unparsed_text.
|
||||||
|
(mark_pending_inlines): Delete.
|
||||||
|
(next_token): Rename from add_token. Change all callers. Update
|
||||||
|
for changes to struct unparsed_text.
|
||||||
|
(space_for_token): New.
|
||||||
|
(remove_last_token): New.
|
||||||
|
(alloc_unparsed_text): New.
|
||||||
|
(snarf_block): Take an unparsed_text. Update for changes to struct
|
||||||
|
unparsed_text.
|
||||||
|
(snarf_method): Update for changes to struct unparsed_text.
|
||||||
|
(snarf_defarg): Update for changes to struct unparsed_text.
|
||||||
|
* tree.c (lang_check_failed): New.
|
||||||
|
|
||||||
|
* Make-lang.in (gt-cp-call.h gt-cp-decl2.h gt-cp-parse.h
|
||||||
|
gt-cp-pt.h gt-cp-repo.h gt-cp-spew.h): New rules.
|
||||||
|
(cp/spew.o): Add dependency on gt-<filename>.h.
|
||||||
|
(cp/decl2.o): Add dependency on gt-<filename>.h.
|
||||||
|
(cp/call.o): Add dependency on gt-<filename>.h.
|
||||||
|
(cp/pt.o): Add dependency on gt-<filename>.h.
|
||||||
|
(cp/repo.o): Add dependency on gt-<filename>.h.
|
||||||
|
(cp/parse.o): Add dependency on gt-<filename>.h.
|
||||||
|
* call.c: Use gengtype for roots.
|
||||||
|
* config-lang.in (gtfiles): Add cp-tree.h decl.h lex.h call.c
|
||||||
|
decl2.c parse.y pt.c repo.c spew.c.
|
||||||
|
* cp-tree.h: Use gengtype for roots.
|
||||||
|
(struct saved_scope): Use GGC, gengtype.
|
||||||
|
(cp_parse_init): Delete prototype.
|
||||||
|
(init_pt): Delete prototype.
|
||||||
|
* decl.c: Use gengtype for roots.
|
||||||
|
(mark_saved_scope): Delete.
|
||||||
|
(cxx_init_decl_processing): Don't call deleted initilisation
|
||||||
|
routines.
|
||||||
|
(signed_size_zero_node): Delete, unused.
|
||||||
|
* decl.h: Use gengtype for roots.
|
||||||
|
* decl2.c: Use gengtype for roots.
|
||||||
|
* lex.h: Use gengtype for roots.
|
||||||
|
* parse.y: Use gengtype for roots.
|
||||||
|
(cp_parse_init): Delete.
|
||||||
|
* pt.c: Use gengtype for roots.
|
||||||
|
(init_pt): Delete.
|
||||||
|
* repo.c: Use gengtype for roots.
|
||||||
|
* spew.c: Use gengtype for roots.
|
||||||
|
|
||||||
|
* Make-lang.in: Allow for filename changes. Add gtype-cp.h.
|
||||||
|
(cp/decl.o): Add dependency on gtype-cp.h.
|
||||||
|
* decl.c: Remove use of add_deletable_root, use GTY marker instead.
|
||||||
|
Include gtype-cp.h. Allow for filename changes.
|
||||||
|
|
||||||
|
* Make-lang.in (cp/gt-decl.h): Generate using gengtype.
|
||||||
|
(cp/decl.o): Add cp/gt-decl.h dependency.
|
||||||
|
* config-lang.in (gtfiles): New.
|
||||||
|
* tree.h: Rename struct binding_level to struct cp_binding_level.
|
||||||
|
* decl.c: Rename struct binding_level to struct cp_binding_level.
|
||||||
|
Include cp/gt-decl.h.
|
||||||
|
(struct cp_binding_level): Use gengtype.
|
||||||
|
(make_binding_level): Use GGC on struct cp_binding_level.
|
||||||
|
(mark_binding_level): Use gt_ggc_m_cp_binding_level.
|
||||||
|
(cxx_init_decl_processing): Mark free_binding_level as
|
||||||
|
deletable.
|
||||||
|
|
||||||
|
* decl.c (mark_cp_function_context): Update calling sequence.
|
||||||
|
|
||||||
|
* decl.c (start_function): Don't free 'struct
|
||||||
|
cp_language_function'.
|
||||||
|
(pop_cp_function_context): Likewise.
|
||||||
|
(save_function_data): Allocate it using GC.
|
||||||
|
* semantics.c (genrtl_start_function): Don't free 'struct
|
||||||
|
cp_language_function'.
|
||||||
|
|
||||||
2002-05-31 Matthew Woodcraft <mattheww@chiark.greenend.org.uk>
|
2002-05-31 Matthew Woodcraft <mattheww@chiark.greenend.org.uk>
|
||||||
|
|
||||||
* lang-specs.h: Use cpp_debug_options.
|
* lang-specs.h: Use cpp_debug_options.
|
||||||
|
|
|
@ -131,6 +131,10 @@ $(srcdir)/cp/parse.c: $(srcdir)/cp/parse.y
|
||||||
false ; \
|
false ; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
gtype-cp.h gt-cp-call.h gt-cp-decl.h gt-cp-decl2.h : s-gtype; @true
|
||||||
|
gt-cp-parse.h gt-cp-pt.h gt-cp-repo.h gt-cp-spew.h : s-gtype; @true
|
||||||
|
gt-cp-tree.h : s-gtype; @true
|
||||||
|
|
||||||
#
|
#
|
||||||
# Build hooks:
|
# Build hooks:
|
||||||
|
|
||||||
|
@ -247,24 +251,26 @@ CXX_TREE_H = $(TREE_H) cp/cp-tree.h c-common.h cp/cp-tree.def c-common.def \
|
||||||
function.h varray.h $(SYSTEM_H) $(CONFIG_H) $(TARGET_H) \
|
function.h varray.h $(SYSTEM_H) $(CONFIG_H) $(TARGET_H) \
|
||||||
$(srcdir)/../include/hashtab.h $(srcdir)/../include/splay-tree.h
|
$(srcdir)/../include/hashtab.h $(srcdir)/../include/splay-tree.h
|
||||||
|
|
||||||
cp/spew.o: cp/spew.c $(CXX_TREE_H) cp/parse.h flags.h cp/lex.h toplev.h
|
cp/spew.o: cp/spew.c $(CXX_TREE_H) cp/parse.h flags.h cp/lex.h toplev.h \
|
||||||
|
gt-cp-spew.h
|
||||||
cp/lex.o: cp/lex.c $(CXX_TREE_H) cp/parse.h flags.h cp/lex.h c-pragma.h \
|
cp/lex.o: cp/lex.c $(CXX_TREE_H) cp/parse.h flags.h cp/lex.h c-pragma.h \
|
||||||
toplev.h output.h mbchar.h $(GGC_H) input.h diagnostic.h cp/operators.def \
|
toplev.h output.h mbchar.h $(GGC_H) input.h diagnostic.h cp/operators.def \
|
||||||
$(TM_P_H)
|
$(TM_P_H)
|
||||||
cp/cp-lang.o: cp/cp-lang.c $(CXX_TREE_H) toplev.h langhooks.h $(LANGHOOKS_DEF_H) \
|
cp/cp-lang.o: cp/cp-lang.c $(CXX_TREE_H) toplev.h langhooks.h $(LANGHOOKS_DEF_H) \
|
||||||
c-common.h
|
c-common.h
|
||||||
cp/decl.o: cp/decl.c $(CXX_TREE_H) flags.h cp/lex.h cp/decl.h stack.h \
|
cp/decl.o: cp/decl.c $(CXX_TREE_H) flags.h cp/lex.h cp/decl.h stack.h \
|
||||||
output.h $(EXPR_H) except.h toplev.h hash.h $(GGC_H) $(RTL_H) \
|
output.h $(EXPR_H) except.h toplev.h $(HASHTAB_H) $(GGC_H) $(RTL_H) \
|
||||||
cp/operators.def $(TM_P_H) tree-inline.h diagnostic.h c-pragma.h
|
cp/operators.def $(TM_P_H) tree-inline.h diagnostic.h c-pragma.h \
|
||||||
|
debug.h gt-cp-decl.h gtype-cp.h
|
||||||
cp/decl2.o: cp/decl2.c $(CXX_TREE_H) flags.h cp/lex.h cp/decl.h $(EXPR_H) \
|
cp/decl2.o: cp/decl2.c $(CXX_TREE_H) flags.h cp/lex.h cp/decl.h $(EXPR_H) \
|
||||||
output.h except.h toplev.h $(GGC_H) $(RTL_H) c-common.h
|
output.h except.h toplev.h $(GGC_H) $(RTL_H) c-common.h gt-cp-decl2.h
|
||||||
cp/typeck2.o: cp/typeck2.c $(CXX_TREE_H) flags.h toplev.h output.h $(TM_P_H) \
|
cp/typeck2.o: cp/typeck2.c $(CXX_TREE_H) flags.h toplev.h output.h $(TM_P_H) \
|
||||||
diagnostic.h
|
diagnostic.h
|
||||||
cp/typeck.o: cp/typeck.c $(CXX_TREE_H) flags.h $(RTL_H) $(EXPR_H) toplev.h \
|
cp/typeck.o: cp/typeck.c $(CXX_TREE_H) flags.h $(RTL_H) $(EXPR_H) toplev.h \
|
||||||
diagnostic.h
|
diagnostic.h
|
||||||
cp/class.o: cp/class.c $(CXX_TREE_H) flags.h toplev.h $(RTL_H) $(TARGET_H)
|
cp/class.o: cp/class.c $(CXX_TREE_H) flags.h toplev.h $(RTL_H) $(TARGET_H)
|
||||||
cp/call.o: cp/call.c $(CXX_TREE_H) flags.h toplev.h $(RTL_H) $(EXPR_H) \
|
cp/call.o: cp/call.c $(CXX_TREE_H) flags.h toplev.h $(RTL_H) $(EXPR_H) \
|
||||||
$(GGC_H) diagnostic.h
|
$(GGC_H) diagnostic.h gt-cp-call.h
|
||||||
cp/friend.o: cp/friend.c $(CXX_TREE_H) flags.h $(RTL_H) toplev.h $(EXPR_H)
|
cp/friend.o: cp/friend.c $(CXX_TREE_H) flags.h $(RTL_H) toplev.h $(EXPR_H)
|
||||||
cp/init.o: cp/init.c $(CXX_TREE_H) flags.h $(RTL_H) $(EXPR_H) toplev.h \
|
cp/init.o: cp/init.c $(CXX_TREE_H) flags.h $(RTL_H) $(EXPR_H) toplev.h \
|
||||||
$(GGC_H) except.h
|
$(GGC_H) except.h
|
||||||
|
@ -273,7 +279,7 @@ cp/method.o: cp/method.c $(CXX_TREE_H) toplev.h $(GGC_H) $(RTL_H) $(EXPR_H) \
|
||||||
cp/cvt.o: cp/cvt.c $(CXX_TREE_H) cp/decl.h flags.h toplev.h convert.h
|
cp/cvt.o: cp/cvt.c $(CXX_TREE_H) cp/decl.h flags.h toplev.h convert.h
|
||||||
cp/search.o: cp/search.c $(CXX_TREE_H) stack.h flags.h toplev.h $(RTL_H)
|
cp/search.o: cp/search.c $(CXX_TREE_H) stack.h flags.h toplev.h $(RTL_H)
|
||||||
cp/tree.o: cp/tree.c $(CXX_TREE_H) flags.h toplev.h $(GGC_H) $(RTL_H) \
|
cp/tree.o: cp/tree.c $(CXX_TREE_H) flags.h toplev.h $(GGC_H) $(RTL_H) \
|
||||||
insn-config.h integrate.h tree-inline.h real.h
|
insn-config.h integrate.h tree-inline.h real.h gt-cp-tree.h
|
||||||
cp/ptree.o: cp/ptree.c $(CXX_TREE_H) $(SYSTEM_H)
|
cp/ptree.o: cp/ptree.c $(CXX_TREE_H) $(SYSTEM_H)
|
||||||
cp/rtti.o: cp/rtti.c $(CXX_TREE_H) flags.h toplev.h
|
cp/rtti.o: cp/rtti.c $(CXX_TREE_H) flags.h toplev.h
|
||||||
cp/except.o: cp/except.c $(CXX_TREE_H) flags.h $(RTL_H) except.h toplev.h \
|
cp/except.o: cp/except.c $(CXX_TREE_H) flags.h $(RTL_H) except.h toplev.h \
|
||||||
|
@ -281,10 +287,11 @@ cp/except.o: cp/except.c $(CXX_TREE_H) flags.h $(RTL_H) except.h toplev.h \
|
||||||
cp/expr.o: cp/expr.c $(CXX_TREE_H) $(RTL_H) flags.h $(EXPR_H) toplev.h \
|
cp/expr.o: cp/expr.c $(CXX_TREE_H) $(RTL_H) flags.h $(EXPR_H) toplev.h \
|
||||||
except.h $(TM_P_H)
|
except.h $(TM_P_H)
|
||||||
cp/pt.o: cp/pt.c $(CXX_TREE_H) cp/decl.h cp/parse.h cp/lex.h toplev.h \
|
cp/pt.o: cp/pt.c $(CXX_TREE_H) cp/decl.h cp/parse.h cp/lex.h toplev.h \
|
||||||
$(GGC_H) $(RTL_H) except.h tree-inline.h
|
$(GGC_H) $(RTL_H) except.h tree-inline.h gt-cp-pt.h
|
||||||
cp/error.o: cp/error.c $(CXX_TREE_H) toplev.h diagnostic.h flags.h real.h \
|
cp/error.o: cp/error.c $(CXX_TREE_H) toplev.h diagnostic.h flags.h real.h \
|
||||||
$(LANGHOOKS_DEF_H)
|
$(LANGHOOKS_DEF_H)
|
||||||
cp/repo.o: cp/repo.c $(CXX_TREE_H) toplev.h $(GGC_H) diagnostic.h
|
cp/repo.o: cp/repo.c $(CXX_TREE_H) toplev.h $(GGC_H) diagnostic.h \
|
||||||
|
gt-cp-repo.h
|
||||||
cp/semantics.o: cp/semantics.c $(CXX_TREE_H) cp/lex.h except.h toplev.h \
|
cp/semantics.o: cp/semantics.c $(CXX_TREE_H) cp/lex.h except.h toplev.h \
|
||||||
flags.h $(GGC_H) debug.h output.h $(RTL_H) $(TIMEVAR_H) $(EXPR_H) \
|
flags.h $(GGC_H) debug.h output.h $(RTL_H) $(TIMEVAR_H) $(EXPR_H) \
|
||||||
tree-inline.h
|
tree-inline.h
|
||||||
|
@ -294,7 +301,7 @@ cp/optimize.o: cp/optimize.c $(CXX_TREE_H) rtl.h integrate.h insn-config.h \
|
||||||
cp/mangle.o: cp/mangle.c $(CXX_TREE_H) toplev.h real.h
|
cp/mangle.o: cp/mangle.c $(CXX_TREE_H) toplev.h real.h
|
||||||
|
|
||||||
cp/parse.o: cp/parse.c $(CXX_TREE_H) flags.h cp/lex.h except.h output.h \
|
cp/parse.o: cp/parse.c $(CXX_TREE_H) flags.h cp/lex.h except.h output.h \
|
||||||
$(SYSTEM_H) toplev.h $(GGC_H)
|
$(SYSTEM_H) toplev.h $(GGC_H) gt-cp-parse.h
|
||||||
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(BIG_SWITCHFLAG) \
|
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(BIG_SWITCHFLAG) \
|
||||||
$(srcdir)/cp/parse.c $(OUTPUT_OPTION)
|
$(srcdir)/cp/parse.c $(OUTPUT_OPTION)
|
||||||
#
|
#
|
||||||
|
|
|
@ -535,7 +535,7 @@ build_method_call (instance, name, parms, basetype_path, flags)
|
||||||
|
|
||||||
/* New overloading code. */
|
/* New overloading code. */
|
||||||
|
|
||||||
struct z_candidate {
|
struct z_candidate GTY(()) {
|
||||||
tree fn;
|
tree fn;
|
||||||
tree convs;
|
tree convs;
|
||||||
tree second_conv;
|
tree second_conv;
|
||||||
|
@ -572,8 +572,7 @@ struct z_candidate {
|
||||||
should be created to hold the result of the conversion. */
|
should be created to hold the result of the conversion. */
|
||||||
#define NEED_TEMPORARY_P(NODE) TREE_LANG_FLAG_4 (NODE)
|
#define NEED_TEMPORARY_P(NODE) TREE_LANG_FLAG_4 (NODE)
|
||||||
|
|
||||||
#define USER_CONV_CAND(NODE) \
|
#define USER_CONV_CAND(NODE) WRAPPER_ZC (TREE_OPERAND (NODE, 1))
|
||||||
((struct z_candidate *)WRAPPER_PTR (TREE_OPERAND (NODE, 1)))
|
|
||||||
#define USER_CONV_FN(NODE) (USER_CONV_CAND (NODE)->fn)
|
#define USER_CONV_FN(NODE) (USER_CONV_CAND (NODE)->fn)
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -1022,7 +1021,7 @@ convert_class_to_reference (t, s, expr)
|
||||||
conv = build1 (IDENTITY_CONV, s, expr);
|
conv = build1 (IDENTITY_CONV, s, expr);
|
||||||
conv = build_conv (USER_CONV, TREE_TYPE (TREE_TYPE (cand->fn)),
|
conv = build_conv (USER_CONV, TREE_TYPE (TREE_TYPE (cand->fn)),
|
||||||
conv);
|
conv);
|
||||||
TREE_OPERAND (conv, 1) = build_ptr_wrapper (cand);
|
TREE_OPERAND (conv, 1) = build_zc_wrapper (cand);
|
||||||
ICS_USER_FLAG (conv) = 1;
|
ICS_USER_FLAG (conv) = 1;
|
||||||
if (cand->viable == -1)
|
if (cand->viable == -1)
|
||||||
ICS_BAD_FLAG (conv) = 1;
|
ICS_BAD_FLAG (conv) = 1;
|
||||||
|
@ -2559,7 +2558,7 @@ build_user_type_conversion_1 (totype, expr, flags)
|
||||||
(USER_CONV,
|
(USER_CONV,
|
||||||
(DECL_CONSTRUCTOR_P (cand->fn)
|
(DECL_CONSTRUCTOR_P (cand->fn)
|
||||||
? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
|
? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
|
||||||
expr, build_ptr_wrapper (cand));
|
expr, build_zc_wrapper (cand));
|
||||||
|
|
||||||
ICS_USER_FLAG (cand->second_conv) = ICS_USER_FLAG (*p) = 1;
|
ICS_USER_FLAG (cand->second_conv) = ICS_USER_FLAG (*p) = 1;
|
||||||
if (cand->viable == -1)
|
if (cand->viable == -1)
|
||||||
|
@ -3826,7 +3825,7 @@ convert_like_real (convs, expr, fn, argnum, inner)
|
||||||
case USER_CONV:
|
case USER_CONV:
|
||||||
{
|
{
|
||||||
struct z_candidate *cand
|
struct z_candidate *cand
|
||||||
= WRAPPER_PTR (TREE_OPERAND (convs, 1));
|
= WRAPPER_ZC (TREE_OPERAND (convs, 1));
|
||||||
tree convfn = cand->fn;
|
tree convfn = cand->fn;
|
||||||
tree args;
|
tree args;
|
||||||
|
|
||||||
|
@ -4160,7 +4159,7 @@ build_over_call (cand, args, flags)
|
||||||
/* Give any warnings we noticed during overload resolution. */
|
/* Give any warnings we noticed during overload resolution. */
|
||||||
if (cand->warnings)
|
if (cand->warnings)
|
||||||
for (val = cand->warnings; val; val = TREE_CHAIN (val))
|
for (val = cand->warnings; val; val = TREE_CHAIN (val))
|
||||||
joust (cand, WRAPPER_PTR (TREE_VALUE (val)), 1);
|
joust (cand, WRAPPER_ZC (TREE_VALUE (val)), 1);
|
||||||
|
|
||||||
if (DECL_FUNCTION_MEMBER_P (fn))
|
if (DECL_FUNCTION_MEMBER_P (fn))
|
||||||
enforce_access (cand->basetype_path, fn);
|
enforce_access (cand->basetype_path, fn);
|
||||||
|
@ -4405,7 +4404,7 @@ build_over_call (cand, args, flags)
|
||||||
return convert_from_reference (fn);
|
return convert_from_reference (fn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static tree java_iface_lookup_fn;
|
static GTY(()) tree java_iface_lookup_fn;
|
||||||
|
|
||||||
/* Make an expression which yields the address of the Java interface
|
/* Make an expression which yields the address of the Java interface
|
||||||
method FN. This is achieved by generating a call to libjava's
|
method FN. This is achieved by generating a call to libjava's
|
||||||
|
@ -4430,7 +4429,6 @@ build_java_interface_fn_ref (fn, instance)
|
||||||
= builtin_function ("_Jv_LookupInterfaceMethodIdx",
|
= builtin_function ("_Jv_LookupInterfaceMethodIdx",
|
||||||
build_function_type (ptr_type_node, t),
|
build_function_type (ptr_type_node, t),
|
||||||
0, NOT_BUILT_IN, NULL);
|
0, NOT_BUILT_IN, NULL);
|
||||||
ggc_add_tree_root (&java_iface_lookup_fn, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Look up the pointer to the runtime java.lang.Class object for `instance'.
|
/* Look up the pointer to the runtime java.lang.Class object for `instance'.
|
||||||
|
@ -5207,7 +5205,7 @@ add_warning (winner, loser)
|
||||||
struct z_candidate *winner, *loser;
|
struct z_candidate *winner, *loser;
|
||||||
{
|
{
|
||||||
winner->warnings = tree_cons (NULL_TREE,
|
winner->warnings = tree_cons (NULL_TREE,
|
||||||
build_ptr_wrapper (loser),
|
build_zc_wrapper (loser),
|
||||||
winner->warnings);
|
winner->warnings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5635,3 +5633,5 @@ initialize_reference (type, expr)
|
||||||
|
|
||||||
return convert_like (conv, expr);
|
return convert_like (conv, expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-cp-call.h"
|
||||||
|
|
|
@ -2157,6 +2157,7 @@ duplicate_tag_error (t)
|
||||||
memset ((char *) TYPE_LANG_SPECIFIC (t), 0, sizeof (struct lang_type));
|
memset ((char *) TYPE_LANG_SPECIFIC (t), 0, sizeof (struct lang_type));
|
||||||
BINFO_BASETYPES(binfo) = NULL_TREE;
|
BINFO_BASETYPES(binfo) = NULL_TREE;
|
||||||
|
|
||||||
|
TYPE_LANG_SPECIFIC (t)->u.h.is_lang_type_class = 1;
|
||||||
TYPE_BINFO (t) = binfo;
|
TYPE_BINFO (t) = binfo;
|
||||||
CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
|
CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
|
||||||
SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, interface_unknown);
|
SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, interface_unknown);
|
||||||
|
@ -4379,7 +4380,7 @@ check_bases_and_members (t, empty_p)
|
||||||
|
|
||||||
/* Figure out whether or not we will need a cookie when dynamically
|
/* Figure out whether or not we will need a cookie when dynamically
|
||||||
allocating an array of this type. */
|
allocating an array of this type. */
|
||||||
TYPE_LANG_SPECIFIC (t)->vec_new_uses_cookie
|
TYPE_LANG_SPECIFIC (t)->u.c.vec_new_uses_cookie
|
||||||
= type_requires_array_cookie (t);
|
= type_requires_array_cookie (t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5470,7 +5471,6 @@ init_class_processing ()
|
||||||
= (class_stack_node_t) xmalloc (current_class_stack_size
|
= (class_stack_node_t) xmalloc (current_class_stack_size
|
||||||
* sizeof (struct class_stack_node));
|
* sizeof (struct class_stack_node));
|
||||||
VARRAY_TREE_INIT (local_classes, 8, "local_classes");
|
VARRAY_TREE_INIT (local_classes, 8, "local_classes");
|
||||||
ggc_add_tree_varray_root (&local_classes, 1);
|
|
||||||
|
|
||||||
access_default_node = build_int_2 (0, 0);
|
access_default_node = build_int_2 (0, 0);
|
||||||
access_public_node = build_int_2 (ak_public, 0);
|
access_public_node = build_int_2 (ak_public, 0);
|
||||||
|
@ -7511,8 +7511,6 @@ build_vtbl_initializer (binfo, orig_binfo, t, rtti_binfo, non_fn_entries_p)
|
||||||
VARRAY_TREE_INIT (vid.fns, 32, "fns");
|
VARRAY_TREE_INIT (vid.fns, 32, "fns");
|
||||||
/* Add the vcall and vbase offset entries. */
|
/* Add the vcall and vbase offset entries. */
|
||||||
build_vcall_and_vbase_vtbl_entries (binfo, &vid);
|
build_vcall_and_vbase_vtbl_entries (binfo, &vid);
|
||||||
/* Clean up. */
|
|
||||||
VARRAY_FREE (vid.fns);
|
|
||||||
/* Clear BINFO_VTABLE_PATH_MARKED; it's set by
|
/* Clear BINFO_VTABLE_PATH_MARKED; it's set by
|
||||||
build_vbase_offset_vtbl_entries. */
|
build_vbase_offset_vtbl_entries. */
|
||||||
for (vbase = CLASSTYPE_VBASECLASSES (t);
|
for (vbase = CLASSTYPE_VBASECLASSES (t);
|
||||||
|
|
|
@ -33,3 +33,5 @@ compilers="cc1plus\$(exeext)"
|
||||||
stagestuff="g++\$(exeext) g++-cross\$(exeext) cc1plus\$(exeext)"
|
stagestuff="g++\$(exeext) g++-cross\$(exeext) cc1plus\$(exeext)"
|
||||||
|
|
||||||
target_libs="${libstdcxx_version} target-gperf"
|
target_libs="${libstdcxx_version} target-gperf"
|
||||||
|
|
||||||
|
gtfiles="\$(srcdir)/cp/cp-tree.h \$(srcdir)/cp/decl.h \$(srcdir)/cp/lex.h \$(srcdir)/cp/call.c \$(srcdir)/cp/decl.c \$(srcdir)/cp/decl2.c \$(srcdir)/cp/parse.y \$(srcdir)/cp/pt.c \$(srcdir)/cp/repo.c \$(srcdir)/cp/spew.c \$(srcdir)/cp/tree.c"
|
||||||
|
|
|
@ -66,8 +66,6 @@ static bool cxx_warn_unused_global_decl PARAMS ((tree));
|
||||||
#define LANG_HOOKS_TRUTHVALUE_CONVERSION c_common_truthvalue_conversion
|
#define LANG_HOOKS_TRUTHVALUE_CONVERSION c_common_truthvalue_conversion
|
||||||
#undef LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES
|
#undef LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES
|
||||||
#define LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES cxx_insert_default_attributes
|
#define LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES cxx_insert_default_attributes
|
||||||
#undef LANG_HOOKS_MARK_TREE
|
|
||||||
#define LANG_HOOKS_MARK_TREE cxx_mark_tree
|
|
||||||
#undef LANG_HOOKS_UNSAFE_FOR_REEVAL
|
#undef LANG_HOOKS_UNSAFE_FOR_REEVAL
|
||||||
#define LANG_HOOKS_UNSAFE_FOR_REEVAL c_common_unsafe_for_reeval
|
#define LANG_HOOKS_UNSAFE_FOR_REEVAL c_common_unsafe_for_reeval
|
||||||
#undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME
|
#undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME
|
||||||
|
@ -93,10 +91,8 @@ static bool cxx_warn_unused_global_decl PARAMS ((tree));
|
||||||
|
|
||||||
#undef LANG_HOOKS_FUNCTION_INIT
|
#undef LANG_HOOKS_FUNCTION_INIT
|
||||||
#define LANG_HOOKS_FUNCTION_INIT cxx_push_function_context
|
#define LANG_HOOKS_FUNCTION_INIT cxx_push_function_context
|
||||||
#undef LANG_HOOKS_FUNCTION_FREE
|
#undef LANG_HOOKS_FUNCTION_FINAL
|
||||||
#define LANG_HOOKS_FUNCTION_FREE cxx_pop_function_context
|
#define LANG_HOOKS_FUNCTION_FINAL cxx_pop_function_context
|
||||||
#undef LANG_HOOKS_FUNCTION_MARK
|
|
||||||
#define LANG_HOOKS_FUNCTION_MARK cxx_mark_function_context
|
|
||||||
|
|
||||||
/* Attribute hooks. */
|
/* Attribute hooks. */
|
||||||
#undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE
|
#undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE
|
||||||
|
|
462
gcc/cp/cp-tree.h
462
gcc/cp/cp-tree.h
File diff suppressed because it is too large
Load Diff
556
gcc/cp/decl.c
556
gcc/cp/decl.c
File diff suppressed because it is too large
Load Diff
|
@ -36,13 +36,13 @@ extern tree grokdeclarator PARAMS ((tree, tree, enum decl_context, int,
|
||||||
|
|
||||||
/* Parsing a function declarator leaves a list of parameter names
|
/* Parsing a function declarator leaves a list of parameter names
|
||||||
or a chain or parameter decls here. */
|
or a chain or parameter decls here. */
|
||||||
extern tree last_function_parms;
|
extern GTY(()) tree last_function_parms;
|
||||||
|
|
||||||
/* A list of objects which have constructors or destructors
|
/* A list of objects which have constructors or destructors
|
||||||
which reside in the global scope. The decl is stored in
|
which reside in the global scope. The decl is stored in
|
||||||
the TREE_VALUE slot and the initializer is stored
|
the TREE_VALUE slot and the initializer is stored
|
||||||
in the TREE_PURPOSE slot. */
|
in the TREE_PURPOSE slot. */
|
||||||
extern tree static_aggregates;
|
extern GTY(()) tree static_aggregates;
|
||||||
|
|
||||||
#ifdef DEBUG_CP_BINDING_LEVELS
|
#ifdef DEBUG_CP_BINDING_LEVELS
|
||||||
/* Purely for debugging purposes. */
|
/* Purely for debugging purposes. */
|
||||||
|
|
|
@ -95,13 +95,13 @@ static tree get_guard_bits PARAMS ((tree));
|
||||||
/* A list of static class variables. This is needed, because a
|
/* A list of static class variables. This is needed, because a
|
||||||
static class variable can be declared inside the class without
|
static class variable can be declared inside the class without
|
||||||
an initializer, and then initialized, statically, outside the class. */
|
an initializer, and then initialized, statically, outside the class. */
|
||||||
static varray_type pending_statics;
|
static GTY(()) varray_type pending_statics;
|
||||||
#define pending_statics_used \
|
#define pending_statics_used \
|
||||||
(pending_statics ? pending_statics->elements_used : 0)
|
(pending_statics ? pending_statics->elements_used : 0)
|
||||||
|
|
||||||
/* A list of functions which were declared inline, but which we
|
/* A list of functions which were declared inline, but which we
|
||||||
may need to emit outline anyway. */
|
may need to emit outline anyway. */
|
||||||
static varray_type deferred_fns;
|
static GTY(()) varray_type deferred_fns;
|
||||||
#define deferred_fns_used \
|
#define deferred_fns_used \
|
||||||
(deferred_fns ? deferred_fns->elements_used : 0)
|
(deferred_fns ? deferred_fns->elements_used : 0)
|
||||||
|
|
||||||
|
@ -2712,6 +2712,7 @@ start_objects (method_type, initp)
|
||||||
DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
|
DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
|
||||||
else
|
else
|
||||||
DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
|
DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
|
||||||
|
DECL_LANG_SPECIFIC (current_function_decl)->decl_flags.u2sel = 1;
|
||||||
GLOBAL_INIT_PRIORITY (current_function_decl) = initp;
|
GLOBAL_INIT_PRIORITY (current_function_decl) = initp;
|
||||||
|
|
||||||
body = begin_compound_stmt (/*has_no_scope=*/0);
|
body = begin_compound_stmt (/*has_no_scope=*/0);
|
||||||
|
@ -2768,17 +2769,17 @@ finish_objects (method_type, initp, body)
|
||||||
#define SSDF_IDENTIFIER "__static_initialization_and_destruction"
|
#define SSDF_IDENTIFIER "__static_initialization_and_destruction"
|
||||||
|
|
||||||
/* The declaration for the __INITIALIZE_P argument. */
|
/* The declaration for the __INITIALIZE_P argument. */
|
||||||
static tree initialize_p_decl;
|
static GTY(()) tree initialize_p_decl;
|
||||||
|
|
||||||
/* The declaration for the __PRIORITY argument. */
|
/* The declaration for the __PRIORITY argument. */
|
||||||
static tree priority_decl;
|
static GTY(()) tree priority_decl;
|
||||||
|
|
||||||
/* The declaration for the static storage duration function. */
|
/* The declaration for the static storage duration function. */
|
||||||
static tree ssdf_decl;
|
static GTY(()) tree ssdf_decl;
|
||||||
|
|
||||||
/* All the static storage duration functions created in this
|
/* All the static storage duration functions created in this
|
||||||
translation unit. */
|
translation unit. */
|
||||||
static varray_type ssdf_decls;
|
static GTY(()) varray_type ssdf_decls;
|
||||||
|
|
||||||
/* A map from priority levels to information about that priority
|
/* A map from priority levels to information about that priority
|
||||||
level. There may be many such levels, so efficient lookup is
|
level. There may be many such levels, so efficient lookup is
|
||||||
|
@ -5280,15 +5281,4 @@ handle_class_head (aggr, scope, id, defn_p, new_type_p)
|
||||||
return decl;
|
return decl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize decl2.c. */
|
#include "gt-cp-decl2.h"
|
||||||
|
|
||||||
void
|
|
||||||
init_decl2 ()
|
|
||||||
{
|
|
||||||
ggc_add_tree_varray_root (&deferred_fns, 1);
|
|
||||||
ggc_add_tree_varray_root (&pending_statics, 1);
|
|
||||||
ggc_add_tree_varray_root (&ssdf_decls, 1);
|
|
||||||
ggc_add_tree_root (&ssdf_decl, 1);
|
|
||||||
ggc_add_tree_root (&priority_decl, 1);
|
|
||||||
ggc_add_tree_root (&initialize_p_decl, 1);
|
|
||||||
}
|
|
||||||
|
|
10
gcc/cp/lex.c
10
gcc/cp/lex.c
|
@ -1434,6 +1434,12 @@ retrofit_lang_decl (t)
|
||||||
|
|
||||||
ld = (struct lang_decl *) ggc_alloc_cleared (size);
|
ld = (struct lang_decl *) ggc_alloc_cleared (size);
|
||||||
|
|
||||||
|
ld->decl_flags.can_be_full = CAN_HAVE_FULL_LANG_DECL_P (t) ? 1 : 0;
|
||||||
|
ld->decl_flags.u1sel = TREE_CODE (t) == NAMESPACE_DECL ? 1 : 0;
|
||||||
|
ld->decl_flags.u2sel = 0;
|
||||||
|
if (ld->decl_flags.can_be_full)
|
||||||
|
ld->u.f.u3sel = TREE_CODE (t) == FUNCTION_DECL ? 1 : 0;
|
||||||
|
|
||||||
DECL_LANG_SPECIFIC (t) = ld;
|
DECL_LANG_SPECIFIC (t) = ld;
|
||||||
if (current_lang_name == lang_name_cplusplus)
|
if (current_lang_name == lang_name_cplusplus)
|
||||||
SET_DECL_LANGUAGE (t, lang_cplusplus);
|
SET_DECL_LANGUAGE (t, lang_cplusplus);
|
||||||
|
@ -1498,7 +1504,10 @@ copy_lang_type (node)
|
||||||
if (! TYPE_LANG_SPECIFIC (node))
|
if (! TYPE_LANG_SPECIFIC (node))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (TYPE_LANG_SPECIFIC (node)->u.h.is_lang_type_class)
|
||||||
size = sizeof (struct lang_type);
|
size = sizeof (struct lang_type);
|
||||||
|
else
|
||||||
|
size = sizeof (struct lang_type_ptrmem);
|
||||||
lt = (struct lang_type *) ggc_alloc (size);
|
lt = (struct lang_type *) ggc_alloc (size);
|
||||||
memcpy (lt, TYPE_LANG_SPECIFIC (node), size);
|
memcpy (lt, TYPE_LANG_SPECIFIC (node), size);
|
||||||
TYPE_LANG_SPECIFIC (node) = lt;
|
TYPE_LANG_SPECIFIC (node) = lt;
|
||||||
|
@ -1538,6 +1547,7 @@ cxx_make_type (code)
|
||||||
ggc_alloc_cleared (sizeof (struct lang_type)));
|
ggc_alloc_cleared (sizeof (struct lang_type)));
|
||||||
|
|
||||||
TYPE_LANG_SPECIFIC (t) = pi;
|
TYPE_LANG_SPECIFIC (t) = pi;
|
||||||
|
pi->u.c.h.is_lang_type_class = 1;
|
||||||
|
|
||||||
#ifdef GATHER_STATISTICS
|
#ifdef GATHER_STATISTICS
|
||||||
tree_node_counts[(int)lang_type] += 1;
|
tree_node_counts[(int)lang_type] += 1;
|
||||||
|
|
|
@ -68,15 +68,15 @@ typedef unsigned long RID_BIT_TYPE; /* assumed at least 32 bits */
|
||||||
yylex must look this up to detect typedefs, which get token type TYPENAME,
|
yylex must look this up to detect typedefs, which get token type TYPENAME,
|
||||||
so it is left around in case the identifier is not a typedef but is
|
so it is left around in case the identifier is not a typedef but is
|
||||||
used in a context which makes it a reference to a variable. */
|
used in a context which makes it a reference to a variable. */
|
||||||
extern tree lastiddecl;
|
extern GTY(()) tree lastiddecl;
|
||||||
|
|
||||||
/* Back-door communication channel to the lexer. */
|
/* Back-door communication channel to the lexer. */
|
||||||
extern int looking_for_typename;
|
extern int looking_for_typename;
|
||||||
extern int looking_for_template;
|
extern int looking_for_template;
|
||||||
|
|
||||||
/* Tell the lexer where to look for names. */
|
/* Tell the lexer where to look for names. */
|
||||||
extern tree got_scope;
|
extern GTY(()) tree got_scope;
|
||||||
extern tree got_object;
|
extern GTY(()) tree got_object;
|
||||||
|
|
||||||
/* Pending language change.
|
/* Pending language change.
|
||||||
Positive is push count, negative is pop count. */
|
Positive is push count, negative is pop count. */
|
||||||
|
|
|
@ -2166,6 +2166,7 @@ write_substitution (seq_id)
|
||||||
static inline void
|
static inline void
|
||||||
start_mangling ()
|
start_mangling ()
|
||||||
{
|
{
|
||||||
|
VARRAY_TREE_INIT (G.substitutions, 1, "mangling substitutions");
|
||||||
obstack_free (&G.name_obstack, obstack_base (&G.name_obstack));
|
obstack_free (&G.name_obstack, obstack_base (&G.name_obstack));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2175,7 +2176,7 @@ static inline const char *
|
||||||
finish_mangling ()
|
finish_mangling ()
|
||||||
{
|
{
|
||||||
/* Clear all the substitutions. */
|
/* Clear all the substitutions. */
|
||||||
VARRAY_POP_ALL (G.substitutions);
|
G.substitutions = 0;
|
||||||
|
|
||||||
/* Null-terminate the string. */
|
/* Null-terminate the string. */
|
||||||
write_char ('\0');
|
write_char ('\0');
|
||||||
|
@ -2189,7 +2190,6 @@ void
|
||||||
init_mangle ()
|
init_mangle ()
|
||||||
{
|
{
|
||||||
gcc_obstack_init (&G.name_obstack);
|
gcc_obstack_init (&G.name_obstack);
|
||||||
VARRAY_TREE_INIT (G.substitutions, 1, "mangling substitutions");
|
|
||||||
|
|
||||||
/* Cache these identifiers for quick comparison when checking for
|
/* Cache these identifiers for quick comparison when checking for
|
||||||
standard substitutions. */
|
standard substitutions. */
|
||||||
|
|
|
@ -103,21 +103,21 @@ int have_extern_spec;
|
||||||
int used_extern_spec;
|
int used_extern_spec;
|
||||||
|
|
||||||
/* List of types and structure classes of the current declaration. */
|
/* List of types and structure classes of the current declaration. */
|
||||||
static tree current_declspecs;
|
static GTY(()) tree current_declspecs;
|
||||||
|
|
||||||
/* List of prefix attributes in effect.
|
/* List of prefix attributes in effect.
|
||||||
Prefix attributes are parsed by the reserved_declspecs and declmods
|
Prefix attributes are parsed by the reserved_declspecs and declmods
|
||||||
rules. They create a list that contains *both* declspecs and attrs. */
|
rules. They create a list that contains *both* declspecs and attrs. */
|
||||||
/* ??? It is not clear yet that all cases where an attribute can now appear in
|
/* ??? It is not clear yet that all cases where an attribute can now appear in
|
||||||
a declspec list have been updated. */
|
a declspec list have been updated. */
|
||||||
static tree prefix_attributes;
|
static GTY(()) tree prefix_attributes;
|
||||||
|
|
||||||
/* When defining an enumeration, this is the type of the enumeration. */
|
/* When defining an enumeration, this is the type of the enumeration. */
|
||||||
static tree current_enum_type;
|
static GTY(()) tree current_enum_type;
|
||||||
|
|
||||||
/* When parsing a conversion operator name, this is the scope of the
|
/* When parsing a conversion operator name, this is the scope of the
|
||||||
operator itself. */
|
operator itself. */
|
||||||
static tree saved_scopes;
|
static GTY(()) tree saved_scopes;
|
||||||
|
|
||||||
static tree empty_parms PARAMS ((void));
|
static tree empty_parms PARAMS ((void));
|
||||||
static tree parse_decl0 PARAMS ((tree, tree, tree, tree, int));
|
static tree parse_decl0 PARAMS ((tree, tree, tree, tree, int));
|
||||||
|
@ -263,19 +263,11 @@ check_class_key (key, aggr)
|
||||||
: key == record_type_node ? "struct" : "class", aggr);
|
: key == record_type_node ? "struct" : "class", aggr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
cp_parse_init ()
|
|
||||||
{
|
|
||||||
ggc_add_tree_root (¤t_declspecs, 1);
|
|
||||||
ggc_add_tree_root (&prefix_attributes, 1);
|
|
||||||
ggc_add_tree_root (¤t_enum_type, 1);
|
|
||||||
ggc_add_tree_root (&saved_scopes, 1);
|
|
||||||
}
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%start program
|
%start program
|
||||||
|
|
||||||
%union {
|
%union { GTY(())
|
||||||
long itype;
|
long itype;
|
||||||
tree ttype;
|
tree ttype;
|
||||||
char *strtype;
|
char *strtype;
|
||||||
|
@ -388,7 +380,7 @@ cp_parse_init ()
|
||||||
%type <ttype> paren_expr_or_null nontrivial_exprlist SELFNAME
|
%type <ttype> paren_expr_or_null nontrivial_exprlist SELFNAME
|
||||||
%type <ttype> expr_no_commas expr_no_comma_rangle
|
%type <ttype> expr_no_commas expr_no_comma_rangle
|
||||||
%type <ttype> cast_expr unary_expr primary STRING
|
%type <ttype> cast_expr unary_expr primary STRING
|
||||||
%type <ttype> reserved_declspecs boolean.literal
|
%type <ttype> reserved_declspecs boolean_literal
|
||||||
%type <ttype> reserved_typespecquals
|
%type <ttype> reserved_typespecquals
|
||||||
%type <ttype> SCSPEC TYPESPEC CV_QUALIFIER maybe_cv_qualifier
|
%type <ttype> SCSPEC TYPESPEC CV_QUALIFIER maybe_cv_qualifier
|
||||||
%type <ttype> init initlist maybeasm maybe_init defarg defarg1
|
%type <ttype> init initlist maybeasm maybe_init defarg defarg1
|
||||||
|
@ -436,13 +428,13 @@ cp_parse_init ()
|
||||||
%token <ttype> PRE_PARSED_CLASS_DECL DEFARG DEFARG_MARKER
|
%token <ttype> PRE_PARSED_CLASS_DECL DEFARG DEFARG_MARKER
|
||||||
%token <pi> PRE_PARSED_FUNCTION_DECL
|
%token <pi> PRE_PARSED_FUNCTION_DECL
|
||||||
%type <ttype> component_constructor_declarator
|
%type <ttype> component_constructor_declarator
|
||||||
%type <ttype> fn.def2 return_id constructor_declarator
|
%type <ttype> fn_def2 return_id constructor_declarator
|
||||||
%type <ttype> .begin_function_body
|
%type <ttype> begin_function_body_
|
||||||
%type <ttype> class_head class_head_apparent_template
|
%type <ttype> class_head class_head_apparent_template
|
||||||
%type <ftype> class_head_decl class_head_defn
|
%type <ftype> class_head_decl class_head_defn
|
||||||
%type <ttype> base_class_list
|
%type <ttype> base_class_list
|
||||||
%type <ttype> base_class_access_list
|
%type <ttype> base_class_access_list
|
||||||
%type <ttype> base_class maybe_base_class_list base_class.1
|
%type <ttype> base_class maybe_base_class_list base_class_1
|
||||||
%type <ttype> exception_specification_opt ansi_raise_identifier ansi_raise_identifiers
|
%type <ttype> exception_specification_opt ansi_raise_identifier ansi_raise_identifiers
|
||||||
%type <ttype> operator_name
|
%type <ttype> operator_name
|
||||||
%type <ttype> object aggr
|
%type <ttype> object aggr
|
||||||
|
@ -470,7 +462,7 @@ cp_parse_init ()
|
||||||
%token TYPENAME_DEFN IDENTIFIER_DEFN PTYPENAME_DEFN
|
%token TYPENAME_DEFN IDENTIFIER_DEFN PTYPENAME_DEFN
|
||||||
%type <ttype> identifier_defn IDENTIFIER_DEFN TYPENAME_DEFN PTYPENAME_DEFN
|
%type <ttype> identifier_defn IDENTIFIER_DEFN TYPENAME_DEFN PTYPENAME_DEFN
|
||||||
%type <ttype> handler_args
|
%type <ttype> handler_args
|
||||||
%type <ttype> self_template_type .finish_template_type
|
%type <ttype> self_template_type finish_template_type_
|
||||||
|
|
||||||
%token NSNAME
|
%token NSNAME
|
||||||
%type <ttype> NSNAME
|
%type <ttype> NSNAME
|
||||||
|
@ -815,7 +807,7 @@ eat_saved_input:
|
||||||
mem-initializer-list, so we open one there and suppress the one that
|
mem-initializer-list, so we open one there and suppress the one that
|
||||||
actually corresponds to the curly braces. */
|
actually corresponds to the curly braces. */
|
||||||
function_body:
|
function_body:
|
||||||
.begin_function_body ctor_initializer_opt save_lineno '{'
|
begin_function_body_ ctor_initializer_opt save_lineno '{'
|
||||||
{ $<ttype>$ = begin_compound_stmt (/*has_no_scope=*/1); }
|
{ $<ttype>$ = begin_compound_stmt (/*has_no_scope=*/1); }
|
||||||
compstmtend
|
compstmtend
|
||||||
{
|
{
|
||||||
|
@ -909,7 +901,7 @@ component_constructor_declarator:
|
||||||
|
|
||||||
/* more C++ complexity. See component_decl for a comment on the
|
/* more C++ complexity. See component_decl for a comment on the
|
||||||
reduce/reduce conflict introduced by these rules. */
|
reduce/reduce conflict introduced by these rules. */
|
||||||
fn.def2:
|
fn_def2:
|
||||||
declmods component_constructor_declarator
|
declmods component_constructor_declarator
|
||||||
{ $$ = parse_method ($2, $1.t, $1.lookups);
|
{ $$ = parse_method ($2, $1.t, $1.lookups);
|
||||||
rest_of_mdef:
|
rest_of_mdef:
|
||||||
|
@ -963,7 +955,7 @@ base_init:
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
.begin_function_body:
|
begin_function_body_:
|
||||||
/* empty */
|
/* empty */
|
||||||
{
|
{
|
||||||
$$ = begin_function_body ();
|
$$ = begin_function_body ();
|
||||||
|
@ -1095,10 +1087,10 @@ end_explicit_instantiation:
|
||||||
|
|
||||||
template_type:
|
template_type:
|
||||||
PTYPENAME '<' template_arg_list_opt template_close_bracket
|
PTYPENAME '<' template_arg_list_opt template_close_bracket
|
||||||
.finish_template_type
|
finish_template_type_
|
||||||
{ $$ = $5; }
|
{ $$ = $5; }
|
||||||
| TYPENAME '<' template_arg_list_opt template_close_bracket
|
| TYPENAME '<' template_arg_list_opt template_close_bracket
|
||||||
.finish_template_type
|
finish_template_type_
|
||||||
{ $$ = $5; }
|
{ $$ = $5; }
|
||||||
| self_template_type
|
| self_template_type
|
||||||
;
|
;
|
||||||
|
@ -1106,17 +1098,17 @@ template_type:
|
||||||
apparent_template_type:
|
apparent_template_type:
|
||||||
template_type
|
template_type
|
||||||
| identifier '<' template_arg_list_opt '>'
|
| identifier '<' template_arg_list_opt '>'
|
||||||
.finish_template_type
|
finish_template_type_
|
||||||
{ $$ = $5; }
|
{ $$ = $5; }
|
||||||
;
|
;
|
||||||
|
|
||||||
self_template_type:
|
self_template_type:
|
||||||
SELFNAME '<' template_arg_list_opt template_close_bracket
|
SELFNAME '<' template_arg_list_opt template_close_bracket
|
||||||
.finish_template_type
|
finish_template_type_
|
||||||
{ $$ = $5; }
|
{ $$ = $5; }
|
||||||
;
|
;
|
||||||
|
|
||||||
.finish_template_type:
|
finish_template_type_:
|
||||||
{
|
{
|
||||||
if (yychar == YYEMPTY)
|
if (yychar == YYEMPTY)
|
||||||
yychar = YYLEX;
|
yychar = YYLEX;
|
||||||
|
@ -1615,7 +1607,7 @@ primary:
|
||||||
$$ = finish_id_expr ($1);
|
$$ = finish_id_expr ($1);
|
||||||
}
|
}
|
||||||
| CONSTANT
|
| CONSTANT
|
||||||
| boolean.literal
|
| boolean_literal
|
||||||
| STRING
|
| STRING
|
||||||
{
|
{
|
||||||
$$ = fix_string_type ($$);
|
$$ = fix_string_type ($$);
|
||||||
|
@ -1813,7 +1805,7 @@ delete:
|
||||||
{ got_scope = NULL_TREE; $$ = 1; }
|
{ got_scope = NULL_TREE; $$ = 1; }
|
||||||
;
|
;
|
||||||
|
|
||||||
boolean.literal:
|
boolean_literal:
|
||||||
CXX_TRUE
|
CXX_TRUE
|
||||||
{ $$ = boolean_true_node; }
|
{ $$ = boolean_true_node; }
|
||||||
| CXX_FALSE
|
| CXX_FALSE
|
||||||
|
@ -2372,7 +2364,6 @@ structsp:
|
||||||
}
|
}
|
||||||
pending_inlines
|
pending_inlines
|
||||||
{
|
{
|
||||||
finish_inline_definitions ();
|
|
||||||
$$.t = $<ttype>8;
|
$$.t = $<ttype>8;
|
||||||
$$.new_type_flag = 1;
|
$$.new_type_flag = 1;
|
||||||
}
|
}
|
||||||
|
@ -2550,13 +2541,13 @@ base_class_list:
|
||||||
;
|
;
|
||||||
|
|
||||||
base_class:
|
base_class:
|
||||||
base_class.1
|
base_class_1
|
||||||
{ $$ = finish_base_specifier (access_default_node, $1); }
|
{ $$ = finish_base_specifier (access_default_node, $1); }
|
||||||
| base_class_access_list see_typename base_class.1
|
| base_class_access_list see_typename base_class_1
|
||||||
{ $$ = finish_base_specifier ($1, $3); }
|
{ $$ = finish_base_specifier ($1, $3); }
|
||||||
;
|
;
|
||||||
|
|
||||||
base_class.1:
|
base_class_1:
|
||||||
typename_sub
|
typename_sub
|
||||||
{ if (!TYPE_P ($$))
|
{ if (!TYPE_P ($$))
|
||||||
$$ = error_mark_node; }
|
$$ = error_mark_node; }
|
||||||
|
@ -2632,13 +2623,13 @@ component_decl:
|
||||||
yyungetc ('}', 0); }
|
yyungetc ('}', 0); }
|
||||||
/* C++: handle constructors, destructors and inline functions */
|
/* C++: handle constructors, destructors and inline functions */
|
||||||
/* note that INLINE is like a TYPESPEC */
|
/* note that INLINE is like a TYPESPEC */
|
||||||
| fn.def2 ':' /* base_init compstmt */
|
| fn_def2 ':' /* base_init compstmt */
|
||||||
{ $$ = finish_method ($$); }
|
{ $$ = finish_method ($$); }
|
||||||
| fn.def2 TRY /* base_init compstmt */
|
| fn_def2 TRY /* base_init compstmt */
|
||||||
{ $$ = finish_method ($$); }
|
{ $$ = finish_method ($$); }
|
||||||
| fn.def2 RETURN_KEYWORD /* base_init compstmt */
|
| fn_def2 RETURN_KEYWORD /* base_init compstmt */
|
||||||
{ $$ = finish_method ($$); }
|
{ $$ = finish_method ($$); }
|
||||||
| fn.def2 '{' /* nodecls compstmt */
|
| fn_def2 '{' /* nodecls compstmt */
|
||||||
{ $$ = finish_method ($$); }
|
{ $$ = finish_method ($$); }
|
||||||
| ';'
|
| ';'
|
||||||
{ $$ = NULL_TREE; }
|
{ $$ = NULL_TREE; }
|
||||||
|
@ -4026,3 +4017,5 @@ free_parser_stacks ()
|
||||||
free (malloced_yyvs);
|
free (malloced_yyvs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-cp-parse.h"
|
||||||
|
|
20
gcc/cp/pt.c
20
gcc/cp/pt.c
|
@ -56,17 +56,17 @@ extern struct obstack permanent_obstack;
|
||||||
the instantiate request occurred; the TREE_VALUE is a either a DECL
|
the instantiate request occurred; the TREE_VALUE is a either a DECL
|
||||||
(for a function or static data member), or a TYPE (for a class)
|
(for a function or static data member), or a TYPE (for a class)
|
||||||
indicating what we are hoping to instantiate. */
|
indicating what we are hoping to instantiate. */
|
||||||
static tree pending_templates;
|
static GTY(()) tree pending_templates;
|
||||||
static tree last_pending_template;
|
static tree last_pending_template;
|
||||||
|
|
||||||
int processing_template_parmlist;
|
int processing_template_parmlist;
|
||||||
static int template_header_count;
|
static int template_header_count;
|
||||||
|
|
||||||
static tree saved_trees;
|
static GTY(()) tree saved_trees;
|
||||||
static varray_type inline_parm_levels;
|
static GTY(()) varray_type inline_parm_levels;
|
||||||
static size_t inline_parm_levels_used;
|
static size_t inline_parm_levels_used;
|
||||||
|
|
||||||
static tree current_tinst_level;
|
static GTY(()) tree current_tinst_level;
|
||||||
|
|
||||||
/* A map from local variable declarations in the body of the template
|
/* A map from local variable declarations in the body of the template
|
||||||
presently being instantiated to the corresponding instantiated
|
presently being instantiated to the corresponding instantiated
|
||||||
|
@ -170,16 +170,6 @@ static tree copy_default_args_to_explicit_spec_1 PARAMS ((tree, tree));
|
||||||
static void copy_default_args_to_explicit_spec PARAMS ((tree));
|
static void copy_default_args_to_explicit_spec PARAMS ((tree));
|
||||||
static int invalid_nontype_parm_type_p PARAMS ((tree, tsubst_flags_t));
|
static int invalid_nontype_parm_type_p PARAMS ((tree, tsubst_flags_t));
|
||||||
|
|
||||||
/* Called once to initialize pt.c. */
|
|
||||||
|
|
||||||
void
|
|
||||||
init_pt ()
|
|
||||||
{
|
|
||||||
ggc_add_tree_root (&pending_templates, 1);
|
|
||||||
ggc_add_tree_root (&saved_trees, 1);
|
|
||||||
ggc_add_tree_root (¤t_tinst_level, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do any processing required when DECL (a member template declaration
|
/* Do any processing required when DECL (a member template declaration
|
||||||
using TEMPLATE_PARAMETERS as its innermost parameter list) is
|
using TEMPLATE_PARAMETERS as its innermost parameter list) is
|
||||||
finished. Returns the TEMPLATE_DECL corresponding to DECL, unless
|
finished. Returns the TEMPLATE_DECL corresponding to DECL, unless
|
||||||
|
@ -10426,3 +10416,5 @@ invalid_nontype_parm_type_p (type, complain)
|
||||||
type);
|
type);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-cp-pt.h"
|
||||||
|
|
|
@ -42,8 +42,8 @@ static void open_repo_file PARAMS ((const char *));
|
||||||
static char *afgets PARAMS ((FILE *));
|
static char *afgets PARAMS ((FILE *));
|
||||||
static void reopen_repo_file_for_write PARAMS ((void));
|
static void reopen_repo_file_for_write PARAMS ((void));
|
||||||
|
|
||||||
static tree pending_repo;
|
static GTY(()) tree pending_repo;
|
||||||
static tree original_repo;
|
static GTY(()) tree original_repo;
|
||||||
static char *repo_name;
|
static char *repo_name;
|
||||||
static FILE *repo_file;
|
static FILE *repo_file;
|
||||||
|
|
||||||
|
@ -320,8 +320,6 @@ init_repo (filename)
|
||||||
if (! flag_use_repository)
|
if (! flag_use_repository)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ggc_add_tree_root (&pending_repo, 1);
|
|
||||||
ggc_add_tree_root (&original_repo, 1);
|
|
||||||
gcc_obstack_init (&temporary_obstack);
|
gcc_obstack_init (&temporary_obstack);
|
||||||
|
|
||||||
open_repo_file (filename);
|
open_repo_file (filename);
|
||||||
|
@ -458,3 +456,5 @@ finish_repo ()
|
||||||
if (repo_file)
|
if (repo_file)
|
||||||
fclose (repo_file);
|
fclose (repo_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-cp-repo.h"
|
||||||
|
|
|
@ -31,6 +31,7 @@ Boston, MA 02111-1307, USA. */
|
||||||
#include "flags.h"
|
#include "flags.h"
|
||||||
#include "rtl.h"
|
#include "rtl.h"
|
||||||
#include "output.h"
|
#include "output.h"
|
||||||
|
#include "ggc.h"
|
||||||
#include "toplev.h"
|
#include "toplev.h"
|
||||||
|
|
||||||
#define obstack_chunk_alloc xmalloc
|
#define obstack_chunk_alloc xmalloc
|
||||||
|
@ -1673,9 +1674,6 @@ bfs_walk (binfo, fn, qfn, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clean up. */
|
|
||||||
VARRAY_FREE (bfs_bases);
|
|
||||||
|
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ stmt_tree
|
||||||
current_stmt_tree ()
|
current_stmt_tree ()
|
||||||
{
|
{
|
||||||
return (cfun
|
return (cfun
|
||||||
? &cfun->language->x_stmt_tree
|
? &cfun->language->base.x_stmt_tree
|
||||||
: &scope_chain->x_stmt_tree);
|
: &scope_chain->x_stmt_tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ int
|
||||||
anon_aggr_type_p (node)
|
anon_aggr_type_p (node)
|
||||||
tree node;
|
tree node;
|
||||||
{
|
{
|
||||||
return (CLASS_TYPE_P (node) && TYPE_LANG_SPECIFIC(node)->anon_aggr);
|
return ANON_AGGR_TYPE_P (node);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Finish a scope. */
|
/* Finish a scope. */
|
||||||
|
@ -1131,7 +1131,7 @@ finish_mem_initializers (init_list)
|
||||||
tree *
|
tree *
|
||||||
current_scope_stmt_stack ()
|
current_scope_stmt_stack ()
|
||||||
{
|
{
|
||||||
return &cfun->language->x_scope_stmt_stack;
|
return &cfun->language->base.x_scope_stmt_stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Finish a parenthesized expression EXPR. */
|
/* Finish a parenthesized expression EXPR. */
|
||||||
|
@ -1882,16 +1882,6 @@ begin_inline_definitions ()
|
||||||
do_pending_inlines ();
|
do_pending_inlines ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Finish processing the inline function definitions cached during the
|
|
||||||
processing of a class definition. */
|
|
||||||
|
|
||||||
void
|
|
||||||
finish_inline_definitions ()
|
|
||||||
{
|
|
||||||
if (current_class_type == NULL_TREE)
|
|
||||||
clear_inline_text_obstack ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Finish processing the declaration of a member class template
|
/* Finish processing the declaration of a member class template
|
||||||
TYPES whose template parameters are given by PARMS. */
|
TYPES whose template parameters are given by PARMS. */
|
||||||
|
|
||||||
|
@ -2475,11 +2465,8 @@ genrtl_start_function (fn)
|
||||||
function; we need the named return value info for
|
function; we need the named return value info for
|
||||||
cp_copy_res_decl_for_inlining. */
|
cp_copy_res_decl_for_inlining. */
|
||||||
if (! DECL_INLINE (fn))
|
if (! DECL_INLINE (fn))
|
||||||
{
|
|
||||||
free (DECL_SAVED_FUNCTION_DATA (fn));
|
|
||||||
DECL_SAVED_FUNCTION_DATA (fn) = NULL;
|
DECL_SAVED_FUNCTION_DATA (fn) = NULL;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Keep track of how many functions we're presently expanding. */
|
/* Keep track of how many functions we're presently expanding. */
|
||||||
++function_depth;
|
++function_depth;
|
||||||
|
|
299
gcc/cp/spew.c
299
gcc/cp/spew.c
|
@ -50,12 +50,12 @@ Boston, MA 02111-1307, USA. */
|
||||||
backtracking. */
|
backtracking. */
|
||||||
|
|
||||||
/* fifo of tokens recognized and available to parser. */
|
/* fifo of tokens recognized and available to parser. */
|
||||||
struct token
|
struct token GTY(())
|
||||||
{
|
{
|
||||||
/* The values for YYCHAR will fit in a short. */
|
/* The values for YYCHAR will fit in a short. */
|
||||||
short yychar;
|
short yychar;
|
||||||
unsigned int lineno;
|
unsigned int lineno;
|
||||||
YYSTYPE yylval;
|
YYSTYPE GTY ((desc ("%1.yychar"))) yylval;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Since inline methods can refer to text which has not yet been seen,
|
/* Since inline methods can refer to text which has not yet been seen,
|
||||||
|
@ -68,7 +68,14 @@ struct token
|
||||||
This function's FUNCTION_DECL will have a bit set in its common so
|
This function's FUNCTION_DECL will have a bit set in its common so
|
||||||
that we know to watch out for it. */
|
that we know to watch out for it. */
|
||||||
|
|
||||||
struct unparsed_text
|
#define TOKEN_CHUNK_SIZE 20
|
||||||
|
struct token_chunk GTY(())
|
||||||
|
{
|
||||||
|
struct token_chunk *next;
|
||||||
|
struct token toks[TOKEN_CHUNK_SIZE];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct unparsed_text GTY(())
|
||||||
{
|
{
|
||||||
struct unparsed_text *next; /* process this one next */
|
struct unparsed_text *next; /* process this one next */
|
||||||
tree decl; /* associated declaration */
|
tree decl; /* associated declaration */
|
||||||
|
@ -76,26 +83,31 @@ struct unparsed_text
|
||||||
int lineno; /* line number we got the text from */
|
int lineno; /* line number we got the text from */
|
||||||
int interface; /* remembering interface_unknown and interface_only */
|
int interface; /* remembering interface_unknown and interface_only */
|
||||||
|
|
||||||
struct token *pos; /* current position, when rescanning */
|
struct token_chunk * tokens; /* Start of the token list. */
|
||||||
struct token *limit; /* end of saved text */
|
|
||||||
|
struct token_chunk *last_chunk; /* End of the token list. */
|
||||||
|
short last_pos; /* Number of tokens used in the last chunk of
|
||||||
|
TOKENS. */
|
||||||
|
|
||||||
|
short cur_pos; /* Current token in 'cur_chunk', when rescanning. */
|
||||||
|
struct token_chunk *cur_chunk; /* Current chunk, when rescanning. */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Stack of state saved off when we return to an inline method or
|
/* Stack of state saved off when we return to an inline method or
|
||||||
default argument that has been stored for later parsing. */
|
default argument that has been stored for later parsing. */
|
||||||
struct feed
|
struct feed GTY(())
|
||||||
{
|
{
|
||||||
struct unparsed_text *input;
|
struct unparsed_text *input;
|
||||||
const char *filename;
|
const char *filename;
|
||||||
int lineno;
|
int lineno;
|
||||||
int yychar;
|
int yychar;
|
||||||
YYSTYPE yylval;
|
YYSTYPE GTY ((desc ("%1.yychar"))) yylval;
|
||||||
int first_token;
|
int first_token;
|
||||||
struct obstack token_obstack;
|
struct obstack GTY ((skip (""))) token_obstack;
|
||||||
struct feed *next;
|
struct feed *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct obstack feed_obstack;
|
static GTY(()) struct feed *feed;
|
||||||
static struct feed *feed;
|
|
||||||
|
|
||||||
static SPEW_INLINE void do_aggr PARAMS ((void));
|
static SPEW_INLINE void do_aggr PARAMS ((void));
|
||||||
static SPEW_INLINE int identifier_type PARAMS ((tree));
|
static SPEW_INLINE int identifier_type PARAMS ((tree));
|
||||||
|
@ -107,25 +119,32 @@ static int read_token PARAMS ((struct token *));
|
||||||
|
|
||||||
static SPEW_INLINE int num_tokens PARAMS ((void));
|
static SPEW_INLINE int num_tokens PARAMS ((void));
|
||||||
static SPEW_INLINE struct token *nth_token PARAMS ((int));
|
static SPEW_INLINE struct token *nth_token PARAMS ((int));
|
||||||
static SPEW_INLINE int add_token PARAMS ((struct token *));
|
static SPEW_INLINE int next_token PARAMS ((struct token *));
|
||||||
static SPEW_INLINE int shift_token PARAMS ((void));
|
static SPEW_INLINE int shift_token PARAMS ((void));
|
||||||
static SPEW_INLINE void push_token PARAMS ((struct token *));
|
static SPEW_INLINE void push_token PARAMS ((struct token *));
|
||||||
static SPEW_INLINE void consume_token PARAMS ((void));
|
static SPEW_INLINE void consume_token PARAMS ((void));
|
||||||
static SPEW_INLINE int read_process_identifier PARAMS ((YYSTYPE *));
|
static SPEW_INLINE int read_process_identifier PARAMS ((YYSTYPE *));
|
||||||
|
|
||||||
static SPEW_INLINE void feed_input PARAMS ((struct unparsed_text *));
|
static SPEW_INLINE void feed_input PARAMS ((struct unparsed_text *));
|
||||||
static SPEW_INLINE void snarf_block PARAMS ((const char *, int));
|
static SPEW_INLINE struct token * space_for_token
|
||||||
|
PARAMS ((struct unparsed_text *t));
|
||||||
|
static SPEW_INLINE struct token * remove_last_token
|
||||||
|
PARAMS ((struct unparsed_text *t));
|
||||||
|
static struct unparsed_text * alloc_unparsed_text
|
||||||
|
PARAMS ((const char *fn, int li, tree decl, int interface));
|
||||||
|
|
||||||
|
static void snarf_block PARAMS ((struct unparsed_text *t));
|
||||||
static tree snarf_defarg PARAMS ((void));
|
static tree snarf_defarg PARAMS ((void));
|
||||||
static int frob_id PARAMS ((int, int, tree *));
|
static int frob_id PARAMS ((int, int, tree *));
|
||||||
|
|
||||||
/* The list of inline functions being held off until we reach the end of
|
/* The list of inline functions being held off until we reach the end of
|
||||||
the current class declaration. */
|
the current class declaration. */
|
||||||
static struct unparsed_text *pending_inlines;
|
static GTY(()) struct unparsed_text *pending_inlines;
|
||||||
static struct unparsed_text *pending_inlines_tail;
|
static GTY(()) struct unparsed_text *pending_inlines_tail;
|
||||||
|
|
||||||
/* The list of previously-deferred inline functions currently being parsed.
|
/* The list of previously-deferred inline functions currently being parsed.
|
||||||
This exists solely to be a GC root. */
|
This exists solely to be a GC root. */
|
||||||
static struct unparsed_text *processing_these_inlines;
|
static GTY(()) struct unparsed_text *processing_these_inlines;
|
||||||
|
|
||||||
static void begin_parsing_inclass_inline PARAMS ((struct unparsed_text *));
|
static void begin_parsing_inclass_inline PARAMS ((struct unparsed_text *));
|
||||||
|
|
||||||
|
@ -151,13 +170,8 @@ extern int yychar; /* the lookahead symbol */
|
||||||
extern YYSTYPE yylval; /* the semantic value of the */
|
extern YYSTYPE yylval; /* the semantic value of the */
|
||||||
/* lookahead symbol */
|
/* lookahead symbol */
|
||||||
/* The token fifo lives in this obstack. */
|
/* The token fifo lives in this obstack. */
|
||||||
struct obstack token_obstack;
|
static struct obstack token_obstack;
|
||||||
int first_token;
|
static int first_token;
|
||||||
|
|
||||||
/* Sometimes we need to save tokens for later parsing. If so, they are
|
|
||||||
stored on this obstack. */
|
|
||||||
struct obstack inline_text_obstack;
|
|
||||||
char *inline_text_firstobj;
|
|
||||||
|
|
||||||
/* When we see a default argument in a method declaration, we snarf it as
|
/* When we see a default argument in a method declaration, we snarf it as
|
||||||
text using snarf_defarg. When we get up to namespace scope, we then go
|
text using snarf_defarg. When we get up to namespace scope, we then go
|
||||||
|
@ -168,35 +182,21 @@ char *inline_text_firstobj;
|
||||||
the TREE_TYPE is the current_class_type, TREE_VALUE is the FUNCTION_DECL,
|
the TREE_TYPE is the current_class_type, TREE_VALUE is the FUNCTION_DECL,
|
||||||
and TREE_PURPOSE is the list unprocessed dependent functions. */
|
and TREE_PURPOSE is the list unprocessed dependent functions. */
|
||||||
|
|
||||||
static tree defarg_fns; /* list of functions with unprocessed defargs */
|
/* list of functions with unprocessed defargs */
|
||||||
static tree defarg_parm; /* current default parameter */
|
static GTY(()) tree defarg_fns;
|
||||||
static tree defarg_depfns; /* list of unprocessed fns met during current fn. */
|
/* current default parameter */
|
||||||
static tree defarg_fnsdone; /* list of fns with circular defargs */
|
static GTY(()) tree defarg_parm;
|
||||||
|
/* list of unprocessed fns met during current fn. */
|
||||||
|
static GTY(()) tree defarg_depfns;
|
||||||
|
/* list of fns with circular defargs */
|
||||||
|
static GTY(()) tree defarg_fnsdone;
|
||||||
|
|
||||||
/* Initialize obstacks. Called once, from cxx_init. */
|
/* Initialize obstacks. Called once, from cxx_init. */
|
||||||
|
|
||||||
void
|
void
|
||||||
init_spew ()
|
init_spew ()
|
||||||
{
|
{
|
||||||
gcc_obstack_init (&inline_text_obstack);
|
|
||||||
inline_text_firstobj = (char *) obstack_alloc (&inline_text_obstack, 0);
|
|
||||||
gcc_obstack_init (&token_obstack);
|
gcc_obstack_init (&token_obstack);
|
||||||
gcc_obstack_init (&feed_obstack);
|
|
||||||
ggc_add_tree_root (&defarg_fns, 1);
|
|
||||||
ggc_add_tree_root (&defarg_parm, 1);
|
|
||||||
ggc_add_tree_root (&defarg_depfns, 1);
|
|
||||||
ggc_add_tree_root (&defarg_fnsdone, 1);
|
|
||||||
|
|
||||||
ggc_add_root (&pending_inlines, 1, sizeof (struct unparsed_text *),
|
|
||||||
mark_pending_inlines);
|
|
||||||
ggc_add_root (&processing_these_inlines, 1, sizeof (struct unparsed_text *),
|
|
||||||
mark_pending_inlines);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
clear_inline_text_obstack ()
|
|
||||||
{
|
|
||||||
obstack_free (&inline_text_obstack, inline_text_firstobj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Subroutine of read_token. */
|
/* Subroutine of read_token. */
|
||||||
|
@ -270,8 +270,6 @@ yylexstring (t)
|
||||||
|
|
||||||
t->yylval.ttype = combine_strings (strings);
|
t->yylval.ttype = combine_strings (strings);
|
||||||
last_token_id = t->yylval.ttype;
|
last_token_id = t->yylval.ttype;
|
||||||
|
|
||||||
VARRAY_FREE (strings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We will have always read one token too many. */
|
/* We will have always read one token too many. */
|
||||||
|
@ -396,10 +394,10 @@ feed_input (input)
|
||||||
abort ();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
f = obstack_alloc (&feed_obstack, sizeof (struct feed));
|
f = ggc_alloc (sizeof (struct feed));
|
||||||
|
|
||||||
/* The token list starts just after the struct unparsed_text in memory. */
|
input->cur_chunk = input->tokens;
|
||||||
input->pos = (struct token *) (input + 1);
|
input->cur_pos = 0;
|
||||||
|
|
||||||
#ifdef SPEW_DEBUG
|
#ifdef SPEW_DEBUG
|
||||||
if (spew_debug)
|
if (spew_debug)
|
||||||
|
@ -439,48 +437,12 @@ end_input ()
|
||||||
token_obstack = f->token_obstack;
|
token_obstack = f->token_obstack;
|
||||||
feed = f->next;
|
feed = f->next;
|
||||||
|
|
||||||
obstack_free (&feed_obstack, f);
|
|
||||||
|
|
||||||
#ifdef SPEW_DEBUG
|
#ifdef SPEW_DEBUG
|
||||||
if (spew_debug)
|
if (spew_debug)
|
||||||
fprintf (stderr, "\treturning to %s:%d\n", input_filename, lineno);
|
fprintf (stderr, "\treturning to %s:%d\n", input_filename, lineno);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* GC callback to mark memory pointed to by the pending inline queue. */
|
|
||||||
void
|
|
||||||
mark_pending_inlines (pi)
|
|
||||||
PTR pi;
|
|
||||||
{
|
|
||||||
struct unparsed_text *up = * (struct unparsed_text **)pi;
|
|
||||||
|
|
||||||
while (up)
|
|
||||||
{
|
|
||||||
struct token *t = (struct token *) (up + 1);
|
|
||||||
struct token *l = up->limit;
|
|
||||||
|
|
||||||
while (t < l)
|
|
||||||
{
|
|
||||||
/* Some of the possible values for yychar use yylval.code
|
|
||||||
instead of yylval.ttype. We only have to worry about
|
|
||||||
yychars that could have been returned by read_token. */
|
|
||||||
switch (t->yychar)
|
|
||||||
{
|
|
||||||
case '+': case '-': case '*': case '/':
|
|
||||||
case '%': case '&': case '|': case '^':
|
|
||||||
case '>': case '<': case LSHIFT: case RSHIFT:
|
|
||||||
case ASSIGN: case MIN_MAX: case EQCOMPARE: case ARITHCOMPARE:
|
|
||||||
t++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (t->yylval.ttype)
|
|
||||||
ggc_mark_tree (t->yylval.ttype);
|
|
||||||
t++;
|
|
||||||
}
|
|
||||||
up = up->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Token queue management. */
|
/* Token queue management. */
|
||||||
|
|
||||||
/* Return the number of tokens available on the fifo. */
|
/* Return the number of tokens available on the fifo. */
|
||||||
|
@ -510,16 +472,24 @@ static const struct token Tpad = { EMPTY, 0 UNION_INIT_ZERO };
|
||||||
|
|
||||||
/* Copy the next token into T and return its value. */
|
/* Copy the next token into T and return its value. */
|
||||||
static SPEW_INLINE int
|
static SPEW_INLINE int
|
||||||
add_token (t)
|
next_token (t)
|
||||||
struct token *t;
|
struct token *t;
|
||||||
{
|
{
|
||||||
if (!feed)
|
if (!feed)
|
||||||
return read_token (t);
|
return read_token (t);
|
||||||
|
|
||||||
if (feed->input->pos < feed->input->limit)
|
if (feed->input->cur_chunk != feed->input->last_chunk
|
||||||
|
|| feed->input->cur_pos != feed->input->last_pos)
|
||||||
{
|
{
|
||||||
memcpy (t, feed->input->pos, sizeof (struct token));
|
if (feed->input->cur_pos == TOKEN_CHUNK_SIZE)
|
||||||
return (feed->input->pos++)->yychar;
|
{
|
||||||
|
feed->input->cur_chunk = feed->input->cur_chunk->next;
|
||||||
|
feed->input->cur_pos = 0;
|
||||||
|
}
|
||||||
|
memcpy (t, feed->input->cur_chunk->toks + feed->input->cur_pos,
|
||||||
|
sizeof (struct token));
|
||||||
|
feed->input->cur_pos++;
|
||||||
|
return t->yychar;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy (t, &Teosi, sizeof (struct token));
|
memcpy (t, &Teosi, sizeof (struct token));
|
||||||
|
@ -532,7 +502,7 @@ shift_token ()
|
||||||
{
|
{
|
||||||
size_t point = obstack_object_size (&token_obstack);
|
size_t point = obstack_object_size (&token_obstack);
|
||||||
obstack_blank (&token_obstack, sizeof (struct token));
|
obstack_blank (&token_obstack, sizeof (struct token));
|
||||||
return add_token ((struct token *) (obstack_base (&token_obstack) + point));
|
return next_token ((struct token *) (obstack_base (&token_obstack) + point));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Consume the next token out of the fifo. */
|
/* Consume the next token out of the fifo. */
|
||||||
|
@ -1060,22 +1030,73 @@ process_next_inline (i)
|
||||||
extract_interface_info ();
|
extract_interface_info ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Create a new token at the end of the token list in T. */
|
||||||
|
static SPEW_INLINE struct token *
|
||||||
|
space_for_token (t)
|
||||||
|
struct unparsed_text *t;
|
||||||
|
{
|
||||||
|
if (t->last_pos != TOKEN_CHUNK_SIZE)
|
||||||
|
return t->last_chunk->toks + (t->last_pos++);
|
||||||
|
|
||||||
|
t->last_chunk->next = ggc_alloc (sizeof (*t->last_chunk->next));
|
||||||
|
t->last_chunk = t->last_chunk->next;
|
||||||
|
t->last_chunk->next = NULL;
|
||||||
|
|
||||||
|
t->last_pos = 1;
|
||||||
|
return t->last_chunk->toks;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Shrink the token list in T by one token. */
|
||||||
|
static SPEW_INLINE struct token *
|
||||||
|
remove_last_token (t)
|
||||||
|
struct unparsed_text *t;
|
||||||
|
{
|
||||||
|
struct token *result = t->last_chunk->toks + t->last_pos - 1;
|
||||||
|
if (t->last_pos == 0)
|
||||||
|
abort ();
|
||||||
|
t->last_pos--;
|
||||||
|
if (t->last_pos == 0 && t->last_chunk != t->tokens)
|
||||||
|
{
|
||||||
|
struct token_chunk **tc;
|
||||||
|
for (tc = &t->tokens; (*tc)->next != NULL; tc = &(*tc)->next)
|
||||||
|
;
|
||||||
|
*tc = NULL;
|
||||||
|
t->last_pos = sizeof ((*tc)->toks) / sizeof ((*tc)->toks[0]);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate an 'unparsed_text' structure, ready to use space_for_token. */
|
||||||
|
static struct unparsed_text *
|
||||||
|
alloc_unparsed_text (fn, li, decl, interface)
|
||||||
|
const char *fn;
|
||||||
|
int li;
|
||||||
|
tree decl;
|
||||||
|
int interface;
|
||||||
|
{
|
||||||
|
struct unparsed_text *r;
|
||||||
|
r = ggc_alloc_cleared (sizeof (*r));
|
||||||
|
r->decl = decl;
|
||||||
|
r->filename = fn;
|
||||||
|
r->lineno = li;
|
||||||
|
r->interface = interface;
|
||||||
|
r->tokens = r->last_chunk = ggc_alloc_cleared (sizeof (*r->tokens));
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
/* Subroutine of snarf_method, deals with actual absorption of the block. */
|
/* Subroutine of snarf_method, deals with actual absorption of the block. */
|
||||||
|
|
||||||
static SPEW_INLINE void
|
static void
|
||||||
snarf_block (starting_file, starting_line)
|
snarf_block (t)
|
||||||
const char *starting_file;
|
struct unparsed_text *t;
|
||||||
int starting_line;
|
|
||||||
{
|
{
|
||||||
int blev = 1;
|
int blev = 1;
|
||||||
int look_for_semicolon = 0;
|
int look_for_semicolon = 0;
|
||||||
int look_for_lbrac = 0;
|
int look_for_lbrac = 0;
|
||||||
int look_for_catch = 0;
|
int look_for_catch = 0;
|
||||||
int yyc;
|
int yyc;
|
||||||
struct token tmp;
|
struct token *current;
|
||||||
size_t point;
|
|
||||||
|
|
||||||
if (yychar == '{')
|
if (yychar == '{')
|
||||||
;
|
;
|
||||||
|
@ -1092,17 +1113,14 @@ snarf_block (starting_file, starting_line)
|
||||||
yyerror ("parse error in method specification");
|
yyerror ("parse error in method specification");
|
||||||
|
|
||||||
/* The current token is the first one to be recorded. */
|
/* The current token is the first one to be recorded. */
|
||||||
tmp.yychar = yychar;
|
current = space_for_token (t);
|
||||||
tmp.yylval = yylval;
|
current->yychar = yychar;
|
||||||
tmp.lineno = lineno;
|
current->yylval = yylval;
|
||||||
obstack_grow (&inline_text_obstack, &tmp, sizeof (struct token));
|
current->lineno = lineno;
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
point = obstack_object_size (&inline_text_obstack);
|
yyc = next_token (space_for_token (t));
|
||||||
obstack_blank (&inline_text_obstack, sizeof (struct token));
|
|
||||||
yyc = add_token ((struct token *)
|
|
||||||
(obstack_base (&inline_text_obstack) + point));
|
|
||||||
|
|
||||||
if (yyc == '{')
|
if (yyc == '{')
|
||||||
{
|
{
|
||||||
|
@ -1117,27 +1135,29 @@ snarf_block (starting_file, starting_line)
|
||||||
if (!look_for_catch)
|
if (!look_for_catch)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (add_token (&tmp) != CATCH)
|
if (next_token (space_for_token (t)) != CATCH)
|
||||||
{
|
{
|
||||||
push_token (&tmp);
|
push_token (remove_last_token (t));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
look_for_lbrac = 1;
|
look_for_lbrac = 1;
|
||||||
obstack_grow (&inline_text_obstack, &tmp, sizeof (struct token));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (yyc == ';')
|
else if (yyc == ';')
|
||||||
{
|
{
|
||||||
if (look_for_lbrac)
|
if (look_for_lbrac)
|
||||||
{
|
{
|
||||||
|
struct token *fake;
|
||||||
|
|
||||||
error ("function body for constructor missing");
|
error ("function body for constructor missing");
|
||||||
/* fake a { } to avoid further errors */
|
/* fake a { } to avoid further errors */
|
||||||
tmp.yylval.ttype = 0;
|
fake = space_for_token (t);
|
||||||
tmp.yychar = '{';
|
fake->yylval.ttype = 0;
|
||||||
obstack_grow (&inline_text_obstack, &tmp, sizeof (struct token));
|
fake->yychar = '{';
|
||||||
tmp.yychar = '}';
|
fake = space_for_token (t);
|
||||||
obstack_grow (&inline_text_obstack, &tmp, sizeof (struct token));
|
fake->yylval.ttype = 0;
|
||||||
|
fake->yychar = '}';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (look_for_semicolon && blev == 0)
|
else if (look_for_semicolon && blev == 0)
|
||||||
|
@ -1145,7 +1165,7 @@ snarf_block (starting_file, starting_line)
|
||||||
}
|
}
|
||||||
else if (yyc == 0)
|
else if (yyc == 0)
|
||||||
{
|
{
|
||||||
error_with_file_and_line (starting_file, starting_line,
|
error_with_file_and_line (t->filename, t->lineno,
|
||||||
"end of file read inside definition");
|
"end of file read inside definition");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1160,37 +1180,24 @@ snarf_method (decl)
|
||||||
{
|
{
|
||||||
int starting_lineno = lineno;
|
int starting_lineno = lineno;
|
||||||
const char *starting_filename = input_filename;
|
const char *starting_filename = input_filename;
|
||||||
size_t len;
|
|
||||||
|
|
||||||
struct unparsed_text *meth;
|
struct unparsed_text *meth;
|
||||||
|
|
||||||
/* Leave room for the header, then absorb the block. */
|
meth = alloc_unparsed_text (starting_filename, starting_lineno, decl,
|
||||||
obstack_blank (&inline_text_obstack, sizeof (struct unparsed_text));
|
(interface_unknown ? 1
|
||||||
snarf_block (starting_filename, starting_lineno);
|
: (interface_only ? 0 : 2)));
|
||||||
|
|
||||||
len = obstack_object_size (&inline_text_obstack);
|
snarf_block (meth);
|
||||||
meth = (struct unparsed_text *) obstack_finish (&inline_text_obstack);
|
|
||||||
|
|
||||||
/* Happens when we get two declarations of the same function in the
|
/* Happens when we get two declarations of the same function in the
|
||||||
same scope. */
|
same scope. */
|
||||||
if (decl == void_type_node
|
if (decl == void_type_node
|
||||||
|| (current_class_type && TYPE_REDEFINED (current_class_type)))
|
|| (current_class_type && TYPE_REDEFINED (current_class_type)))
|
||||||
{
|
|
||||||
obstack_free (&inline_text_obstack, (char *)meth);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
meth->decl = decl;
|
|
||||||
meth->filename = starting_filename;
|
|
||||||
meth->lineno = starting_lineno;
|
|
||||||
meth->limit = (struct token *) ((char *)meth + len);
|
|
||||||
meth->interface = (interface_unknown ? 1 : (interface_only ? 0 : 2));
|
|
||||||
meth->next = 0;
|
|
||||||
|
|
||||||
#ifdef SPEW_DEBUG
|
#ifdef SPEW_DEBUG
|
||||||
if (spew_debug)
|
if (spew_debug)
|
||||||
fprintf (stderr, "\tsaved method of %d tokens from %s:%d\n",
|
fprintf (stderr, "\tsaved method of %d tokens from %s:%d\n",
|
||||||
meth->limit - (struct token *) (meth + 1),
|
meth->limit,
|
||||||
starting_filename, starting_lineno);
|
starting_filename, starting_lineno);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1204,8 +1211,8 @@ snarf_method (decl)
|
||||||
pending_inlines_tail = meth;
|
pending_inlines_tail = meth;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Consume a no-commas expression - a default argument - and save it
|
/* Consume a no-commas expression - a default argument - and return
|
||||||
on the inline_text_obstack. */
|
a DEFAULT_ARG tree node. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
snarf_defarg ()
|
snarf_defarg ()
|
||||||
|
@ -1214,19 +1221,14 @@ snarf_defarg ()
|
||||||
const char *starting_filename = input_filename;
|
const char *starting_filename = input_filename;
|
||||||
int yyc;
|
int yyc;
|
||||||
int plev = 0;
|
int plev = 0;
|
||||||
size_t point;
|
|
||||||
size_t len;
|
|
||||||
struct unparsed_text *buf;
|
struct unparsed_text *buf;
|
||||||
tree arg;
|
tree arg;
|
||||||
|
|
||||||
obstack_blank (&inline_text_obstack, sizeof (struct unparsed_text));
|
buf = alloc_unparsed_text (starting_filename, starting_lineno, 0, 0);
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
point = obstack_object_size (&inline_text_obstack);
|
yyc = next_token (space_for_token (buf));
|
||||||
obstack_blank (&inline_text_obstack, sizeof (struct token));
|
|
||||||
yyc = add_token ((struct token *)
|
|
||||||
(obstack_base (&inline_text_obstack) + point));
|
|
||||||
|
|
||||||
if (plev <= 0 && (yyc == ')' || yyc == ','))
|
if (plev <= 0 && (yyc == ')' || yyc == ','))
|
||||||
break;
|
break;
|
||||||
|
@ -1243,24 +1245,13 @@ snarf_defarg ()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unget the last token. */
|
/* Unget the last token. */
|
||||||
push_token ((struct token *) (obstack_base (&inline_text_obstack) + point));
|
push_token (remove_last_token (buf));
|
||||||
/* This is the documented way to shrink a growing obstack block. */
|
|
||||||
obstack_blank (&inline_text_obstack, - (int) sizeof (struct token));
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
len = obstack_object_size (&inline_text_obstack);
|
|
||||||
buf = (struct unparsed_text *) obstack_finish (&inline_text_obstack);
|
|
||||||
|
|
||||||
buf->decl = 0;
|
|
||||||
buf->filename = starting_filename;
|
|
||||||
buf->lineno = starting_lineno;
|
|
||||||
buf->limit = (struct token *) ((char *)buf + len);
|
|
||||||
buf->next = 0;
|
|
||||||
|
|
||||||
#ifdef SPEW_DEBUG
|
#ifdef SPEW_DEBUG
|
||||||
if (spew_debug)
|
if (spew_debug)
|
||||||
fprintf (stderr, "\tsaved defarg of %d tokens from %s:%d\n",
|
fprintf (stderr, "\tsaved defarg of %d tokens from %s:%d\n",
|
||||||
buf->limit - (struct token *) (buf + 1),
|
buf->limit,
|
||||||
starting_filename, starting_lineno);
|
starting_filename, starting_lineno);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1531,3 +1522,5 @@ yyerror (msgid)
|
||||||
else
|
else
|
||||||
error ("%s before `%s' token", string, NAME (last_token));
|
error ("%s before `%s' token", string, NAME (last_token));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-cp-spew.h"
|
||||||
|
|
|
@ -710,7 +710,7 @@ unshare_base_binfos (binfo)
|
||||||
While all these live in the same table, they are completely independent,
|
While all these live in the same table, they are completely independent,
|
||||||
and the hash code is computed differently for each of these. */
|
and the hash code is computed differently for each of these. */
|
||||||
|
|
||||||
static htab_t list_hash_table;
|
static GTY ((param_is (union tree_node))) htab_t list_hash_table;
|
||||||
|
|
||||||
struct list_proxy
|
struct list_proxy
|
||||||
{
|
{
|
||||||
|
@ -1720,25 +1720,15 @@ cp_tree_equal (t1, t2)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Build a wrapper around some pointer PTR so we can use it as a tree. */
|
/* Build a wrapper around a 'struct z_candidate' so we can use it as a
|
||||||
|
tree. */
|
||||||
|
|
||||||
tree
|
tree
|
||||||
build_ptr_wrapper (ptr)
|
build_zc_wrapper (ptr)
|
||||||
void *ptr;
|
struct z_candidate *ptr;
|
||||||
{
|
{
|
||||||
tree t = make_node (WRAPPER);
|
tree t = make_node (WRAPPER);
|
||||||
WRAPPER_PTR (t) = ptr;
|
WRAPPER_ZC (t) = ptr;
|
||||||
return t;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Build a wrapper around some integer I so we can use it as a tree. */
|
|
||||||
|
|
||||||
tree
|
|
||||||
build_int_wrapper (i)
|
|
||||||
int i;
|
|
||||||
{
|
|
||||||
tree t = make_node (WRAPPER);
|
|
||||||
WRAPPER_INT (t) = i;
|
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2326,10 +2316,7 @@ void
|
||||||
init_tree ()
|
init_tree ()
|
||||||
{
|
{
|
||||||
lang_statement_code_p = cp_statement_code_p;
|
lang_statement_code_p = cp_statement_code_p;
|
||||||
list_hash_table = htab_create (31, list_hash, list_hash_eq, NULL);
|
list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
|
||||||
ggc_add_root (&list_hash_table, 1,
|
|
||||||
sizeof (list_hash_table),
|
|
||||||
mark_tree_hashtable);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called via walk_tree. If *TP points to a DECL_STMT for a local
|
/* Called via walk_tree. If *TP points to a DECL_STMT for a local
|
||||||
|
@ -2557,3 +2544,20 @@ stabilize_expr (exp, initp)
|
||||||
*initp = init_expr;
|
*initp = init_expr;
|
||||||
return exp;
|
return exp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
|
||||||
|
/* Complain that some language-specific thing hanging off a tree
|
||||||
|
node has been accessed improperly. */
|
||||||
|
|
||||||
|
void
|
||||||
|
lang_check_failed (file, line, function)
|
||||||
|
const char *file;
|
||||||
|
int line;
|
||||||
|
const char *function;
|
||||||
|
{
|
||||||
|
internal_error ("lang_* check: failed in %s, at %s:%d",
|
||||||
|
function, trim_filename (file), line);
|
||||||
|
}
|
||||||
|
#endif /* ENABLE_TREE_CHECKING */
|
||||||
|
|
||||||
|
#include "gt-cp-tree.h"
|
||||||
|
|
69
gcc/cselib.c
69
gcc/cselib.c
|
@ -35,7 +35,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
#include "toplev.h"
|
#include "toplev.h"
|
||||||
#include "output.h"
|
#include "output.h"
|
||||||
#include "ggc.h"
|
#include "ggc.h"
|
||||||
#include "obstack.h"
|
|
||||||
#include "hashtab.h"
|
#include "hashtab.h"
|
||||||
#include "cselib.h"
|
#include "cselib.h"
|
||||||
|
|
||||||
|
@ -79,7 +78,7 @@ static void cselib_record_sets PARAMS ((rtx));
|
||||||
the locations of the entries with the rtx we are looking up. */
|
the locations of the entries with the rtx we are looking up. */
|
||||||
|
|
||||||
/* A table that enables us to look up elts by their value. */
|
/* A table that enables us to look up elts by their value. */
|
||||||
static htab_t hash_table;
|
static GTY((param_is (cselib_val))) htab_t hash_table;
|
||||||
|
|
||||||
/* This is a global so we don't have to pass this through every function.
|
/* This is a global so we don't have to pass this through every function.
|
||||||
It is used in new_elt_loc_list to set SETTING_INSN. */
|
It is used in new_elt_loc_list to set SETTING_INSN. */
|
||||||
|
@ -101,7 +100,8 @@ static int n_useless_values;
|
||||||
/* This table maps from register number to values. It does not contain
|
/* This table maps from register number to values. It does not contain
|
||||||
pointers to cselib_val structures, but rather elt_lists. The purpose is
|
pointers to cselib_val structures, but rather elt_lists. The purpose is
|
||||||
to be able to refer to the same register in different modes. */
|
to be able to refer to the same register in different modes. */
|
||||||
static varray_type reg_values;
|
static GTY(()) varray_type reg_values;
|
||||||
|
static GTY((deletable (""))) varray_type reg_values_old;
|
||||||
#define REG_VALUES(I) VARRAY_ELT_LIST (reg_values, (I))
|
#define REG_VALUES(I) VARRAY_ELT_LIST (reg_values, (I))
|
||||||
|
|
||||||
/* The largest number of hard regs used by any entry added to the
|
/* The largest number of hard regs used by any entry added to the
|
||||||
|
@ -110,22 +110,17 @@ static unsigned int max_value_regs;
|
||||||
|
|
||||||
/* Here the set of indices I with REG_VALUES(I) != 0 is saved. This is used
|
/* Here the set of indices I with REG_VALUES(I) != 0 is saved. This is used
|
||||||
in clear_table() for fast emptying. */
|
in clear_table() for fast emptying. */
|
||||||
static varray_type used_regs;
|
static GTY(()) varray_type used_regs;
|
||||||
|
static GTY((deletable (""))) varray_type used_regs_old;
|
||||||
|
|
||||||
/* We pass this to cselib_invalidate_mem to invalidate all of
|
/* We pass this to cselib_invalidate_mem to invalidate all of
|
||||||
memory for a non-const call instruction. */
|
memory for a non-const call instruction. */
|
||||||
static rtx callmem;
|
static GTY(()) rtx callmem;
|
||||||
|
|
||||||
/* Memory for our structures is allocated from this obstack. */
|
|
||||||
static struct obstack cselib_obstack;
|
|
||||||
|
|
||||||
/* Used to quickly free all memory. */
|
|
||||||
static char *cselib_startobj;
|
|
||||||
|
|
||||||
/* Caches for unused structures. */
|
/* Caches for unused structures. */
|
||||||
static cselib_val *empty_vals;
|
static GTY((deletable (""))) cselib_val *empty_vals;
|
||||||
static struct elt_list *empty_elt_lists;
|
static GTY((deletable (""))) struct elt_list *empty_elt_lists;
|
||||||
static struct elt_loc_list *empty_elt_loc_lists;
|
static GTY((deletable (""))) struct elt_loc_list *empty_elt_loc_lists;
|
||||||
|
|
||||||
/* Set by discard_useless_locs if it deleted the last location of any
|
/* Set by discard_useless_locs if it deleted the last location of any
|
||||||
value. */
|
value. */
|
||||||
|
@ -145,8 +140,7 @@ new_elt_list (next, elt)
|
||||||
if (el)
|
if (el)
|
||||||
empty_elt_lists = el->next;
|
empty_elt_lists = el->next;
|
||||||
else
|
else
|
||||||
el = (struct elt_list *) obstack_alloc (&cselib_obstack,
|
el = (struct elt_list *) ggc_alloc (sizeof (struct elt_list));
|
||||||
sizeof (struct elt_list));
|
|
||||||
el->next = next;
|
el->next = next;
|
||||||
el->elt = elt;
|
el->elt = elt;
|
||||||
return el;
|
return el;
|
||||||
|
@ -165,8 +159,7 @@ new_elt_loc_list (next, loc)
|
||||||
if (el)
|
if (el)
|
||||||
empty_elt_loc_lists = el->next;
|
empty_elt_loc_lists = el->next;
|
||||||
else
|
else
|
||||||
el = (struct elt_loc_list *) obstack_alloc (&cselib_obstack,
|
el = (struct elt_loc_list *) ggc_alloc (sizeof (struct elt_loc_list));
|
||||||
sizeof (struct elt_loc_list));
|
|
||||||
el->next = next;
|
el->next = next;
|
||||||
el->loc = loc;
|
el->loc = loc;
|
||||||
el->setting_insn = cselib_current_insn;
|
el->setting_insn = cselib_current_insn;
|
||||||
|
@ -236,11 +229,7 @@ clear_table (clear_all)
|
||||||
VARRAY_POP_ALL (used_regs);
|
VARRAY_POP_ALL (used_regs);
|
||||||
|
|
||||||
htab_empty (hash_table);
|
htab_empty (hash_table);
|
||||||
obstack_free (&cselib_obstack, cselib_startobj);
|
|
||||||
|
|
||||||
empty_vals = 0;
|
|
||||||
empty_elt_lists = 0;
|
|
||||||
empty_elt_loc_lists = 0;
|
|
||||||
n_useless_values = 0;
|
n_useless_values = 0;
|
||||||
|
|
||||||
next_unknown_value = 0;
|
next_unknown_value = 0;
|
||||||
|
@ -704,7 +693,7 @@ new_cselib_val (value, mode)
|
||||||
if (e)
|
if (e)
|
||||||
empty_vals = e->u.next_free;
|
empty_vals = e->u.next_free;
|
||||||
else
|
else
|
||||||
e = (cselib_val *) obstack_alloc (&cselib_obstack, sizeof (cselib_val));
|
e = (cselib_val *) ggc_alloc (sizeof (cselib_val));
|
||||||
|
|
||||||
if (value == 0)
|
if (value == 0)
|
||||||
abort ();
|
abort ();
|
||||||
|
@ -1399,20 +1388,25 @@ cselib_update_varray_sizes ()
|
||||||
void
|
void
|
||||||
cselib_init ()
|
cselib_init ()
|
||||||
{
|
{
|
||||||
/* These are only created once. */
|
/* This is only created once. */
|
||||||
if (! callmem)
|
if (! callmem)
|
||||||
{
|
|
||||||
gcc_obstack_init (&cselib_obstack);
|
|
||||||
cselib_startobj = obstack_alloc (&cselib_obstack, 0);
|
|
||||||
|
|
||||||
callmem = gen_rtx_MEM (BLKmode, const0_rtx);
|
callmem = gen_rtx_MEM (BLKmode, const0_rtx);
|
||||||
ggc_add_rtx_root (&callmem, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
cselib_nregs = max_reg_num ();
|
cselib_nregs = max_reg_num ();
|
||||||
|
if (reg_values_old != NULL && VARRAY_SIZE (reg_values_old) >= cselib_nregs)
|
||||||
|
{
|
||||||
|
reg_values = reg_values_old;
|
||||||
|
used_regs = used_regs_old;
|
||||||
|
VARRAY_CLEAR (reg_values);
|
||||||
|
VARRAY_CLEAR (used_regs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
VARRAY_ELT_LIST_INIT (reg_values, cselib_nregs, "reg_values");
|
VARRAY_ELT_LIST_INIT (reg_values, cselib_nregs, "reg_values");
|
||||||
VARRAY_UINT_INIT (used_regs, cselib_nregs, "used_regs");
|
VARRAY_UINT_INIT (used_regs, cselib_nregs, "used_regs");
|
||||||
hash_table = htab_create (31, get_value_hash, entry_and_rtx_equal_p, NULL);
|
}
|
||||||
|
hash_table = htab_create_ggc (31, get_value_hash, entry_and_rtx_equal_p,
|
||||||
|
NULL);
|
||||||
clear_table (1);
|
clear_table (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1421,8 +1415,13 @@ cselib_init ()
|
||||||
void
|
void
|
||||||
cselib_finish ()
|
cselib_finish ()
|
||||||
{
|
{
|
||||||
clear_table (0);
|
reg_values_old = reg_values;
|
||||||
VARRAY_FREE (reg_values);
|
reg_values = 0;
|
||||||
VARRAY_FREE (used_regs);
|
used_regs_old = used_regs;
|
||||||
htab_delete (hash_table);
|
used_regs = 0;
|
||||||
|
hash_table = 0;
|
||||||
|
n_useless_values = 0;
|
||||||
|
next_unknown_value = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-cselib.h"
|
||||||
|
|
14
gcc/cselib.h
14
gcc/cselib.h
|
@ -20,17 +20,17 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
02111-1307, USA. */
|
02111-1307, USA. */
|
||||||
|
|
||||||
/* Describe a value. */
|
/* Describe a value. */
|
||||||
typedef struct cselib_val_struct
|
typedef struct cselib_val_struct GTY(())
|
||||||
{
|
{
|
||||||
/* The hash value. */
|
/* The hash value. */
|
||||||
unsigned int value;
|
unsigned int value;
|
||||||
union
|
union cselib_val_u
|
||||||
{
|
{
|
||||||
/* A VALUE rtx that points back to this structure. */
|
/* A VALUE rtx that points back to this structure. */
|
||||||
rtx val_rtx;
|
rtx GTY ((tag ("1"))) val_rtx;
|
||||||
/* Used to keep a list of free cselib_val structures. */
|
/* Used to keep a list of free cselib_val structures. */
|
||||||
struct cselib_val_struct *next_free;
|
struct cselib_val_struct * GTY ((skip (""))) next_free;
|
||||||
} u;
|
} GTY ((desc ("1"))) u;
|
||||||
|
|
||||||
/* All rtl expressions that hold this value at the current time during a
|
/* All rtl expressions that hold this value at the current time during a
|
||||||
scan. */
|
scan. */
|
||||||
|
@ -41,7 +41,7 @@ typedef struct cselib_val_struct
|
||||||
} cselib_val;
|
} cselib_val;
|
||||||
|
|
||||||
/* A list of rtl expressions that hold the same value. */
|
/* A list of rtl expressions that hold the same value. */
|
||||||
struct elt_loc_list
|
struct elt_loc_list GTY(())
|
||||||
{
|
{
|
||||||
/* Next element in the list. */
|
/* Next element in the list. */
|
||||||
struct elt_loc_list *next;
|
struct elt_loc_list *next;
|
||||||
|
@ -52,7 +52,7 @@ struct elt_loc_list
|
||||||
};
|
};
|
||||||
|
|
||||||
/* A list of cselib_val structures. */
|
/* A list of cselib_val structures. */
|
||||||
struct elt_list
|
struct elt_list GTY(())
|
||||||
{
|
{
|
||||||
struct elt_list *next;
|
struct elt_list *next;
|
||||||
cselib_val *elt;
|
cselib_val *elt;
|
||||||
|
|
|
@ -31,6 +31,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
#include "c-common.h"
|
#include "c-common.h"
|
||||||
#include "flags.h"
|
#include "flags.h"
|
||||||
|
#include "ggc.h"
|
||||||
#include "varray.h"
|
#include "varray.h"
|
||||||
|
|
||||||
#define MAX_SUBSCRIPTS 13
|
#define MAX_SUBSCRIPTS 13
|
||||||
|
@ -81,7 +82,7 @@ enum complexity_type {ziv, strong_siv, weak_siv, weak_zero_siv,
|
||||||
for that variable. Alternately one can sequentially follow each
|
for that variable. Alternately one can sequentially follow each
|
||||||
element of def_use_chain. */
|
element of def_use_chain. */
|
||||||
|
|
||||||
typedef struct def_use
|
typedef struct def_use GTY(())
|
||||||
{
|
{
|
||||||
/* outermost loop */
|
/* outermost loop */
|
||||||
tree outer_loop;
|
tree outer_loop;
|
||||||
|
@ -106,7 +107,7 @@ typedef struct def_use
|
||||||
element of loop_chain and check outer_loop to get all loops
|
element of loop_chain and check outer_loop to get all loops
|
||||||
contained within a certain loop. */
|
contained within a certain loop. */
|
||||||
|
|
||||||
typedef struct loop
|
typedef struct loop GTY(())
|
||||||
{
|
{
|
||||||
/* outermost loop containing this loop */
|
/* outermost loop containing this loop */
|
||||||
tree outer_loop;
|
tree outer_loop;
|
||||||
|
@ -124,7 +125,7 @@ typedef struct loop
|
||||||
|
|
||||||
/* Pointed to by loop. One per induction variable. */
|
/* Pointed to by loop. One per induction variable. */
|
||||||
|
|
||||||
typedef struct induction
|
typedef struct induction GTY(())
|
||||||
{
|
{
|
||||||
/* our name */
|
/* our name */
|
||||||
const char *variable;
|
const char *variable;
|
||||||
|
@ -140,7 +141,7 @@ typedef struct induction
|
||||||
|
|
||||||
/* Pointed to by def/use. One per dependence. */
|
/* Pointed to by def/use. One per dependence. */
|
||||||
|
|
||||||
typedef struct dependence
|
typedef struct dependence GTY(())
|
||||||
{
|
{
|
||||||
tree source;
|
tree source;
|
||||||
tree destination;
|
tree destination;
|
||||||
|
@ -172,16 +173,16 @@ typedef struct subscript
|
||||||
static tree dest_to_remember;
|
static tree dest_to_remember;
|
||||||
|
|
||||||
/* Chain for def_use */
|
/* Chain for def_use */
|
||||||
static varray_type def_use_chain;
|
static GTY ((param_is (def_use))) varray_type def_use_chain;
|
||||||
|
|
||||||
/* Chain for dependence */
|
/* Chain for dependence */
|
||||||
static varray_type dep_chain;
|
static GTY ((param_is (dependence))) varray_type dep_chain;
|
||||||
|
|
||||||
/* Chain for loop */
|
/* Chain for loop */
|
||||||
static varray_type loop_chain;
|
static GTY ((param_is (loop))) varray_type loop_chain;
|
||||||
|
|
||||||
/* Chain for induction */
|
/* Chain for induction */
|
||||||
static varray_type induction_chain;
|
static GTY ((param_is (induction))) varray_type induction_chain;
|
||||||
|
|
||||||
void init_dependence_analysis PARAMS ((tree));
|
void init_dependence_analysis PARAMS ((tree));
|
||||||
static void build_def_use PARAMS ((tree, enum def_use_type));
|
static void build_def_use PARAMS ((tree, enum def_use_type));
|
||||||
|
@ -227,8 +228,6 @@ void
|
||||||
init_dependence_analysis (exp)
|
init_dependence_analysis (exp)
|
||||||
tree exp;
|
tree exp;
|
||||||
{
|
{
|
||||||
def_use *du_ptr;
|
|
||||||
|
|
||||||
VARRAY_GENERIC_PTR_INIT (def_use_chain, 50, "def_use_chain");
|
VARRAY_GENERIC_PTR_INIT (def_use_chain, 50, "def_use_chain");
|
||||||
VARRAY_GENERIC_PTR_INIT (dep_chain, 50, "dep_chain");
|
VARRAY_GENERIC_PTR_INIT (dep_chain, 50, "dep_chain");
|
||||||
VARRAY_GENERIC_PTR_INIT (loop_chain, 50, "loop_chain");
|
VARRAY_GENERIC_PTR_INIT (loop_chain, 50, "loop_chain");
|
||||||
|
@ -242,16 +241,9 @@ init_dependence_analysis (exp)
|
||||||
|
|
||||||
/* dump_node_dependence (&def_use_chain);*/
|
/* dump_node_dependence (&def_use_chain);*/
|
||||||
|
|
||||||
for (du_ptr = VARRAY_TOP (def_use_chain, generic);
|
def_use_chain = 0;
|
||||||
VARRAY_POP (def_use_chain);
|
loop_chain = 0;
|
||||||
du_ptr = VARRAY_TOP (def_use_chain, generic))
|
induction_chain = 0;
|
||||||
{
|
|
||||||
free (du_ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
VARRAY_FREE (def_use_chain);
|
|
||||||
VARRAY_FREE (loop_chain);
|
|
||||||
VARRAY_FREE (induction_chain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Build ARRAY_REF def/use info 'def_use_chain' starting at EXP which is a def
|
/* Build ARRAY_REF def/use info 'def_use_chain' starting at EXP which is a def
|
||||||
|
@ -337,7 +329,8 @@ build_def_use (exp, du_type)
|
||||||
int i;
|
int i;
|
||||||
char null_string = '\0';
|
char null_string = '\0';
|
||||||
|
|
||||||
VARRAY_PUSH_GENERIC_PTR (def_use_chain, xmalloc (sizeof (def_use)));
|
VARRAY_PUSH_GENERIC_PTR (def_use_chain,
|
||||||
|
ggc_alloc (sizeof (def_use)));
|
||||||
du_ptr = VARRAY_GENERIC_PTR (def_use_chain, du_idx++);
|
du_ptr = VARRAY_GENERIC_PTR (def_use_chain, du_idx++);
|
||||||
du_ptr->type = du_type;
|
du_ptr->type = du_type;
|
||||||
du_ptr->status = unseen;
|
du_ptr->status = unseen;
|
||||||
|
@ -418,7 +411,7 @@ add_loop (loop_node, outer_loop, nloop)
|
||||||
{
|
{
|
||||||
loop *loop_ptr;
|
loop *loop_ptr;
|
||||||
|
|
||||||
VARRAY_PUSH_GENERIC_PTR (loop_chain, xmalloc (sizeof (loop)));
|
VARRAY_PUSH_GENERIC_PTR (loop_chain, ggc_alloc (sizeof (loop)));
|
||||||
loop_ptr = VARRAY_TOP (loop_chain, generic);
|
loop_ptr = VARRAY_TOP (loop_chain, generic);
|
||||||
loop_ptr->outer_loop = outer_loop;
|
loop_ptr->outer_loop = outer_loop;
|
||||||
loop_ptr->containing_loop = loop_node;
|
loop_ptr->containing_loop = loop_node;
|
||||||
|
@ -502,7 +495,8 @@ find_induction_variable (init_node, cond_node, incr_node, loop_def)
|
||||||
if (!INDEX_LIMIT_CHECK (cond_node))
|
if (!INDEX_LIMIT_CHECK (cond_node))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
VARRAY_PUSH_GENERIC_PTR (induction_chain, xmalloc (sizeof (induction)));
|
VARRAY_PUSH_GENERIC_PTR (induction_chain,
|
||||||
|
ggc_alloc (sizeof (induction)));
|
||||||
ind_ptr = VARRAY_TOP (induction_chain, generic);
|
ind_ptr = VARRAY_TOP (induction_chain, generic);
|
||||||
loop_def->ind = ind_ptr;
|
loop_def->ind = ind_ptr;
|
||||||
ind_ptr->variable = IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND
|
ind_ptr->variable = IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND
|
||||||
|
@ -747,7 +741,7 @@ check_node_dependence (du)
|
||||||
if (! have_dependence)
|
if (! have_dependence)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
VARRAY_PUSH_GENERIC_PTR (dep_chain, xmalloc (sizeof (dependence)));
|
VARRAY_PUSH_GENERIC_PTR (dep_chain, ggc_alloc (sizeof (dependence)));
|
||||||
dep_ptr = VARRAY_TOP (dep_chain, generic);
|
dep_ptr = VARRAY_TOP (dep_chain, generic);
|
||||||
dep_ptr->source = use_ptr->expression;
|
dep_ptr->source = use_ptr->expression;
|
||||||
dep_ptr->destination = def_ptr->expression;
|
dep_ptr->destination = def_ptr->expression;
|
||||||
|
@ -790,7 +784,8 @@ check_node_dependence (du)
|
||||||
/* Dummy for rtl interface */
|
/* Dummy for rtl interface */
|
||||||
dependence *dep_root_ptr;
|
dependence *dep_root_ptr;
|
||||||
|
|
||||||
VARRAY_PUSH_GENERIC_PTR (dep_chain, xmalloc (sizeof (dependence)));
|
VARRAY_PUSH_GENERIC_PTR (dep_chain,
|
||||||
|
ggc_alloc (sizeof (dependence)));
|
||||||
dep_root_ptr = VARRAY_TOP (dep_chain, generic);
|
dep_root_ptr = VARRAY_TOP (dep_chain, generic);
|
||||||
dep_root_ptr->source = 0;
|
dep_root_ptr->source = 0;
|
||||||
dep_root_ptr->destination = def_ptr->expression;
|
dep_root_ptr->destination = def_ptr->expression;
|
||||||
|
@ -1364,7 +1359,6 @@ dump_node_dependence (void)
|
||||||
if (i >= VARRAY_SIZE (seen))
|
if (i >= VARRAY_SIZE (seen))
|
||||||
dump_one_node (du_ptr, &seen);
|
dump_one_node (du_ptr, &seen);
|
||||||
}
|
}
|
||||||
VARRAY_FREE (seen);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1463,5 +1457,7 @@ have_dependence_p (dest_rtx, src_rtx, direction, distance)
|
||||||
void
|
void
|
||||||
end_dependence_analysis ()
|
end_dependence_analysis ()
|
||||||
{
|
{
|
||||||
VARRAY_FREE (dep_chain);
|
dep_chain = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-dependence.h"
|
||||||
|
|
|
@ -169,6 +169,7 @@ Additional tutorial information is linked to from
|
||||||
* Fragments:: Writing the @file{t-@var{target}} and @file{x-@var{host}} files.
|
* Fragments:: Writing the @file{t-@var{target}} and @file{x-@var{host}} files.
|
||||||
* Collect2:: How @code{collect2} works; how it finds @code{ld}.
|
* Collect2:: How @code{collect2} works; how it finds @code{ld}.
|
||||||
* Header Dirs:: Understanding the standard header file directories.
|
* Header Dirs:: Understanding the standard header file directories.
|
||||||
|
* Type Information:: GCC's memory management; generating type information.
|
||||||
|
|
||||||
* Funding:: How to help assure funding for free software.
|
* Funding:: How to help assure funding for free software.
|
||||||
* GNU Project:: The GNU Project and GNU/Linux.
|
* GNU Project:: The GNU Project and GNU/Linux.
|
||||||
|
@ -196,6 +197,7 @@ Additional tutorial information is linked to from
|
||||||
@include fragments.texi
|
@include fragments.texi
|
||||||
@include collect2.texi
|
@include collect2.texi
|
||||||
@include headerdirs.texi
|
@include headerdirs.texi
|
||||||
|
@include gty.texi
|
||||||
|
|
||||||
@include funding.texi
|
@include funding.texi
|
||||||
@include gnu.texi
|
@include gnu.texi
|
||||||
|
|
|
@ -0,0 +1,257 @@
|
||||||
|
@c Copyright (C) 2002
|
||||||
|
@c Free Software Foundation, Inc.
|
||||||
|
@c This is part of the GCC manual.
|
||||||
|
@c For copying conditions, see the file gcc.texi.
|
||||||
|
|
||||||
|
@node Type Information
|
||||||
|
@chapter Memory Management and Type Information
|
||||||
|
@cindex GGC
|
||||||
|
@findex GTY
|
||||||
|
|
||||||
|
GCC uses some fairly sophisticated memory management techniques, which
|
||||||
|
involve determining information about GCC's data structures from GCC's
|
||||||
|
source code and using this information to perform garbage collection.
|
||||||
|
|
||||||
|
A full C parser would be too overcomplicated for this task, so a limited
|
||||||
|
subset of C is interpreted and special markers are used to determine
|
||||||
|
what parts of the source to look at. The parser can also detect
|
||||||
|
simple typedefs of the form @code{typedef struct ID1 *ID2;} and
|
||||||
|
@code{typedef int ID3;}, and these don't need to be specially marked.
|
||||||
|
|
||||||
|
The two forms that do need to be marked are:
|
||||||
|
@verbatim
|
||||||
|
struct ID1 GTY(([options]))
|
||||||
|
{
|
||||||
|
[fields]
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct ID2 GTY(([options]))
|
||||||
|
{
|
||||||
|
[fields]
|
||||||
|
} ID3;
|
||||||
|
@end verbatim
|
||||||
|
|
||||||
|
@menu
|
||||||
|
* GTY Options:: What goes inside a @code{GTY(())}.
|
||||||
|
* GGC Roots:: Making global variables GGC roots.
|
||||||
|
* Files:: How the generated files work.
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
@node GTY Options
|
||||||
|
@section The Inside of a @code{GTY(())}
|
||||||
|
|
||||||
|
Sometimes the C code is not enough to fully describe the type structure.
|
||||||
|
Extra information can be provided by using more @code{GTY} markers.
|
||||||
|
These markers can be placed:
|
||||||
|
@itemize @bullet
|
||||||
|
@item
|
||||||
|
In a structure definition, before the open brace;
|
||||||
|
@item
|
||||||
|
In a global variable declaration, after the keyword @code{static} or
|
||||||
|
@code{extern}; and
|
||||||
|
@item
|
||||||
|
In a structure field definition, before the name of the field.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
The format of a marker is
|
||||||
|
@verbatim
|
||||||
|
GTY (([name] ([param]), [name] ([param]) ...))
|
||||||
|
@end verbatim
|
||||||
|
The parameter is either a string or a type name.
|
||||||
|
|
||||||
|
When the parameter is a string, often it is a fragment of C code. Three
|
||||||
|
special escapes may be available:
|
||||||
|
|
||||||
|
@cindex % in GTY option
|
||||||
|
@table @code
|
||||||
|
@item %h
|
||||||
|
This expands to an expression that evaluates to the current structure.
|
||||||
|
@item %1
|
||||||
|
This expands to an expression that evaluates to the structure that
|
||||||
|
immediately contains the current structure.
|
||||||
|
@item %0
|
||||||
|
This expands to an expression that evaluates to the outermost structure
|
||||||
|
that contains the current structure.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
The available options are:
|
||||||
|
|
||||||
|
@table @code
|
||||||
|
@findex length
|
||||||
|
@item length
|
||||||
|
|
||||||
|
There are two places the type machinery will need to be explicitly told
|
||||||
|
the length of an array. The first case is when a structure ends in a
|
||||||
|
variable-length array, like this:
|
||||||
|
@verbatim
|
||||||
|
struct rtvec_def GTY(()) {
|
||||||
|
int num_elem; /* number of elements */
|
||||||
|
rtx GTY ((length ("%h.num_elem"))) elem[1];
|
||||||
|
};
|
||||||
|
@end verbatim
|
||||||
|
In this case, the @code{length} option is used to override the specified
|
||||||
|
array length (which should usually be @code{1}). The parameter of the
|
||||||
|
option is a fragment of C code that calculates the length.
|
||||||
|
|
||||||
|
The second case is when a structure or a global variable contains a
|
||||||
|
pointer to an array, like this:
|
||||||
|
@verbatim
|
||||||
|
tree * GTY ((length ("%h.regno_pointer_align_length"))) regno_decl;
|
||||||
|
@end verbatim
|
||||||
|
In this case, @code{regno_decl} has been allocated by writing something like
|
||||||
|
@verbatim
|
||||||
|
x->regno_decl = ggc_alloc (x->regno_pointer_align_length * sizeof (tree));
|
||||||
|
@end verbatim
|
||||||
|
and the @code{length} provides the length of the field.
|
||||||
|
|
||||||
|
This second use of @code{length} also works on global variables, like:
|
||||||
|
@verbatim
|
||||||
|
static GTY((length ("reg_base_value_size"))) rtx *reg_base_value;
|
||||||
|
@end verbatim
|
||||||
|
|
||||||
|
@findex skip
|
||||||
|
@item skip
|
||||||
|
|
||||||
|
If @code{skip} is applied to a field, the type machinery will ignore it.
|
||||||
|
This is somewhat dangerous; the only safe use is in a union when one
|
||||||
|
field really isn't ever used.
|
||||||
|
|
||||||
|
@findex desc
|
||||||
|
@findex tag
|
||||||
|
@findex always
|
||||||
|
@item desc
|
||||||
|
@itemx tag
|
||||||
|
@itemx always
|
||||||
|
|
||||||
|
The type machinery needs to be told which field of a @code{union} is
|
||||||
|
currently active. This is done by giving each field a constant @code{tag}
|
||||||
|
value, and then specifying a discriminator using @code{desc}. For example,
|
||||||
|
@verbatim
|
||||||
|
struct tree_binding GTY(())
|
||||||
|
{
|
||||||
|
struct tree_common common;
|
||||||
|
union tree_binding_u {
|
||||||
|
tree GTY ((tag ("0"))) scope;
|
||||||
|
struct cp_binding_level * GTY ((tag ("1"))) level;
|
||||||
|
} GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) scope;
|
||||||
|
tree value;
|
||||||
|
};
|
||||||
|
@end verbatim
|
||||||
|
|
||||||
|
In the @code{desc} option, the ``current structure'' is the union that
|
||||||
|
it discriminates. Use @code{%1} to mean the structure containing it.
|
||||||
|
(There are no escapes available to the @code{tag} option, since it's
|
||||||
|
supposed to be a constant.)
|
||||||
|
|
||||||
|
You can use @code{always} to mean that this field is always used.
|
||||||
|
|
||||||
|
@findex param_is
|
||||||
|
@findex use_param
|
||||||
|
@item param_is
|
||||||
|
@itemx use_param
|
||||||
|
|
||||||
|
Sometimes it's convenient to define some data structure to work on
|
||||||
|
generic pointers (that is, @code{PTR}), and then use it with specific types.
|
||||||
|
@code{param_is} specifies the real type pointed to, and @code{use_param}
|
||||||
|
says where in the generic data structure that type should be put.
|
||||||
|
|
||||||
|
For instance, to have a @code{htab_t} that points to trees, one should write
|
||||||
|
@verbatim
|
||||||
|
htab_t GTY ((param_is (union tree_node))) ict;
|
||||||
|
@end verbatim
|
||||||
|
|
||||||
|
@findex deletable
|
||||||
|
@item deletable
|
||||||
|
|
||||||
|
@code{deletable}, when applied to a global variable, indicates that when
|
||||||
|
garbage collection runs, there's no need to mark anything pointed to
|
||||||
|
by this variable, it can just be set to @code{NULL} instead. This is used
|
||||||
|
to keep a list of free structures around for re-use.
|
||||||
|
|
||||||
|
@findex if_marked
|
||||||
|
@item if_marked
|
||||||
|
|
||||||
|
Suppose you want some kinds of object to be unique, and so you put them
|
||||||
|
in a hash table. If garbage collection marks the hash table, these
|
||||||
|
objects will never be freed, even if the last other reference to them
|
||||||
|
goes away. GGC has special handling to deal with this: if you use the
|
||||||
|
@code{if_marked} option on a global hash table, GGC will call the
|
||||||
|
routine whose name is the parameter to the option on each hash table
|
||||||
|
entry. If the routine returns nonzero, the hash table entry will
|
||||||
|
be marked as usual. If the routine returns zero, the hash table entry
|
||||||
|
will be deleted.
|
||||||
|
|
||||||
|
The routine @code{ggc_marked_p} can be used to determine if an element
|
||||||
|
has been marked already; in fact, the usual case is to use
|
||||||
|
@code{if_marked ("ggc_marked_p")}.
|
||||||
|
|
||||||
|
@findex maybe_undef
|
||||||
|
@item maybe_undef
|
||||||
|
|
||||||
|
When applied to a field, @code{maybe_undef} indicates that it's OK if
|
||||||
|
the structure that this fields points to is never defined, so long as
|
||||||
|
this field is always @code{NULL}. This is used to avoid requiring
|
||||||
|
backends to define certain optional structures. It doesn't work with
|
||||||
|
language frontends.
|
||||||
|
|
||||||
|
@findex special
|
||||||
|
@item special
|
||||||
|
|
||||||
|
The @code{special} option is used for those bizarre cases that are just
|
||||||
|
too hard to deal with otherwise. Don't use it for new code.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@node GGC Roots
|
||||||
|
@section Marking Roots for the Garbage Collector
|
||||||
|
@cindex roots, marking
|
||||||
|
@cindex marking roots
|
||||||
|
|
||||||
|
In addition to keeping track of types, the type machinery also locates
|
||||||
|
the global variables that the garbage collector starts at. There are
|
||||||
|
two syntaxes it accepts to indicate a root:
|
||||||
|
|
||||||
|
@enumerate
|
||||||
|
@item
|
||||||
|
@verb{|extern GTY (([options])) [type] ID;|}
|
||||||
|
@item
|
||||||
|
@verb{|static GTY (([options])) [type] ID;|}
|
||||||
|
@end enumerate
|
||||||
|
|
||||||
|
@node Files
|
||||||
|
@section Source Files Containing Type Information
|
||||||
|
@cindex generated files
|
||||||
|
@cindex files, generated
|
||||||
|
|
||||||
|
Whenever you add @code{GTY} markers to a new source file, there are three
|
||||||
|
things you need to do:
|
||||||
|
|
||||||
|
@enumerate
|
||||||
|
@item
|
||||||
|
You need to add the file to the list of source files the type machinery
|
||||||
|
scans. For a back-end file, this is done automatically. For a
|
||||||
|
front-end file, this is done by adding the filename to the
|
||||||
|
@code{gtfiles} variable defined in @file{config-lang.in}. For other
|
||||||
|
files, this is done by adding the filename to the @code{GTFILES} variable
|
||||||
|
in @file{Makefile.in}.
|
||||||
|
|
||||||
|
@item
|
||||||
|
You need to include the file that the type machinery will generate in
|
||||||
|
the source file you just changed. The file will be called
|
||||||
|
@file{gt-@var{path}.h} where @var{path} is the pathname from the
|
||||||
|
@file{gcc} directory with slashes replaced by @verb{|-|}. Don't forget
|
||||||
|
to mention this file as a dependency in the @file{Makefile}!
|
||||||
|
|
||||||
|
@item
|
||||||
|
Finally, you need to add a @file{Makefile} rule that will ensure this file
|
||||||
|
can be built. This is done by making it a dependency of @code{s-gtype},
|
||||||
|
like this:
|
||||||
|
@verbatim
|
||||||
|
gt-path.h : s-gtype ; @true
|
||||||
|
@end verbatim
|
||||||
|
@end enumerate
|
||||||
|
|
||||||
|
For language frontends, there is another file that needs to be included
|
||||||
|
somewhere. It will be called @file{gtype-@var{lang}.h}, where
|
||||||
|
@var{lang} is the name of the subdirectory the language is contained in.
|
||||||
|
It will need @file{Makefile} rules just like the other generated files.
|
|
@ -824,11 +824,9 @@ structure contains a field called @code{machine} whose type is
|
||||||
to their own specific data.
|
to their own specific data.
|
||||||
|
|
||||||
If a target needs per-function specific data it should define the type
|
If a target needs per-function specific data it should define the type
|
||||||
@code{struct machine_function} and also the macro
|
@code{struct machine_function} and also the macro @code{INIT_EXPANDERS}.
|
||||||
@code{INIT_EXPANDERS}. This macro should be used to initialize some or
|
This macro should be used to initialize the function pointer
|
||||||
all of the function pointers @code{init_machine_status},
|
@code{init_machine_status}. This pointer is explained below.
|
||||||
@code{free_machine_status} and @code{mark_machine_status}. These
|
|
||||||
pointers are explained below.
|
|
||||||
|
|
||||||
One typical use of per-function, target specific data is to create an
|
One typical use of per-function, target specific data is to create an
|
||||||
RTX to hold the register containing the function's return address. This
|
RTX to hold the register containing the function's return address. This
|
||||||
|
@ -864,19 +862,9 @@ specific initialization of the @code{struct function} structure. It is
|
||||||
intended that this would be used to initialize the @code{machine} of
|
intended that this would be used to initialize the @code{machine} of
|
||||||
that structure.
|
that structure.
|
||||||
|
|
||||||
@findex free_machine_status
|
@code{struct machine_function} structures are expected to be freed by GC.
|
||||||
@item free_machine_status
|
Generally, any memory that they reference must be allocated by using
|
||||||
This is a @code{void (*)(struct function *)} function pointer. If this
|
@code{ggc_alloc}, including the structure itself.
|
||||||
pointer is non-@code{NULL} it will be called once per function, after the
|
|
||||||
function has been compiled, in order to allow any memory allocated
|
|
||||||
during the @code{init_machine_status} function call to be freed.
|
|
||||||
|
|
||||||
@findex mark_machine_status
|
|
||||||
@item mark_machine_status
|
|
||||||
This is a @code{void (*)(struct function *)} function pointer. If this
|
|
||||||
pointer is non-@code{NULL} it will be called once per function in order to mark
|
|
||||||
any data items in the @code{struct machine_function} structure which
|
|
||||||
need garbage collection.
|
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
|
|
@ -704,7 +704,7 @@ mark_indirect_pool_entry (node, data)
|
||||||
splay_tree_node node;
|
splay_tree_node node;
|
||||||
void* data ATTRIBUTE_UNUSED;
|
void* data ATTRIBUTE_UNUSED;
|
||||||
{
|
{
|
||||||
ggc_mark_nonnull_tree ((tree) node->value);
|
ggc_mark_tree ((tree) node->value);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -134,6 +134,22 @@ default_eh_frame_section ()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Array of RTXes referenced by the debugging information, which therefore
|
||||||
|
must be kept around forever. */
|
||||||
|
static GTY(()) varray_type used_rtx_varray;
|
||||||
|
|
||||||
|
/* A pointer to the base of a list of incomplete types which might be
|
||||||
|
completed at some later time. incomplete_types_list needs to be a VARRAY
|
||||||
|
because we want to tell the garbage collector about it. */
|
||||||
|
static GTY(()) varray_type incomplete_types;
|
||||||
|
|
||||||
|
/* A pointer to the base of a table of references to declaration
|
||||||
|
scopes. This table is a display which tracks the nesting
|
||||||
|
of declaration scopes at the current scope and containing
|
||||||
|
scopes. This table is used to find the proper place to
|
||||||
|
define type declaration DIE's. */
|
||||||
|
static GTY(()) varray_type decl_scope_table;
|
||||||
|
|
||||||
#if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
|
#if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
|
||||||
|
|
||||||
/* How to start an assembler comment. */
|
/* How to start an assembler comment. */
|
||||||
|
@ -3352,13 +3368,6 @@ static unsigned decl_die_table_in_use;
|
||||||
decl_die_table. */
|
decl_die_table. */
|
||||||
#define DECL_DIE_TABLE_INCREMENT 256
|
#define DECL_DIE_TABLE_INCREMENT 256
|
||||||
|
|
||||||
/* A pointer to the base of a table of references to declaration
|
|
||||||
scopes. This table is a display which tracks the nesting
|
|
||||||
of declaration scopes at the current scope and containing
|
|
||||||
scopes. This table is used to find the proper place to
|
|
||||||
define type declaration DIE's. */
|
|
||||||
varray_type decl_scope_table;
|
|
||||||
|
|
||||||
/* A pointer to the base of a list of references to DIE's that
|
/* A pointer to the base of a list of references to DIE's that
|
||||||
are uniquely identified by their tag, presence/absence of
|
are uniquely identified by their tag, presence/absence of
|
||||||
children DIE's, and list of attribute/value pairs. */
|
children DIE's, and list of attribute/value pairs. */
|
||||||
|
@ -3441,21 +3450,12 @@ static unsigned ranges_table_in_use;
|
||||||
/* Whether we have location lists that need outputting */
|
/* Whether we have location lists that need outputting */
|
||||||
static unsigned have_location_lists;
|
static unsigned have_location_lists;
|
||||||
|
|
||||||
/* A pointer to the base of a list of incomplete types which might be
|
|
||||||
completed at some later time. incomplete_types_list needs to be a VARRAY
|
|
||||||
because we want to tell the garbage collector about it. */
|
|
||||||
varray_type incomplete_types;
|
|
||||||
|
|
||||||
/* Record whether the function being analyzed contains inlined functions. */
|
/* Record whether the function being analyzed contains inlined functions. */
|
||||||
static int current_function_has_inlines;
|
static int current_function_has_inlines;
|
||||||
#if 0 && defined (MIPS_DEBUGGING_INFO)
|
#if 0 && defined (MIPS_DEBUGGING_INFO)
|
||||||
static int comp_unit_has_inlines;
|
static int comp_unit_has_inlines;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Array of RTXes referenced by the debugging information, which therefore
|
|
||||||
must be kept around forever. This is a GC root. */
|
|
||||||
static varray_type used_rtx_varray;
|
|
||||||
|
|
||||||
/* Forward declarations for functions defined in this file. */
|
/* Forward declarations for functions defined in this file. */
|
||||||
|
|
||||||
static int is_pseudo_reg PARAMS ((rtx));
|
static int is_pseudo_reg PARAMS ((rtx));
|
||||||
|
@ -5123,7 +5123,7 @@ static inline dw_die_ref
|
||||||
lookup_type_die (type)
|
lookup_type_die (type)
|
||||||
tree type;
|
tree type;
|
||||||
{
|
{
|
||||||
return (dw_die_ref) TYPE_SYMTAB_POINTER (type);
|
return TYPE_SYMTAB_DIE (type);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Equate a DIE to a given type specifier. */
|
/* Equate a DIE to a given type specifier. */
|
||||||
|
@ -5133,7 +5133,7 @@ equate_type_number_to_die (type, type_die)
|
||||||
tree type;
|
tree type;
|
||||||
dw_die_ref type_die;
|
dw_die_ref type_die;
|
||||||
{
|
{
|
||||||
TYPE_SYMTAB_POINTER (type) = (char *) type_die;
|
TYPE_SYMTAB_DIE (type) = type_die;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the DIE associated with a given declaration. */
|
/* Return the DIE associated with a given declaration. */
|
||||||
|
@ -12034,7 +12034,6 @@ dwarf2out_init (main_input_filename)
|
||||||
|
|
||||||
/* Allocate the initial hunk of the decl_scope_table. */
|
/* Allocate the initial hunk of the decl_scope_table. */
|
||||||
VARRAY_TREE_INIT (decl_scope_table, 256, "decl_scope_table");
|
VARRAY_TREE_INIT (decl_scope_table, 256, "decl_scope_table");
|
||||||
ggc_add_tree_varray_root (&decl_scope_table, 1);
|
|
||||||
|
|
||||||
/* Allocate the initial hunk of the abbrev_die_table. */
|
/* Allocate the initial hunk of the abbrev_die_table. */
|
||||||
abbrev_die_table
|
abbrev_die_table
|
||||||
|
@ -12061,10 +12060,8 @@ dwarf2out_init (main_input_filename)
|
||||||
comp_unit_die = gen_compile_unit_die (main_input_filename);
|
comp_unit_die = gen_compile_unit_die (main_input_filename);
|
||||||
|
|
||||||
VARRAY_TREE_INIT (incomplete_types, 64, "incomplete_types");
|
VARRAY_TREE_INIT (incomplete_types, 64, "incomplete_types");
|
||||||
ggc_add_tree_varray_root (&incomplete_types, 1);
|
|
||||||
|
|
||||||
VARRAY_RTX_INIT (used_rtx_varray, 32, "used_rtx_varray");
|
VARRAY_RTX_INIT (used_rtx_varray, 32, "used_rtx_varray");
|
||||||
ggc_add_rtx_varray_root (&used_rtx_varray, 1);
|
|
||||||
|
|
||||||
ggc_add_root (&limbo_die_list, 1, 1, mark_limbo_die_list);
|
ggc_add_root (&limbo_die_list, 1, 1, mark_limbo_die_list);
|
||||||
|
|
||||||
|
@ -12322,4 +12319,11 @@ dwarf2out_finish (input_filename)
|
||||||
if (debug_str_hash)
|
if (debug_str_hash)
|
||||||
ht_forall (debug_str_hash, output_indirect_string, NULL);
|
ht_forall (debug_str_hash, output_indirect_string, NULL);
|
||||||
}
|
}
|
||||||
#endif /* DWARF2_DEBUGGING_INFO || DWARF2_UNWIND_INFO */
|
#else
|
||||||
|
|
||||||
|
/* This should never be used, but its address is needed for comparisons. */
|
||||||
|
const struct gcc_debug_hooks dwarf2_debug_hooks;
|
||||||
|
|
||||||
|
#endif /* DWARF2_DEBUGGING_INFO */
|
||||||
|
|
||||||
|
#include "gt-dwarf2out.h"
|
||||||
|
|
140
gcc/emit-rtl.c
140
gcc/emit-rtl.c
|
@ -143,13 +143,16 @@ rtx const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1];
|
||||||
/* A hash table storing CONST_INTs whose absolute value is greater
|
/* A hash table storing CONST_INTs whose absolute value is greater
|
||||||
than MAX_SAVED_CONST_INT. */
|
than MAX_SAVED_CONST_INT. */
|
||||||
|
|
||||||
static htab_t const_int_htab;
|
static GTY ((if_marked ("ggc_marked_p"), param_is (struct rtx_def)))
|
||||||
|
htab_t const_int_htab;
|
||||||
|
|
||||||
/* A hash table storing memory attribute structures. */
|
/* A hash table storing memory attribute structures. */
|
||||||
static htab_t mem_attrs_htab;
|
static GTY ((if_marked ("ggc_marked_p"), param_is (struct mem_attrs)))
|
||||||
|
htab_t mem_attrs_htab;
|
||||||
|
|
||||||
/* A hash table storing all CONST_DOUBLEs. */
|
/* A hash table storing all CONST_DOUBLEs. */
|
||||||
static htab_t const_double_htab;
|
static GTY ((if_marked ("ggc_marked_p"), param_is (struct rtx_def)))
|
||||||
|
htab_t const_double_htab;
|
||||||
|
|
||||||
#define first_insn (cfun->emit->x_first_insn)
|
#define first_insn (cfun->emit->x_first_insn)
|
||||||
#define last_insn (cfun->emit->x_last_insn)
|
#define last_insn (cfun->emit->x_last_insn)
|
||||||
|
@ -161,7 +164,6 @@ static htab_t const_double_htab;
|
||||||
static rtx make_jump_insn_raw PARAMS ((rtx));
|
static rtx make_jump_insn_raw PARAMS ((rtx));
|
||||||
static rtx make_call_insn_raw PARAMS ((rtx));
|
static rtx make_call_insn_raw PARAMS ((rtx));
|
||||||
static rtx find_line_note PARAMS ((rtx));
|
static rtx find_line_note PARAMS ((rtx));
|
||||||
static void mark_sequence_stack PARAMS ((struct sequence_stack *));
|
|
||||||
static rtx change_address_1 PARAMS ((rtx, enum machine_mode, rtx,
|
static rtx change_address_1 PARAMS ((rtx, enum machine_mode, rtx,
|
||||||
int));
|
int));
|
||||||
static void unshare_all_rtl_1 PARAMS ((rtx));
|
static void unshare_all_rtl_1 PARAMS ((rtx));
|
||||||
|
@ -178,7 +180,6 @@ static rtx lookup_const_double PARAMS ((rtx));
|
||||||
static hashval_t mem_attrs_htab_hash PARAMS ((const void *));
|
static hashval_t mem_attrs_htab_hash PARAMS ((const void *));
|
||||||
static int mem_attrs_htab_eq PARAMS ((const void *,
|
static int mem_attrs_htab_eq PARAMS ((const void *,
|
||||||
const void *));
|
const void *));
|
||||||
static void mem_attrs_mark PARAMS ((const void *));
|
|
||||||
static mem_attrs *get_mem_attrs PARAMS ((HOST_WIDE_INT, tree, rtx,
|
static mem_attrs *get_mem_attrs PARAMS ((HOST_WIDE_INT, tree, rtx,
|
||||||
rtx, unsigned int,
|
rtx, unsigned int,
|
||||||
enum machine_mode));
|
enum machine_mode));
|
||||||
|
@ -273,25 +274,6 @@ mem_attrs_htab_eq (x, y)
|
||||||
&& p->size == q->size && p->align == q->align);
|
&& p->size == q->size && p->align == q->align);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This routine is called when we determine that we need a mem_attrs entry.
|
|
||||||
It marks the associated decl and RTL as being used, if present. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
mem_attrs_mark (x)
|
|
||||||
const void *x;
|
|
||||||
{
|
|
||||||
mem_attrs *p = (mem_attrs *) x;
|
|
||||||
|
|
||||||
if (p->expr)
|
|
||||||
ggc_mark_tree (p->expr);
|
|
||||||
|
|
||||||
if (p->offset)
|
|
||||||
ggc_mark_rtx (p->offset);
|
|
||||||
|
|
||||||
if (p->size)
|
|
||||||
ggc_mark_rtx (p->size);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allocate a new mem_attrs structure and insert it into the hash table if
|
/* Allocate a new mem_attrs structure and insert it into the hash table if
|
||||||
one identical to it is not already in the table. We are doing this for
|
one identical to it is not already in the table. We are doing this for
|
||||||
MEM of mode MODE. */
|
MEM of mode MODE. */
|
||||||
|
@ -811,16 +793,16 @@ gen_reg_rtx (mode)
|
||||||
rtx *new1;
|
rtx *new1;
|
||||||
tree *new2;
|
tree *new2;
|
||||||
|
|
||||||
new = xrealloc (f->emit->regno_pointer_align, old_size * 2);
|
new = ggc_realloc (f->emit->regno_pointer_align, old_size * 2);
|
||||||
memset (new + old_size, 0, old_size);
|
memset (new + old_size, 0, old_size);
|
||||||
f->emit->regno_pointer_align = (unsigned char *) new;
|
f->emit->regno_pointer_align = (unsigned char *) new;
|
||||||
|
|
||||||
new1 = (rtx *) xrealloc (f->emit->x_regno_reg_rtx,
|
new1 = (rtx *) ggc_realloc (f->emit->x_regno_reg_rtx,
|
||||||
old_size * 2 * sizeof (rtx));
|
old_size * 2 * sizeof (rtx));
|
||||||
memset (new1 + old_size, 0, old_size * sizeof (rtx));
|
memset (new1 + old_size, 0, old_size * sizeof (rtx));
|
||||||
regno_reg_rtx = new1;
|
regno_reg_rtx = new1;
|
||||||
|
|
||||||
new2 = (tree *) xrealloc (f->emit->regno_decl,
|
new2 = (tree *) ggc_realloc (f->emit->regno_decl,
|
||||||
old_size * 2 * sizeof (tree));
|
old_size * 2 * sizeof (tree));
|
||||||
memset (new2 + old_size, 0, old_size * sizeof (tree));
|
memset (new2 + old_size, 0, old_size * sizeof (tree));
|
||||||
f->emit->regno_decl = new2;
|
f->emit->regno_decl = new2;
|
||||||
|
@ -2237,21 +2219,6 @@ restore_emit_status (p)
|
||||||
{
|
{
|
||||||
last_label_num = 0;
|
last_label_num = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear out all parts of the state in F that can safely be discarded
|
|
||||||
after the function has been compiled, to let garbage collection
|
|
||||||
reclaim the memory. */
|
|
||||||
|
|
||||||
void
|
|
||||||
free_emit_status (f)
|
|
||||||
struct function *f;
|
|
||||||
{
|
|
||||||
free (f->emit->x_regno_reg_rtx);
|
|
||||||
free (f->emit->regno_pointer_align);
|
|
||||||
free (f->emit->regno_decl);
|
|
||||||
free (f->emit);
|
|
||||||
f->emit = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Go through all the RTL insn bodies and copy any invalid shared
|
/* Go through all the RTL insn bodies and copy any invalid shared
|
||||||
structure. This routine should only be called once. */
|
structure. This routine should only be called once. */
|
||||||
|
@ -4436,6 +4403,9 @@ emit (x)
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Space for free sequence stack entries. */
|
||||||
|
static GTY ((deletable (""))) struct sequence_stack *free_sequence_stack;
|
||||||
|
|
||||||
/* Begin emitting insns to a sequence which can be packaged in an
|
/* Begin emitting insns to a sequence which can be packaged in an
|
||||||
RTL_EXPR. If this sequence will contain something that might cause
|
RTL_EXPR. If this sequence will contain something that might cause
|
||||||
the compiler to pop arguments to function calls (because those
|
the compiler to pop arguments to function calls (because those
|
||||||
|
@ -4449,7 +4419,13 @@ start_sequence ()
|
||||||
{
|
{
|
||||||
struct sequence_stack *tem;
|
struct sequence_stack *tem;
|
||||||
|
|
||||||
tem = (struct sequence_stack *) xmalloc (sizeof (struct sequence_stack));
|
if (free_sequence_stack != NULL)
|
||||||
|
{
|
||||||
|
tem = free_sequence_stack;
|
||||||
|
free_sequence_stack = tem->next;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tem = (struct sequence_stack *) ggc_alloc (sizeof (struct sequence_stack));
|
||||||
|
|
||||||
tem->next = seq_stack;
|
tem->next = seq_stack;
|
||||||
tem->first = first_insn;
|
tem->first = first_insn;
|
||||||
|
@ -4566,7 +4542,9 @@ end_sequence ()
|
||||||
seq_rtl_expr = tem->sequence_rtl_expr;
|
seq_rtl_expr = tem->sequence_rtl_expr;
|
||||||
seq_stack = tem->next;
|
seq_stack = tem->next;
|
||||||
|
|
||||||
free (tem);
|
memset (tem, 0, sizeof (*tem));
|
||||||
|
tem->next = free_sequence_stack;
|
||||||
|
free_sequence_stack = tem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This works like end_sequence, but records the old sequence in FIRST
|
/* This works like end_sequence, but records the old sequence in FIRST
|
||||||
|
@ -4824,7 +4802,7 @@ init_emit ()
|
||||||
{
|
{
|
||||||
struct function *f = cfun;
|
struct function *f = cfun;
|
||||||
|
|
||||||
f->emit = (struct emit_status *) xmalloc (sizeof (struct emit_status));
|
f->emit = (struct emit_status *) ggc_alloc (sizeof (struct emit_status));
|
||||||
first_insn = NULL;
|
first_insn = NULL;
|
||||||
last_insn = NULL;
|
last_insn = NULL;
|
||||||
seq_rtl_expr = NULL;
|
seq_rtl_expr = NULL;
|
||||||
|
@ -4841,14 +4819,16 @@ init_emit ()
|
||||||
f->emit->regno_pointer_align_length = LAST_VIRTUAL_REGISTER + 101;
|
f->emit->regno_pointer_align_length = LAST_VIRTUAL_REGISTER + 101;
|
||||||
|
|
||||||
f->emit->regno_pointer_align
|
f->emit->regno_pointer_align
|
||||||
= (unsigned char *) xcalloc (f->emit->regno_pointer_align_length,
|
= (unsigned char *) ggc_alloc_cleared (f->emit->regno_pointer_align_length
|
||||||
sizeof (unsigned char));
|
* sizeof (unsigned char));
|
||||||
|
|
||||||
regno_reg_rtx
|
regno_reg_rtx
|
||||||
= (rtx *) xcalloc (f->emit->regno_pointer_align_length, sizeof (rtx));
|
= (rtx *) ggc_alloc_cleared (f->emit->regno_pointer_align_length
|
||||||
|
* sizeof (rtx));
|
||||||
|
|
||||||
f->emit->regno_decl
|
f->emit->regno_decl
|
||||||
= (tree *) xcalloc (f->emit->regno_pointer_align_length, sizeof (tree));
|
= (tree *) ggc_alloc_cleared (f->emit->regno_pointer_align_length
|
||||||
|
* sizeof (tree));
|
||||||
|
|
||||||
/* Put copies of all the virtual register rtx into regno_reg_rtx. */
|
/* Put copies of all the virtual register rtx into regno_reg_rtx. */
|
||||||
init_virtual_regs (f->emit);
|
init_virtual_regs (f->emit);
|
||||||
|
@ -4884,46 +4864,6 @@ init_emit ()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark SS for GC. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
mark_sequence_stack (ss)
|
|
||||||
struct sequence_stack *ss;
|
|
||||||
{
|
|
||||||
while (ss)
|
|
||||||
{
|
|
||||||
ggc_mark_rtx (ss->first);
|
|
||||||
ggc_mark_tree (ss->sequence_rtl_expr);
|
|
||||||
ss = ss->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Mark ES for GC. */
|
|
||||||
|
|
||||||
void
|
|
||||||
mark_emit_status (es)
|
|
||||||
struct emit_status *es;
|
|
||||||
{
|
|
||||||
rtx *r;
|
|
||||||
tree *t;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (es == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (i = es->regno_pointer_align_length, r = es->x_regno_reg_rtx,
|
|
||||||
t = es->regno_decl;
|
|
||||||
i > 0; --i, ++r, ++t)
|
|
||||||
{
|
|
||||||
ggc_mark_rtx (*r);
|
|
||||||
ggc_mark_tree (*t);
|
|
||||||
}
|
|
||||||
|
|
||||||
mark_sequence_stack (es->sequence_stack);
|
|
||||||
ggc_mark_tree (es->sequence_rtl_expr);
|
|
||||||
ggc_mark_rtx (es->x_first_insn);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Generate the constant 0. */
|
/* Generate the constant 0. */
|
||||||
|
|
||||||
static rtx
|
static rtx
|
||||||
|
@ -4966,15 +4906,12 @@ init_emit_once (line_numbers)
|
||||||
tables. */
|
tables. */
|
||||||
const_int_htab = htab_create (37, const_int_htab_hash,
|
const_int_htab = htab_create (37, const_int_htab_hash,
|
||||||
const_int_htab_eq, NULL);
|
const_int_htab_eq, NULL);
|
||||||
ggc_add_deletable_htab (const_int_htab, 0, 0);
|
|
||||||
|
|
||||||
const_double_htab = htab_create (37, const_double_htab_hash,
|
const_double_htab = htab_create (37, const_double_htab_hash,
|
||||||
const_double_htab_eq, NULL);
|
const_double_htab_eq, NULL);
|
||||||
ggc_add_deletable_htab (const_double_htab, 0, 0);
|
|
||||||
|
|
||||||
mem_attrs_htab = htab_create (37, mem_attrs_htab_hash,
|
mem_attrs_htab = htab_create (37, mem_attrs_htab_hash,
|
||||||
mem_attrs_htab_eq, NULL);
|
mem_attrs_htab_eq, NULL);
|
||||||
ggc_add_deletable_htab (mem_attrs_htab, 0, mem_attrs_mark);
|
|
||||||
|
|
||||||
no_line_numbers = ! line_numbers;
|
no_line_numbers = ! line_numbers;
|
||||||
|
|
||||||
|
@ -5029,9 +4966,6 @@ init_emit_once (line_numbers)
|
||||||
gen_raw_REG (Pmode, VIRTUAL_OUTGOING_ARGS_REGNUM);
|
gen_raw_REG (Pmode, VIRTUAL_OUTGOING_ARGS_REGNUM);
|
||||||
virtual_cfa_rtx = gen_raw_REG (Pmode, VIRTUAL_CFA_REGNUM);
|
virtual_cfa_rtx = gen_raw_REG (Pmode, VIRTUAL_CFA_REGNUM);
|
||||||
|
|
||||||
/* These rtx must be roots if GC is enabled. */
|
|
||||||
ggc_add_rtx_root (global_rtl, GR_MAX);
|
|
||||||
|
|
||||||
#ifdef INIT_EXPANDERS
|
#ifdef INIT_EXPANDERS
|
||||||
/* This is to initialize {init|mark|free}_machine_status before the first
|
/* This is to initialize {init|mark|free}_machine_status before the first
|
||||||
call to push_function_context_to. This is needed by the Chill front
|
call to push_function_context_to. This is needed by the Chill front
|
||||||
|
@ -5047,7 +4981,6 @@ init_emit_once (line_numbers)
|
||||||
for (i = - MAX_SAVED_CONST_INT; i <= MAX_SAVED_CONST_INT; i++)
|
for (i = - MAX_SAVED_CONST_INT; i <= MAX_SAVED_CONST_INT; i++)
|
||||||
const_int_rtx[i + MAX_SAVED_CONST_INT] =
|
const_int_rtx[i + MAX_SAVED_CONST_INT] =
|
||||||
gen_rtx_raw_CONST_INT (VOIDmode, i);
|
gen_rtx_raw_CONST_INT (VOIDmode, i);
|
||||||
ggc_add_rtx_root (const_int_rtx, 2 * MAX_SAVED_CONST_INT + 1);
|
|
||||||
|
|
||||||
if (STORE_FLAG_VALUE >= - MAX_SAVED_CONST_INT
|
if (STORE_FLAG_VALUE >= - MAX_SAVED_CONST_INT
|
||||||
&& STORE_FLAG_VALUE <= MAX_SAVED_CONST_INT)
|
&& STORE_FLAG_VALUE <= MAX_SAVED_CONST_INT)
|
||||||
|
@ -5100,12 +5033,6 @@ init_emit_once (line_numbers)
|
||||||
if (STORE_FLAG_VALUE == 1)
|
if (STORE_FLAG_VALUE == 1)
|
||||||
const_tiny_rtx[1][(int) BImode] = const1_rtx;
|
const_tiny_rtx[1][(int) BImode] = const1_rtx;
|
||||||
|
|
||||||
/* For bounded pointers, `&const_tiny_rtx[0][0]' is not the same as
|
|
||||||
`(rtx *) const_tiny_rtx'. The former has bounds that only cover
|
|
||||||
`const_tiny_rtx[0]', whereas the latter has bounds that cover all. */
|
|
||||||
ggc_add_rtx_root ((rtx *) const_tiny_rtx, sizeof const_tiny_rtx / sizeof (rtx));
|
|
||||||
ggc_add_rtx_root (&const_true_rtx, 1);
|
|
||||||
|
|
||||||
#ifdef RETURN_ADDRESS_POINTER_REGNUM
|
#ifdef RETURN_ADDRESS_POINTER_REGNUM
|
||||||
return_address_pointer_rtx
|
return_address_pointer_rtx
|
||||||
= gen_raw_REG (Pmode, RETURN_ADDRESS_POINTER_REGNUM);
|
= gen_raw_REG (Pmode, RETURN_ADDRESS_POINTER_REGNUM);
|
||||||
|
@ -5152,13 +5079,6 @@ init_emit_once (line_numbers)
|
||||||
|
|
||||||
if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)
|
if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)
|
||||||
pic_offset_table_rtx = gen_raw_REG (Pmode, PIC_OFFSET_TABLE_REGNUM);
|
pic_offset_table_rtx = gen_raw_REG (Pmode, PIC_OFFSET_TABLE_REGNUM);
|
||||||
|
|
||||||
ggc_add_rtx_root (&pic_offset_table_rtx, 1);
|
|
||||||
ggc_add_rtx_root (&struct_value_rtx, 1);
|
|
||||||
ggc_add_rtx_root (&struct_value_incoming_rtx, 1);
|
|
||||||
ggc_add_rtx_root (&static_chain_rtx, 1);
|
|
||||||
ggc_add_rtx_root (&static_chain_incoming_rtx, 1);
|
|
||||||
ggc_add_rtx_root (&return_address_pointer_rtx, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Query and clear/ restore no_line_numbers. This is used by the
|
/* Query and clear/ restore no_line_numbers. This is used by the
|
||||||
|
@ -5249,3 +5169,5 @@ emit_copy_of_insn_after (insn, after)
|
||||||
}
|
}
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "gt-emit-rtl.h"
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue